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_()
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)
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)