Exemple #1
0
    def __init__(self,
                 source,
                 single_book_per_directory=True,
                 db=None,
                 parent=None,
                 callback=None,
                 pool=None,
                 list_of_archives=False):
        if isinstance(source, str):
            source = make_long_path_useable(source)
        else:
            source = list(map(make_long_path_useable, source))
        if not validate_source(source, parent):
            return
        QObject.__init__(self, parent)
        self.author_map_rules = None
        if gprefs.get('author_map_on_add_rules'):
            from calibre.ebooks.metadata.author_mapper import compile_rules as acr
            self.author_map_rules = acr(gprefs['author_map_on_add_rules'])
        self.single_book_per_directory = single_book_per_directory
        self.ignore_opf = False
        self.list_of_archives = list_of_archives
        self.callback = callback
        self.add_formats_to_existing = prefs['add_formats_to_existing']
        self.do_one_signal.connect(self.tick,
                                   type=Qt.ConnectionType.QueuedConnection)
        self.pool = pool
        self.pd = ProgressDialog(_('Adding books...'),
                                 _('Scanning for files...'),
                                 min=0,
                                 max=0,
                                 parent=parent,
                                 icon='add_book.png')
        self.db = getattr(db, 'new_api', None)
        if self.db is not None:
            self.dbref = weakref.ref(db)
        self.source = source
        self.tdir = PersistentTemporaryDirectory('_add_books')
        self.scan_error = None
        self.file_groups = OrderedDict()
        self.abort_scan = False
        self.duplicates = []
        self.report = []
        self.items = []
        self.added_book_ids = set()
        self.merged_formats_added_to = set()
        self.merged_books = set()
        self.added_duplicate_info = set()
        self.pd.show()

        self.scan_thread = Thread(target=self.scan, name='ScanBooks')
        self.scan_thread.daemon = True
        self.scan_thread.start()
        self.do_one = self.monitor_scan
        self.do_one_signal.emit()
        if DEBUG:
            self.start_time = time.time()
Exemple #2
0
def run_import_plugins(formats):
    from calibre.ebooks.metadata.worker import run_import_plugins
    import_ctx['group_id'] += 1
    ans = run_import_plugins(formats, import_ctx['group_id'],
                             import_ctx['tdir'])
    fm = import_ctx['format_map']
    for old_path, new_path in zip(formats, ans):
        new_path = make_long_path_useable(new_path)
        fm[new_path] = old_path
    return ans
Exemple #3
0
 def export_settings(self):
     name, ok = QInputDialog.getText(self,
                                     _('Name for these settings'),
                                     _('Theme name:'),
                                     text=_('My cover style'))
     if ok:
         base = os.path.join(config_dir, 'cover-generation-themes')
         os.makedirs(base, exist_ok=True)
         path = make_long_path_useable(os.path.join(base, name + '.json'))
         raw = self.settings.serialized_prefs
         with open(path, 'wb') as f:
             f.write(raw)
Exemple #4
0
def path_from_qurl(qurl, allow_remote=False):
    lf = qurl.toLocalFile()
    if lf:
        if iswindows:
            from calibre_extensions.winutil import get_long_path_name
            lf = get_long_path_name(lf)
            lf = make_long_path_useable(lf)
        return lf
    if not allow_remote:
        return ''
    if qurl.scheme() in remote_protocols:
        path = qurl.path()
        if path and '.' in path:
            return path.rpartition('.')[-1]
    return ''
Exemple #5
0
def listdir(root, sort_by_mtime=False):
    items = (make_long_path_useable(os.path.join(root, x))
             for x in unicode_listdir(root))
    if sort_by_mtime:

        def safe_mtime(x):
            try:
                return os.path.getmtime(x)
            except OSError:
                return time.time()

        items = sorted(items, key=safe_mtime)

    for path in items:
        if path_ok(path):
            yield path
Exemple #6
0
def find_books_in_directory(dirpath,
                            single_book_per_directory,
                            compiled_rules=(),
                            listdir_impl=listdir):
    dirpath = make_long_path_useable(os.path.abspath(dirpath))
    if single_book_per_directory:
        formats = {}
        for path in listdir_impl(dirpath):
            key, ext = splitext(path)
            if allow_path(path, ext, compiled_rules):
                formats[ext] = path
        if formats_ok(formats):
            yield list(itervalues(formats))
    else:
        books = defaultdict(dict)
        for path in listdir_impl(dirpath, sort_by_mtime=True):
            key, ext = splitext(path)
            if allow_path(path, ext, compiled_rules):
                books[icu_lower(key) if isinstance(key, str) else key.lower(
                )][ext] = path

        for formats in itervalues(books):
            if formats_ok(formats):
                yield list(itervalues(formats))