From 62d9e21433779d560437448edc846c41d2dd3f35 Mon Sep 17 00:00:00 2001 From: DYefremov Date: Thu, 27 Sep 2018 22:02:35 +0300 Subject: [PATCH] positions update optimisation for the filter --- app/ui/main_app_window.py | 61 +++++++++++++++++++++++++++------------ app/ui/main_window.glade | 5 ++++ 2 files changed, 47 insertions(+), 19 deletions(-) diff --git a/app/ui/main_app_window.py b/app/ui/main_app_window.py index cc9451a1..d72e2113 100644 --- a/app/ui/main_app_window.py +++ b/app/ui/main_app_window.py @@ -1,5 +1,6 @@ import os import shutil +import time from contextlib import suppress from functools import lru_cache @@ -159,6 +160,8 @@ class MainAppWindow: self._picons = {} self._blacklist = set() self._current_bq_name = None + # Current satellite positions in the services list + self._sat_positions = [] # Player self._player = None self._full_screen = False @@ -390,33 +393,32 @@ class MainAppWindow: model_name = get_base_model(model).get_name() itrs = [model.get_iter(path) for path in paths] rows = [model[in_itr][:] for in_itr in itrs] - bq_selected = self.get_selected_bouquet() - fav_bouquet = None - if bq_selected: - fav_bouquet = self._bouquets.get(bq_selected, None) if model_name == self._FAV_LIST_NAME: - self.remove_favs(fav_bouquet, itrs, model) + self.remove_favs(itrs, model) elif model_name == self._BOUQUETS_LIST_NAME: self.delete_bouquets(itrs, model) elif model_name == self._SERVICE_LIST_NAME: - self.delete_services(bq_selected, itrs, model, rows) + self.delete_services(itrs, model, rows) self.on_view_focus(view, None) return rows @run_idle - def remove_favs(self, fav_bouquet, itrs, model): + def remove_favs(self, itrs, model): """ Deleting bouquet services """ - if fav_bouquet: - for itr in itrs: - del fav_bouquet[int(model.get_path(itr)[0])] - self._fav_model.remove(itr) - self.update_fav_num_column(model) + bq_selected = self.get_selected_bouquet() + if bq_selected: + fav_bouquet = self._bouquets.get(bq_selected, None) + if fav_bouquet: + for itr in itrs: + del fav_bouquet[int(model.get_path(itr)[0])] + self._fav_model.remove(itr) + self.update_fav_num_column(model) @run_idle - def delete_services(self, bq_selected, itrs, model, rows): + def delete_services(self, itrs, model, rows): """ Deleting services """ srv_itrs = [self._services_model_filter.convert_iter_to_child_iter( model.convert_iter_to_child_iter(itr)) for itr in itrs] @@ -439,6 +441,7 @@ class MainAppWindow: for f_itr in filter(lambda r: r[7] in srv_ids_to_delete, self._fav_model): self._fav_model.remove(f_itr.iter) self.update_fav_num_column(self._fav_model) + self.update_sat_positions() def delete_bouquets(self, itrs, model): """ Deleting bouquets """ @@ -713,7 +716,7 @@ class MainAppWindow: self.append_blacklist(black_list) self.append_bouquets(bouquets) self.append_services(services) - self.update_filter_sat_positions() + self.update_sat_positions() self.update_services_counts(len(self._services.values())) def append_blacklist(self, black_list): @@ -781,6 +784,7 @@ class MainAppWindow: self._extra_bouquets.clear() self._current_bq_name = None self._bq_name_label.set_text("") + self.init_sat_positions() @run_idle def on_data_save(self, *args): @@ -1271,13 +1275,32 @@ class MainAppWindow: self._filter_bar.set_search_mode(active) self._filter_bar.set_visible(active) + def init_sat_positions(self): + self._sat_positions.clear() + first = (self._filter_sat_positions_model[0][0],) + self._filter_sat_positions_model.clear() + self._filter_sat_positions_model.append(first) + self._filter_sat_positions_box.set_active(0) + + def update_sat_positions(self): + self._sat_positions.clear() + self._sat_positions.extend(map(str, sorted({float(x.pos) for x in self._services.values() if x.pos}))) + if self._filter_bar.is_visible(): + self.update_filter_sat_positions() + @run_idle def update_filter_sat_positions(self): - self._filter_sat_positions_model.clear() - self._filter_sat_positions_model.append(("All positions",)) - self._filter_sat_positions_box.set_active(0) - sats = {float(x.pos) for x in self._services.values() if x.pos} - list(map(self._filter_sat_positions_model.append, map(lambda x: (str(x),), sorted(sats)))) + model = self._filter_sat_positions_model + if len(model) < 2: + list(map(self._filter_sat_positions_model.append, map(lambda x: (str(x),), self._sat_positions))) + else: + selected = self._filter_sat_positions_box.get_active_id() + active = self._filter_sat_positions_box.get_active() + itrs = list(filter(lambda it: model[it][0] not in self._sat_positions, [row.iter for row in model][1:])) + list(map(model.remove, itrs)) + + if active != 0 and selected not in self._sat_positions: + self._filter_sat_positions_box.set_active(0) @run_with_delay(1) def on_filter_changed(self, item): diff --git a/app/ui/main_window.glade b/app/ui/main_window.glade index f9e54451..6f251cd0 100644 --- a/app/ui/main_window.glade +++ b/app/ui/main_window.glade @@ -209,6 +209,11 @@ Author: Dmitriy Yefremov + + + All positions + +