示例#1
0
文件: add.py 项目: hashken/calibre
    def add(self, books):
        if isinstance(books, basestring):
            error_dialog(
                self.pd, _("Path error"), _("The specified directory could not be processed."), det_msg=books, show=True
            )
            return self.canceled()
        if not books:
            info_dialog(self.pd, _("No books"), _("No books found"), show=True)
            return self.canceled()
        books = [[b] if isinstance(b, basestring) else b for b in books]
        restricted = set()
        for i in xrange(len(books)):
            files = books[i]
            restrictedi = set(f for f in files if not os.access(f, os.R_OK))
            if restrictedi:
                files = [f for f in files if os.access(f, os.R_OK)]
                books[i] = files
            restricted |= restrictedi
        if restrictedi:
            det_msg = u"\n".join(restrictedi)
            warning_dialog(
                self.pd,
                _("No permission"),
                _(
                    "Cannot add some files as you do not have "
                    " permission to access them. Click Show"
                    " Details to see the list of such files."
                ),
                det_msg=det_msg,
                show=True,
            )
        books = list(filter(None, books))
        if not books:
            return self.canceled()
        self.rfind = None
        from calibre.ebooks.metadata.worker import read_metadata

        self.rq = Queue()
        tasks = []
        self.ids = {}
        self.nmap = {}
        self.duplicates = []
        for i, b in enumerate(books):
            tasks.append((i, b))
            self.ids[i] = b
            self.nmap[i] = os.path.basename(b[0])
        self.worker = read_metadata(tasks, self.rq, spare_server=self.spare_server)
        self.pd.set_min(0)
        self.pd.set_max(len(self.ids))
        self.pd.value = 0
        self.db_adder = DBAdder(self, self.db, self.ids, self.nmap)
        self.db_adder.start()
        self.last_added_at = time.time()
        self.entry_count = len(self.ids)
        self.continue_updating = True
        single_shot(self.update)
示例#2
0
 def add(self, books):
     if isinstance(books, basestring):
         error_dialog(self.pd,
                      _('Path error'),
                      _('The specified directory could not be processed.'),
                      det_msg=books,
                      show=True)
         return self.canceled()
     if not books:
         info_dialog(self.pd, _('No books'), _('No books found'), show=True)
         return self.canceled()
     books = [[b] if isinstance(b, basestring) else b for b in books]
     restricted = set()
     for i in xrange(len(books)):
         files = books[i]
         restrictedi = set(f for f in files if not os.access(f, os.R_OK))
         if restrictedi:
             files = [f for f in files if os.access(f, os.R_OK)]
             books[i] = files
         restricted |= restrictedi
     if restrictedi:
         det_msg = u'\n'.join(restrictedi)
         warning_dialog(self.pd,
                        _('No permission'),
                        _('Cannot add some files as you do not have '
                          ' permission to access them. Click Show'
                          ' Details to see the list of such files.'),
                        det_msg=det_msg,
                        show=True)
     books = list(filter(None, books))
     if not books:
         return self.canceled()
     self.rfind = None
     from calibre.ebooks.metadata.worker import read_metadata
     self.rq = Queue()
     tasks = []
     self.ids = {}
     self.nmap = {}
     self.duplicates = []
     for i, b in enumerate(books):
         tasks.append((i, b))
         self.ids[i] = b
         self.nmap[i] = os.path.basename(b[0])
     self.worker = read_metadata(tasks,
                                 self.rq,
                                 spare_server=self.spare_server)
     self.pd.set_min(0)
     self.pd.set_max(len(self.ids))
     self.pd.value = 0
     self.db_adder = DBAdder(self, self.db, self.ids, self.nmap)
     self.db_adder.start()
     self.last_added_at = time.time()
     self.entry_count = len(self.ids)
     self.continue_updating = True
     single_shot(self.update)