mirror of
https://github.com/ciromattia/kcc
synced 2025-12-13 09:46:25 +00:00
Fix random order of chapter list (close #129)
Directories and files returned by walk() are not always sorted. Currently we sort the filelist after creating the it. When walk()-ing topdown (we do) the directory list can be modified in-place. By sorting the directories and files before creating the filelist, we guarantee a sorted chapter list.
This commit is contained in:
committed by
Paweł Jastrzębski
parent
5f8f7e0919
commit
1ec07fe4ec
@@ -422,9 +422,14 @@ def buildEPUB(path, chapterNames, tomeNumber):
|
||||
"}",
|
||||
])
|
||||
f.close()
|
||||
# Ensure we're sorting dirs, files naturally
|
||||
convert = lambda text: int(text) if text.isdigit() else text
|
||||
alphanum_key = lambda key: [convert(c) for c in split('([0-9]+)', key)]
|
||||
for (dirpath, dirnames, filenames) in walk(os.path.join(path, 'OEBPS', 'Images')):
|
||||
chapter = False
|
||||
filenames.sort()
|
||||
# Traverse dirs in a sorted manner
|
||||
dirnames.sort(key=lambda name: alphanum_key(name.lower()))
|
||||
filenames.sort(key=lambda name: alphanum_key(name.lower()))
|
||||
for afile in filenames:
|
||||
filename = getImageFileName(afile)
|
||||
if '-kcc-hq' not in filename[0]:
|
||||
@@ -442,10 +447,6 @@ def buildEPUB(path, chapterNames, tomeNumber):
|
||||
and options.profile not in ['K1', 'K2', 'KDX', 'OTHER']:
|
||||
filelist[-1] = buildHTML(lastfile[0], lastfile[1], lastfile[2], True)
|
||||
buildNCX(path, options.title, chapterlist, chapterNames)
|
||||
# Ensure we're sorting files alphabetically
|
||||
convert = lambda text: int(text) if text.isdigit() else text
|
||||
alphanum_key = lambda key: [convert(c) for c in split('([0-9]+)', key)]
|
||||
filelist.sort(key=lambda name: (alphanum_key(name[0].lower()), alphanum_key(name[1].lower())))
|
||||
buildOPF(path, options.title, filelist, cover)
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user