diff --git a/app/ui/main.glade b/app/ui/main.glade index c5054de0..56d06f59 100644 --- a/app/ui/main.glade +++ b/app/ui/main.glade @@ -103,6 +103,11 @@ Author: Dmitriy Yefremov False gtk-clear + + True + False + gtk-clear + True False @@ -822,6 +827,11 @@ Author: Dmitriy Yefremov False gtk-find-and-replace + + True + False + gtk-find-and-replace + True False @@ -1063,6 +1073,32 @@ Author: Dmitriy Yefremov False + + + Mark not presented in Bouquets + True + False + mark_not_in_bq_image + False + + + + + + Clear marked + True + False + clear_mark_not_in_bq_image + False + + + + + + True + False + + Picon @@ -3752,7 +3788,7 @@ Author: Dmitriy Yefremov - Extra: + Extra True False extra_edit_image diff --git a/app/ui/main.py b/app/ui/main.py index 46ec7b93..c62ddcba 100644 --- a/app/ui/main.py +++ b/app/ui/main.py @@ -161,6 +161,8 @@ class Application(Gtk.Application): "on_fav_press": self.on_fav_press, "on_locate_in_services": self.on_locate_in_services, "on_mark_duplicates": self.on_mark_duplicates, + "on_services_mark_not_in_bouquets": self.on_services_mark_not_in_bouquets, + "on_services_clear_marked": self.on_services_clear_marked, "on_filter_changed": self.on_filter_changed, "on_filter_type_toggled": self.on_filter_type_toggled, "on_services_filter_toggled": self.on_services_filter_toggled, @@ -1887,15 +1889,8 @@ class Application(Gtk.Application): factor = self.DEL_FACTOR for index, srv in enumerate(services): - tooltip, background = None, None - if self._use_colors: - flags = srv.flags_cas - if flags: - f_flags = list(filter(lambda x: x.startswith("f:"), flags.split(","))) - if f_flags and Flag.is_new(Flag.parse(f_flags[0])): - background = self._NEW_COLOR - - s = srv._replace(picon=self._picons.get(srv.picon_id, None)) + (tooltip, background) + background = self.get_new_background(srv.flags_cas) + s = srv._replace(picon=self._picons.get(srv.picon_id, None)) + (None, background) self._services_model.append(s) if index % factor == 0: yield True @@ -1903,6 +1898,12 @@ class Application(Gtk.Application): self._services_load_spinner.stop() yield True + def get_new_background(self, flags): + if self._use_colors and flags: + f_flags = list(filter(lambda x: x.startswith("f:"), flags.split(","))) + if f_flags and Flag.is_new(Flag.parse(f_flags[0])): + return self._NEW_COLOR + def clear_current_data(self): """ Clearing current data from lists """ if len(self._services_model) > self.DEL_FACTOR * 50: @@ -3332,6 +3333,47 @@ class Application(Gtk.Application): if r[Column.FAV_SERVICE] in dup: r[Column.FAV_BACKGROUND] = self._NEW_COLOR + def on_services_mark_not_in_bouquets(self, item): + if self._services_load_spinner.get_property("active"): + self.show_error_message("Data loading in progress!") + return + + gen = self.mark_not_in_bouquets() + GLib.idle_add(lambda: next(gen, False), priority=GLib.PRIORITY_LOW) + + def mark_not_in_bouquets(self): + self._services_load_spinner.start() + ids = set(chain.from_iterable(self._bouquets.values())) + + for index, row in enumerate(self._services_model): + fav_id = row[Column.SRV_FAV_ID] + if fav_id not in ids: + row[Column.SRV_BACKGROUND] = self._EXTRA_COLOR + + if index % self.FAV_FACTOR == 0: + yield True + + self._services_load_spinner.stop() + yield True + + def on_services_clear_marked(self, item): + if self._services_load_spinner.get_property("active"): + self.show_error_message("Data loading in progress!") + return + + gen = self.clear_marked() + GLib.idle_add(lambda: next(gen, False), priority=GLib.PRIORITY_LOW) + + def clear_marked(self): + self._services_load_spinner.start() + for index, row in enumerate(self._services_model): + row[Column.SRV_BACKGROUND] = self.get_new_background(row[Column.SRV_CAS_FLAGS]) + if index % self.FAV_FACTOR == 0: + yield True + + self._services_load_spinner.stop() + yield True + # ***************** Picons *********************# @run_task