@@ -703,12 +703,16 @@ def merge_archives(self):
703703
704704 files .reverse ()
705705 files_added = []
706+ overwritten_names = []
706707 for file in files :
707- files_added .extend (self ._merge_archives (file ))
708+ added , overwritten = self ._merge_archives (file )
709+ files_added .extend (added )
710+ overwritten_names .extend (overwritten )
708711
709712 self .settings .last_dir = os .path .dirname (files [0 ])
710713 self .listwidget .add_files (files_added )
711714 self .update_archive_name ()
715+ self ._show_add_summary (len (files_added ) - len (overwritten_names ), overwritten_names )
712716
713717 def _merge_archives (self , path ):
714718 if self .settings .large_archive :
@@ -719,6 +723,7 @@ def _merge_archives(self, path):
719723
720724 skip_all = False
721725 files_added = []
726+ overwritten_names = []
722727 files = archive .file_list ()
723728 length = len (files )
724729 text_box = QMessageBox (
@@ -739,6 +744,7 @@ def _merge_archives(self, path):
739744 f"File: ({ index + 1 } /{ length } )<br>Processing: <b>{ file } </b>"
740745 )
741746 QApplication .processEvents ()
747+ overwrote = False
742748 if self .archive .file_exists (file ):
743749 default = (
744750 OverwriteDefault .OVERWRITE
@@ -763,10 +769,13 @@ def _merge_archives(self, path):
763769 skip_all = True
764770
765771 self .archive .remove_file (file )
772+ overwrote = True
766773
767774 self .archive .add_file (file , archive .read_file (file ))
768775
769776 files_added .append (file )
777+ if overwrote :
778+ overwritten_names .append (file )
770779
771780 size = self .archive .archive_memory_size ()
772781 if size > 524288000 :
@@ -789,7 +798,7 @@ def _merge_archives(self, path):
789798 )
790799 text_box .accept ()
791800
792- return files_added
801+ return files_added , overwritten_names
793802
794803 def new (self ):
795804 self ._new ()
@@ -843,7 +852,7 @@ def add_folder(self):
843852 def new_file (self ):
844853 self ._add_file (None , blank = True )
845854
846- def _add_file (self , url , * , blank = False , ask_name = True ):
855+ def _add_file (self , url , * , blank = False , ask_name = True , show_summary = True ):
847856 name = normalize_name (url )
848857 if self .settings .smart_replace_enabled :
849858 files = self .archive .file_list ()
@@ -876,9 +885,14 @@ def _add_file(self, url, *, blank=False, ask_name=True):
876885 self .listwidget .add_files ([name ])
877886 self .refresh_tabs ([name ])
878887
888+ if show_summary :
889+ new , overwritten = self ._classify_add (ret )
890+ self ._show_add_summary (new , [name ] if overwritten else [])
879891 return ret
880892
881- def _add_file_with_name (self , url , suggested_name , * , blank = False , ask_name = True ):
893+ def _add_file_with_name (
894+ self , url , suggested_name , * , blank = False , ask_name = True , show_summary = True
895+ ):
882896 """Add a file to archive with a pre-suggested name
883897 (e.g., from drag-drop between archives).
884898 """
@@ -899,12 +913,17 @@ def _add_file_with_name(self, url, suggested_name, *, blank=False, ask_name=True
899913 self .listwidget .add_files ([name ])
900914 self .refresh_tabs ([name ])
901915
916+ if show_summary :
917+ new , overwritten = self ._classify_add (ret )
918+ self ._show_add_summary (new , [name ] if overwritten else [])
902919 return ret
903920
904- def _add_folder (self , url ):
921+ def _add_folder (self , url , * , show_summary = True ):
905922 skip_all = False
906923 common_dir = os .path .dirname (url )
907924 files_to_add = []
925+ new_count = 0
926+ overwritten_names = []
908927 for root , _ , files in os .walk (url ):
909928 for f in files :
910929 full_path = os .path .join (root , f )
@@ -916,11 +935,19 @@ def _add_folder(self, url):
916935 if ret != QMessageBox .StandardButton .No :
917936 files_to_add .append (name )
918937
938+ new , overwritten = self ._classify_add (ret )
939+ new_count += new
940+ if overwritten :
941+ overwritten_names .append (name )
942+
919943 if ret == QMessageBox .StandardButton .YesToAll :
920944 skip_all = True
921945
922946 self .listwidget .add_files (files_to_add )
923947 self .update_archive_name ()
948+ if show_summary :
949+ self ._show_add_summary (new_count , overwritten_names )
950+ return new_count , overwritten_names
924951
925952 def add_file_to_archive (self , url , name , blank = False , skip_all = False , undoable = True ):
926953 replaced_data = None
@@ -964,6 +991,35 @@ def add_file_to_archive(self, url, name, blank=False, skip_all=False, undoable=T
964991
965992 return ret
966993
994+ @staticmethod
995+ def _classify_add (ret ) -> tuple [int , int ]:
996+ """Map an add_file_to_archive return value to (new, overwritten) counts.
997+
998+ ``None`` means a new file was added; ``Yes``/``YesToAll`` means an
999+ existing file was overwritten; ``No`` (skipped) and ``False`` (rename
1000+ cancelled) mean nothing was added.
1001+ """
1002+ if ret is False or ret == QMessageBox .StandardButton .No :
1003+ return 0 , 0
1004+ if ret is None :
1005+ return 1 , 0
1006+ return 0 , 1
1007+
1008+ def _show_add_summary (self , new_count : int , overwritten_names : list [str ]) -> None :
1009+ overwritten_count = len (overwritten_names )
1010+ total = new_count + overwritten_count
1011+ if total == 0 :
1012+ return
1013+ box = QMessageBox (
1014+ QMessageBox .Icon .Information ,
1015+ "Files added" ,
1016+ f"Added { total } file(s) — { new_count } new, { overwritten_count } overwritten." ,
1017+ parent = self ,
1018+ )
1019+ if overwritten_names :
1020+ box .setDetailedText ("Overwritten files:\n " + "\n " .join (overwritten_names ))
1021+ box .exec ()
1022+
9671023 def is_file_selected (self ):
9681024 if not self .listwidget .active_list .is_file_selected ():
9691025 QMessageBox .warning (self , "No file selected" , "You have not selected a file" )
@@ -1337,6 +1393,8 @@ def dropEvent(self, event: QDropEvent):
13371393 original_paths [os .path .normpath (temp )] = original
13381394
13391395 yes_to_all = False
1396+ new_count = 0
1397+ overwritten_names = []
13401398 for url in md .urls ():
13411399 local_file = url .toLocalFile ()
13421400
@@ -1350,16 +1408,26 @@ def dropEvent(self, event: QDropEvent):
13501408 if os .path .isfile (local_file ):
13511409 suggested_name = original_paths .get (os .path .normpath (local_file ))
13521410 ret = (
1353- self ._add_file_with_name (local_file , suggested_name , ask_name = False )
1411+ self ._add_file_with_name (
1412+ local_file , suggested_name , ask_name = False , show_summary = False
1413+ )
13541414 if suggested_name
1355- else self ._add_file (local_file , ask_name = not yes_to_all )
1415+ else self ._add_file (local_file , ask_name = not yes_to_all , show_summary = False )
13561416 )
1417+ new , overwritten = self ._classify_add (ret )
1418+ new_count += new
1419+ if overwritten :
1420+ overwritten_names .append (suggested_name or normalize_name (local_file ))
13571421 else :
1358- ret = self ._add_folder (local_file )
1422+ new , names = self ._add_folder (local_file , show_summary = False )
1423+ new_count += new
1424+ overwritten_names .extend (names )
1425+ ret = None
13591426
13601427 if ret == QMessageBox .StandardButton .YesToAll :
13611428 yes_to_all = True
13621429
1430+ self ._show_add_summary (new_count , overwritten_names )
13631431 event .acceptProposedAction ()
13641432
13651433
0 commit comments