From feb19878e8ab35708b43a23a86dede500637203b Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Mon, 11 Aug 2014 09:35:16 +0530 Subject: [PATCH] Comic Input: Sort pages placed in sub-folders correctly (as long as all pages have the same number of parent folders). --- src/calibre/ebooks/comic/input.py | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/src/calibre/ebooks/comic/input.py b/src/calibre/ebooks/comic/input.py index 02c6fbfec7..d144b72eae 100755 --- a/src/calibre/ebooks/comic/input.py +++ b/src/calibre/ebooks/comic/input.py @@ -50,22 +50,26 @@ def find_pages(dir, sort_on_mtime=False, verbose=False): pages = [] for datum in os.walk(dir): for name in datum[-1]: - path = os.path.join(datum[0], name) + path = os.path.abspath(os.path.join(datum[0], name)) if '__MACOSX' in path: continue for ext in extensions: if path.lower().endswith('.'+ext): pages.append(path) break + sep_counts = {x.replace(os.sep, '/').count('/') for x in pages} + # Use the full path to sort unless the files are in folders of different + # levels, in which case simply use the filenames. + basename = os.path.basename if len(sep_counts) > 1 else lambda x: x if sort_on_mtime: key = lambda x:os.stat(x).st_mtime else: - key = lambda x:numeric_sort_key(os.path.basename(x)) + key = lambda x:numeric_sort_key(basename(x)) pages.sort(key=key) if verbose: prints('Found comic pages...') - prints('\t'+'\n\t'.join([os.path.basename(p) for p in pages])) + prints('\t'+'\n\t'.join([os.path.relpath(p, dir) for p in pages])) return pages class PageProcessor(list): # {{{