Also make recursing through directories work with long paths

This commit is contained in:
Kovid Goyal 2020-10-23 20:31:16 +05:30
parent d2624dedb8
commit 748152cd7a
No known key found for this signature in database
GPG Key ID: 06BC317B515ACE7C

View File

@ -5,15 +5,18 @@
__license__ = 'GPL v3' __license__ = 'GPL v3'
__copyright__ = '2013, Kovid Goyal <kovid at kovidgoyal.net>' __copyright__ = '2013, Kovid Goyal <kovid at kovidgoyal.net>'
import os, time, re import os
import re
import time
from collections import defaultdict from collections import defaultdict
from polyglot.builtins import itervalues, map as it_map, unicode_type
from contextlib import contextmanager from contextlib import contextmanager
from functools import partial from functools import partial
from calibre import prints from calibre import prints
from calibre.constants import iswindows, ismacos, filesystem_encoding from calibre.constants import filesystem_encoding, ismacos, iswindows
from calibre.ebooks import BOOK_EXTENSIONS from calibre.ebooks import BOOK_EXTENSIONS
from calibre.utils.filenames import make_long_path_useable
from polyglot.builtins import itervalues, map as it_map, unicode_type
def splitext(path): def splitext(path):
@ -85,7 +88,7 @@ else:
def listdir(root, sort_by_mtime=False): def listdir(root, sort_by_mtime=False):
items = (os.path.join(root, x) for x in unicode_listdir(root)) items = (make_long_path_useable(os.path.join(root, x)) for x in unicode_listdir(root))
if sort_by_mtime: if sort_by_mtime:
def safe_mtime(x): def safe_mtime(x):
try: try:
@ -123,12 +126,13 @@ def run_import_plugins(formats):
ans = run_import_plugins(formats, import_ctx['group_id'], import_ctx['tdir']) ans = run_import_plugins(formats, import_ctx['group_id'], import_ctx['tdir'])
fm = import_ctx['format_map'] fm = import_ctx['format_map']
for old_path, new_path in zip(formats, ans): for old_path, new_path in zip(formats, ans):
new_path = make_long_path_useable(new_path)
fm[new_path] = old_path fm[new_path] = old_path
return ans return ans
def find_books_in_directory(dirpath, single_book_per_directory, compiled_rules=(), listdir_impl=listdir): def find_books_in_directory(dirpath, single_book_per_directory, compiled_rules=(), listdir_impl=listdir):
dirpath = os.path.abspath(dirpath) dirpath = make_long_path_useable(os.path.abspath(dirpath))
if single_book_per_directory: if single_book_per_directory:
formats = {} formats = {}
for path in listdir_impl(dirpath): for path in listdir_impl(dirpath):