Virgil Dupras  committed 1d1351a

Tweaked Make Selected into Reference.

Having dupes from ref folders (which makes ref switching impossible) would make
the new feature glitchy (selection would be emptied). Now, in cases where the action
results in nothing being changed, the selection stays intact. [#222]

  • Participants
  • Parent commits f296712

Comments (0)

Files changed (3)

         for dupe in dupes:
             g = self.results.get_group_of_duplicate(dupe)
             if g not in changed_groups:
-                self.results.make_ref(dupe)
-                changed_groups.add(g)
+                if self.results.make_ref(dupe):
+                    changed_groups.add(g)
         # It's not always obvious to users what this action does, so to make it a bit clearer,
         # we change our selection to the ref of all changed groups. However, we also want to keep
         # the files that were ref before and weren't changed by the action. In effect, what this
         # does is that we keep our old selection, but remove all non-ref dupes from it.
-        self.selected_dupes = [d for d in self.selected_dupes
-            if self.results.get_group_of_duplicate(d).ref is d]
+        # If no group was changed, however, we don't touch the selection.
+        if changed_groups:
+            self.selected_dupes = [d for d in self.selected_dupes
+                if self.results.get_group_of_duplicate(d).ref is d]
     def mark_all(self):

File core/

     def switch_ref(self, with_dupe):
         if self.ref.is_ref:
-            return
+            return False
             self.ordered.insert(0, with_dupe)
             self._percentage = None
             self._matches_for_ref = None
+            return True
         except ValueError:
-            pass
+            return False
     dupes = property(lambda self: self[1:])

File core/

     def make_ref(self, dupe):
         g = self.get_group_of_duplicate(dupe)
         r = g.ref
+        if not g.switch_ref(dupe):
+            return False
-        g.switch_ref(dupe);
         if not r.is_ref:
             self.__total_count += 1
             self.__total_size += r.size
             self.__total_size -= dupe.size
         self.__dupes = None
         self.is_modified = True
+        return True
     def perform_on_marked(self, func, remove_from_results):
         # Performs `func` on all marked dupes. If an EnvironmentError is raised during the call,