diff --git a/app/ui/xml/dialogs.py b/app/ui/xml/dialogs.py index b6316a1c..14258391 100644 --- a/app/ui/xml/dialogs.py +++ b/app/ui/xml/dialogs.py @@ -43,7 +43,7 @@ from app.eparser.ecommons import (PLS_MODE, get_key_by_value, POLARIZATION, FEC, HIERARCHY, Inversion, C_MODULATION, FEC_DEFAULT, TerTransponder, CableTransponder, Bouquet, BouquetService, BqServiceType, Bouquets, BqType) from app.eparser.satxml import get_pos_str -from app.settings import USE_HEADER_BAR +from app.settings import USE_HEADER_BAR, Settings, CONFIG_PATH from app.tools.satellites import SatellitesParser, SatelliteSource, ServicesParser from ..dialogs import show_dialog, DialogType, get_message, get_builder from ..main_helper import append_text_to_tview, get_base_model, on_popup_menu @@ -412,6 +412,7 @@ class UpdateDialog: self._settings = settings self._download_task = False self._parser = None + self._selected_satellites = set() builder = get_builder(f"{UI_RESOURCES_PATH}xml{os.sep}update.glade", handlers) @@ -464,6 +465,7 @@ class UpdateDialog: self._sat_view.connect("realize", self.on_update_satellites_list) # Options. self._general_options_box = builder.get_object("general_options_box") + self._save_sat_selection_switch = builder.get_object("save_sat_selection_switch") self._skip_c_band_switch = builder.get_object("skip_c_band_switch") if self._settings.use_header_bar: @@ -482,7 +484,12 @@ class UpdateDialog: self._dialog_name = f"{'_'.join(re.findall('[A-Z][^A-Z]*', self.__class__.__name__))}".lower() self._dialog_settings = self._settings.get(self._dialog_name, {}) self._source_box.set_active(self._dialog_settings.get("source", 1)) + self._save_sat_selection_switch.set_active(self._dialog_settings.get("save_sat_selection", False)) self._skip_c_band_switch.set_active(self._dialog_settings.get("skip_c_band", False)) + + if self._save_sat_selection_switch.get_active(): + self._selected_satellites.update(self.get_selected_satellites()) + window_size = self._dialog_settings.get("window_size", None) if window_size: self._window.resize(*window_size) @@ -538,8 +545,10 @@ class UpdateDialog: @run_idle def append_satellites(self, sats): model = get_base_model(self._sat_view.get_model()) + for sat in sats: - model.append(sat) + itr = model.append(sat) + model[itr][-1] = sat[-2] in self._selected_satellites self._sat_view.set_sensitive(True) self._satellites_count_label.set_text(str(len(model))) @@ -638,6 +647,10 @@ class UpdateDialog: itr = self._filter_model.convert_iter_to_child_iter(model.convert_iter_to_child_iter(model.get_iter(path))) self._filter_model.get_model().set_value(itr, 4, select) + if self._save_sat_selection_switch.get_active(): + sat = model[path][-2] + self._selected_satellites.add(sat) if select else self._selected_satellites.discard(sat) + def on_quit(self, window, event): self.save_settings() self.is_download = False @@ -645,8 +658,21 @@ class UpdateDialog: def save_settings(self): self._dialog_settings["window_size"] = self._window.get_size() self._dialog_settings["source"] = self._source_box.get_active() + self._dialog_settings["save_sat_selection"] = self._save_sat_selection_switch.get_active() self._dialog_settings["skip_c_band"] = self._skip_c_band_switch.get_active() self._settings.add(self._dialog_name, self._dialog_settings) + self.save_selected_satellites() + + def get_selected_satellites(self): + """ Returns selected satellites set from the last session. """ + c_file = f"{CONFIG_PATH}{self._dialog_name}_satellites" + return Settings.get_settings(c_file, default_settings=[]) + + def save_selected_satellites(self): + """ Saves current selected satellites to a file. """ + if self._save_sat_selection_switch.get_active(): + c_file = f"{CONFIG_PATH}{self._dialog_name}_satellites" + Settings.write_settings(list(self._selected_satellites), config_file=c_file) class SatellitesUpdateDialog(UpdateDialog): @@ -972,10 +998,9 @@ class ServicesUpdateDialog(UpdateDialog): self.is_download = False def on_satellite_toggled(self, toggle, path): - model = self._sat_view.get_model() - self.update_state(model, path, not toggle.get_active()) - self.update_receive_button_state(self._filter_model) + super().on_satellite_toggled(toggle, path) + model = self._sat_view.get_model() url = model.get_value(model.get_iter(path), 3) selected = toggle.get_active() transponders = self._transponders.get(url, None) diff --git a/app/ui/xml/update.glade b/app/ui/xml/update.glade index 036b1ece..a5d03bb2 100644 --- a/app/ui/xml/update.glade +++ b/app/ui/xml/update.glade @@ -60,6 +60,43 @@ Author: Dmitriy Yefremov 0 + + + True + False + 5 + + + True + True + center + + + False + True + end + 0 + + + + + True + False + Save satellite selection + + + False + True + 2 + + + + + False + True + 0 + + True @@ -94,7 +131,6 @@ Author: Dmitriy Yefremov False True - end 1 @@ -241,8 +277,8 @@ Author: Dmitriy Yefremov True False - 15 - 15 + 15 + 15 5 5 5 @@ -668,8 +704,8 @@ Author: Dmitriy Yefremov True True - 5 - 5 + 5 + 5 5 5 True @@ -683,8 +719,8 @@ Author: Dmitriy Yefremov True False - 5 - 5 + 5 + 5 5 5 vertical @@ -802,8 +838,8 @@ Author: Dmitriy Yefremov True False - 10 - 10 + 10 + 10 5 @@ -866,8 +902,8 @@ Author: Dmitriy Yefremov True False - 5 - 5 + 5 + 5 5 5 vertical @@ -940,8 +976,8 @@ Author: Dmitriy Yefremov True False - 10 - 10 + 10 + 10 5 @@ -999,8 +1035,8 @@ Author: Dmitriy Yefremov True False - 5 - 5 + 5 + 5 5 5 vertical @@ -1113,8 +1149,8 @@ Author: Dmitriy Yefremov True False - 10 - 10 + 10 + 10 5 @@ -1181,8 +1217,8 @@ Author: Dmitriy Yefremov False - 4 - 5 + 5 + 5 5 0 in