Beispiel #1
0
 def __init__(self, mw: AnkiQt, importer: Any) -> None:
     QDialog.__init__(self, mw, Qt.Window)
     self.mw = mw
     self.importer = importer
     self.frm = aqt.forms.importing.Ui_ImportDialog()
     self.frm.setupUi(self)
     qconnect(
         self.frm.buttonBox.button(QDialogButtonBox.Help).clicked,
         self.helpRequested)
     disable_help_button(self)
     self.setupMappingFrame()
     self.setupOptions()
     self.modelChanged()
     self.frm.autoDetect.setVisible(self.importer.needDelimiter)
     gui_hooks.current_note_type_did_change.append(self.modelChanged)
     qconnect(self.frm.autoDetect.clicked, self.onDelimiter)
     self.updateDelimiterButtonText()
     self.frm.allowHTML.setChecked(self.mw.pm.profile.get(
         "allowHTML", True))
     qconnect(self.frm.importMode.currentIndexChanged,
              self.importModeChanged)
     self.frm.importMode.setCurrentIndex(
         self.mw.pm.profile.get("importMode", 1))
     self.frm.tagModified.setText(self.mw.pm.profile.get("tagModified", ""))
     self.frm.tagModified.setCol(self.mw.col)
     # import button
     b = QPushButton(tr.actions_import())
     self.frm.buttonBox.addButton(b, QDialogButtonBox.AcceptRole)
     self.exec_()
Beispiel #2
0
def onImport(mw: AnkiQt) -> None:
    filt = ";;".join([x[0] for x in importing.importers(mw.col)])
    file = getFile(mw, tr.actions_import(), None, key="import", filter=filt)
    if not file:
        return
    file = str(file)

    head, ext = os.path.splitext(file)
    ext = ext.lower()
    if ext == ".anki":
        showInfo(tr.importing_anki_files_are_from_a_very())
        return
    elif ext == ".anki2":
        showInfo(tr.importing_anki2_files_are_not_directly_importable())
        return

    importFile(mw, file)
Beispiel #3
0
    def accept(self) -> None:
        self.importer.mapping = self.mapping
        if not self.importer.mappingOk():
            showWarning(tr.importing_the_first_field_of_the_note())
            return
        self.importer.importMode = self.frm.importMode.currentIndex()
        self.mw.pm.profile["importMode"] = self.importer.importMode
        self.importer.allowHTML = self.frm.allowHTML.isChecked()
        self.mw.pm.profile["allowHTML"] = self.importer.allowHTML
        self.importer.tagModified = self.frm.tagModified.text()
        self.mw.pm.profile["tagModified"] = self.importer.tagModified
        self.mw.col.set_aux_notetype_config(self.importer.model["id"],
                                            "lastDeck",
                                            self.deck.selected_deck_id)
        self.mw.col.models.save(self.importer.model, updateReqs=False)
        self.mw.progress.start()
        self.mw.checkpoint(tr.actions_import())

        def on_done(future: Future) -> None:
            self.mw.progress.finish()

            try:
                future.result()
            except UnicodeDecodeError:
                showUnicodeWarning()
                return
            except Exception as e:
                msg = f"{tr.importing_failed_debug_info()}\n"
                err = repr(str(e))
                if "1-character string" in err:
                    msg += err
                elif "invalidTempFolder" in err:
                    msg += self.mw.errorHandler.tempFolderMsg()
                else:
                    msg += traceback.format_exc()
                showText(msg)
                return
            else:
                txt = f"{tr.importing_importing_complete()}\n"
                if self.importer.log:
                    txt += "\n".join(self.importer.log)
                self.close()
                showText(txt, plain_text_edit=True)
                self.mw.reset()

        self.mw.taskman.run_in_background(self.importer.run, on_done)