@@ -297,16 +297,32 @@ def add_files(self, file_paths: List[str]):
297297 norm_path = os .path .normpath (path )
298298
299299 if os .path .isdir (norm_path ):
300- # 如果传入的是文件夹路径,扫描其中的图片
300+ # 如果传入的是文件夹路径,递归扫描其中的所有图片(包括子文件夹)
301301 try :
302302 image_extensions = {'.png' , '.jpg' , '.jpeg' , '.bmp' , '.webp' }
303- files = [
304- os .path .join (norm_path , f )
305- for f in os .listdir (norm_path )
306- if os .path .splitext (f )[1 ].lower () in image_extensions
307- ]
303+ files = []
304+
305+ # 递归遍历文件夹及其子文件夹,按子文件夹顺序排序
306+ for root , dirs , filenames in os .walk (norm_path ):
307+ # 忽略 manga_translator_work 目录
308+ if 'manga_translator_work' in dirs :
309+ dirs .remove ('manga_translator_work' )
310+
311+ # 对子文件夹进行自然排序,确保按正确顺序遍历
312+ dirs .sort (key = natural_sort_key )
313+
314+ # 收集当前目录的图片并排序
315+ current_files = []
316+ for f in filenames :
317+ if os .path .splitext (f )[1 ].lower () in image_extensions :
318+ current_files .append (os .path .join (root , f ))
319+
320+ # 对当前目录的文件进行自然排序后添加
321+ current_files .sort (key = natural_sort_key )
322+ files .extend (current_files )
323+
308324 if files :
309- folder_groups [norm_path ] = sorted ( files , key = natural_sort_key )
325+ folder_groups [norm_path ] = files
310326 except Exception as e :
311327 print (f"Error loading files from folder { norm_path } : { e } " )
312328 else :
@@ -364,16 +380,31 @@ def _add_folder(self, folder_path: str):
364380 # 保存文件夹节点
365381 self .folder_nodes [folder_path ] = folder_item
366382
367- # 添加文件夹中的文件
383+ # 递归添加文件夹中的所有文件(包括子文件夹),按子文件夹顺序排序
368384 try :
369385 image_extensions = {'.png' , '.jpg' , '.jpeg' , '.bmp' , '.webp' }
370- files = [
371- os .path .join (folder_path , f )
372- for f in os .listdir (folder_path )
373- if os .path .splitext (f )[1 ].lower () in image_extensions
374- ]
386+ files = []
375387
376- for file_path in sorted (files , key = natural_sort_key ):
388+ # 递归遍历文件夹及其子文件夹,按子文件夹顺序排序
389+ for root , dirs , filenames in os .walk (folder_path ):
390+ # 忽略 manga_translator_work 目录
391+ if 'manga_translator_work' in dirs :
392+ dirs .remove ('manga_translator_work' )
393+
394+ # 对子文件夹进行自然排序,确保按正确顺序遍历
395+ dirs .sort (key = natural_sort_key )
396+
397+ # 收集当前目录的图片并排序
398+ current_files = []
399+ for f in filenames :
400+ if os .path .splitext (f )[1 ].lower () in image_extensions :
401+ current_files .append (os .path .join (root , f ))
402+
403+ # 对当前目录的文件进行自然排序后添加
404+ current_files .sort (key = natural_sort_key )
405+ files .extend (current_files )
406+
407+ for file_path in files :
377408 self ._add_file_to_folder (file_path , folder_item )
378409
379410 # 更新文件夹显示的文件数
@@ -413,8 +444,8 @@ def _add_folder_group(self, folder_path: str, files: List[str]):
413444 # 保存文件夹节点
414445 self .folder_nodes [folder_path ] = folder_item
415446
416- # 添加文件列表
417- for file_path in sorted ( files , key = natural_sort_key ) :
447+ # 添加文件列表(保持传入的顺序,已经按子文件夹排序好了)
448+ for file_path in files :
418449 self ._add_file_to_folder (file_path , folder_item )
419450
420451 # 更新文件夹显示的文件数
0 commit comments