Comic Input: Sort pages placed in sub-folders correctly (as long as all pages have the same number of parent folders).

This commit is contained in:
Kovid Goyal 2014-08-11 09:35:16 +05:30
parent e848adb5fb
commit feb19878e8

View File

@ -50,22 +50,26 @@ def find_pages(dir, sort_on_mtime=False, verbose=False):
pages = [] pages = []
for datum in os.walk(dir): for datum in os.walk(dir):
for name in datum[-1]: 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: if '__MACOSX' in path:
continue continue
for ext in extensions: for ext in extensions:
if path.lower().endswith('.'+ext): if path.lower().endswith('.'+ext):
pages.append(path) pages.append(path)
break 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: if sort_on_mtime:
key = lambda x:os.stat(x).st_mtime key = lambda x:os.stat(x).st_mtime
else: else:
key = lambda x:numeric_sort_key(os.path.basename(x)) key = lambda x:numeric_sort_key(basename(x))
pages.sort(key=key) pages.sort(key=key)
if verbose: if verbose:
prints('Found comic pages...') 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 return pages
class PageProcessor(list): # {{{ class PageProcessor(list): # {{{