mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-07-09 03:04:10 -04:00
Check library: Dont abort if there are folders in the library that calibre does not have permission to access. Fixes #1884544 [Library check tries to read system files](https://bugs.launchpad.net/calibre/+bug/1884544)
Merge branch 'master' of https://github.com/cbhaley/calibre
This commit is contained in:
commit
e73312ffb8
@ -108,33 +108,38 @@ class CheckLibrary(object):
|
|||||||
|
|
||||||
# Look for titles in the author directories
|
# Look for titles in the author directories
|
||||||
found_titles = False
|
found_titles = False
|
||||||
for title_dir in os.listdir(auth_path):
|
try:
|
||||||
if self.ignore_name(title_dir):
|
for title_dir in os.listdir(auth_path):
|
||||||
continue
|
if self.ignore_name(title_dir):
|
||||||
title_path = os.path.join(auth_path, title_dir)
|
|
||||||
db_path = os.path.join(auth_dir, title_dir)
|
|
||||||
m = self.db_id_regexp.search(title_dir)
|
|
||||||
# Second check: title must have an ID and must be a directory
|
|
||||||
if m is None or not os.path.isdir(title_path):
|
|
||||||
self.invalid_titles.append((auth_dir, db_path, 0))
|
|
||||||
continue
|
|
||||||
|
|
||||||
id_ = m.group(1)
|
|
||||||
# Third check: the id_ must be in the DB and the paths must match
|
|
||||||
if self.is_case_sensitive:
|
|
||||||
if int(id_) not in self.all_ids or \
|
|
||||||
db_path not in self.all_dbpaths:
|
|
||||||
self.extra_titles.append((title_dir, db_path, 0))
|
|
||||||
continue
|
continue
|
||||||
else:
|
title_path = os.path.join(auth_path, title_dir)
|
||||||
if int(id_) not in self.all_ids or \
|
db_path = os.path.join(auth_dir, title_dir)
|
||||||
db_path.lower() not in self.all_lc_dbpaths:
|
m = self.db_id_regexp.search(title_dir)
|
||||||
self.extra_titles.append((title_dir, db_path, 0))
|
# Second check: title must have an ID and must be a directory
|
||||||
|
if m is None or not os.path.isdir(title_path):
|
||||||
|
self.invalid_titles.append((auth_dir, db_path, 0))
|
||||||
continue
|
continue
|
||||||
|
|
||||||
# Record the book to check its formats
|
id_ = m.group(1)
|
||||||
self.book_dirs.append((db_path, title_dir, id_))
|
# Third check: the id_ must be in the DB and the paths must match
|
||||||
found_titles = True
|
if self.is_case_sensitive:
|
||||||
|
if int(id_) not in self.all_ids or \
|
||||||
|
db_path not in self.all_dbpaths:
|
||||||
|
self.extra_titles.append((title_dir, db_path, 0))
|
||||||
|
continue
|
||||||
|
else:
|
||||||
|
if int(id_) not in self.all_ids or \
|
||||||
|
db_path.lower() not in self.all_lc_dbpaths:
|
||||||
|
self.extra_titles.append((title_dir, db_path, 0))
|
||||||
|
continue
|
||||||
|
|
||||||
|
# Record the book to check its formats
|
||||||
|
self.book_dirs.append((db_path, title_dir, id_))
|
||||||
|
found_titles = True
|
||||||
|
except:
|
||||||
|
traceback.print_exc()
|
||||||
|
# Sort-of check: exception processing directory
|
||||||
|
self.failed_folders.append((auth_dir, traceback.format_exc(), []))
|
||||||
|
|
||||||
# Fourth check: author directories that contain no titles
|
# Fourth check: author directories that contain no titles
|
||||||
if not found_titles:
|
if not found_titles:
|
||||||
|
Loading…
x
Reference in New Issue
Block a user