From 23c59787e56095cb675eb8a44c8e6fdc64d37caf Mon Sep 17 00:00:00 2001 From: glubsy Date: Wed, 23 Jun 2021 05:36:10 +0200 Subject: [PATCH] Fix infinite recursion Force the Results to update its internal __dupes list whenever at least one group has re-prioritized and changed its dupes/ref. --- core/app.py | 2 ++ core/results.py | 33 ++++++++++++++++++--------------- 2 files changed, 20 insertions(+), 15 deletions(-) diff --git a/core/app.py b/core/app.py index db15fcfe..20e31a3b 100644 --- a/core/app.py +++ b/core/app.py @@ -770,6 +770,8 @@ class DupeGuru(Broadcaster): for group in self.results.groups: if group.prioritize(key_func=sort_key): count += 1 + if count: + self.results.refresh_required = True self._results_changed() msg = tr("{} duplicate groups were changed by the re-prioritization.").format( count diff --git a/core/results.py b/core/results.py index 68923548..14c27880 100644 --- a/core/results.py +++ b/core/results.py @@ -52,6 +52,7 @@ class Results(Markable): self.app = app self.problems = [] # (dupe, error_msg) self.is_modified = False + self.refresh_required = False def _did_mark(self, dupe): self.__marked_size += dupe.size @@ -94,21 +95,23 @@ class Results(Markable): # ---Private def __get_dupe_list(self): - self.__dupes = flatten(group.dupes for group in self.groups) - if None in self.__dupes: - # This is debug logging to try to figure out #44 - logging.warning( - "There is a None value in the Results' dupe list. dupes: %r groups: %r", - self.__dupes, - self.groups, - ) - if self.__filtered_dupes: - self.__dupes = [ - dupe for dupe in self.__dupes if dupe in self.__filtered_dupes - ] - sd = self.__dupes_sort_descriptor - if sd: - self.sort_dupes(sd[0], sd[1], sd[2]) + if self.__dupes is None or self.refresh_required: + self.__dupes = flatten(group.dupes for group in self.groups) + self.refresh_required = False + if None in self.__dupes: + # This is debug logging to try to figure out #44 + logging.warning( + "There is a None value in the Results' dupe list. dupes: %r groups: %r", + self.__dupes, + self.groups, + ) + if self.__filtered_dupes: + self.__dupes = [ + dupe for dupe in self.__dupes if dupe in self.__filtered_dupes + ] + sd = self.__dupes_sort_descriptor + if sd: + self.sort_dupes(sd[0], sd[1], sd[2]) return self.__dupes def __get_groups(self):