コード例 #1
0
 def _showOptions(self, did: str) -> None:
     m = QMenu(self.mw)
     a = m.addAction(tr.actions_rename())
     qconnect(a.triggered, lambda b, did=did: self._rename(DeckId(int(did))))
     a = m.addAction(tr.actions_options())
     qconnect(a.triggered, lambda b, did=did: self._options(DeckId(int(did))))
     a = m.addAction(tr.actions_export())
     qconnect(a.triggered, lambda b, did=did: self._export(DeckId(int(did))))
     a = m.addAction(tr.actions_delete())
     qconnect(a.triggered, lambda b, did=did: self._delete(DeckId(int(did))))
     gui_hooks.deck_browser_will_show_options_menu(m, int(did))
     m.exec_(QCursor.pos())
コード例 #2
0
    def accept(self) -> None:
        self.exporter.includeSched = self.frm.includeSched.isChecked()
        self.exporter.includeMedia = self.frm.includeMedia.isChecked()
        self.exporter.includeTags = self.frm.includeTags.isChecked()
        self.exporter.includeHTML = self.frm.includeHTML.isChecked()
        idx = self.frm.deck.currentIndex()
        if self.cids is not None:
            # Browser Selection
            self.exporter.cids = self.cids
            self.exporter.did = None
        elif idx == 0:
            # All decks
            self.exporter.did = None
            self.exporter.cids = None
        else:
            # Deck idx-1 in the list of decks
            self.exporter.cids = None
            name = self.decks[self.frm.deck.currentIndex()]
            self.exporter.did = self.col.decks.id(name)
        if self.isVerbatim:
            name = time.strftime("-%Y-%m-%d@%H-%M-%S",
                                 time.localtime(time.time()))
            deck_name = tr.exporting_collection() + name
        else:
            # Get deck name and remove invalid filename characters
            deck_name = self.decks[self.frm.deck.currentIndex()]
            deck_name = re.sub('[\\\\/?<>:*|"^]', "_", deck_name)

        filename = f"{deck_name}{self.exporter.ext}"
        if callable(self.exporter.key):
            key_str = self.exporter.key(self.col)
        else:
            key_str = self.exporter.key
        while 1:
            file = getSaveFile(
                self,
                tr.actions_export(),
                "export",
                key_str,
                self.exporter.ext,
                fname=filename,
            )
            if not file:
                return
            if checkInvalidFilename(os.path.basename(file), dirsep=False):
                continue
            file = os.path.normpath(file)
            if os.path.commonprefix([self.mw.pm.base,
                                     file]) == self.mw.pm.base:
                showWarning("Please choose a different export location.")
                continue
            break
        self.hide()
        if file:
            # check we can write to file
            try:
                f = open(file, "wb")
                f.close()
            except OSError as e:
                showWarning(tr.exporting_couldnt_save_file(val=str(e)))
            else:
                os.unlink(file)

            # progress handler
            def exported_media(cnt: int) -> None:
                self.mw.taskman.run_on_main(lambda: self.mw.progress.update(
                    label=tr.exporting_exported_media_file(count=cnt)))

            def do_export() -> None:
                self.exporter.exportInto(file)

            def on_done(future: Future) -> None:
                self.mw.progress.finish()
                hooks.media_files_did_export.remove(exported_media)
                # raises if exporter failed
                future.result()
                self.on_export_finished()

            self.mw.progress.start()
            hooks.media_files_did_export.append(exported_media)

            self.mw.taskman.run_in_background(do_export, on_done)