diff --git a/app/ui/iptv.py b/app/ui/iptv.py index e495f516..192fa716 100644 --- a/app/ui/iptv.py +++ b/app/ui/iptv.py @@ -705,30 +705,55 @@ class M3uImportDialog(IptvListDialog): self._apply_button.set_label(translate("Import")) # Extra box. builder = get_builder(f"{UI_RESOURCES_PATH}m3u.glade", use_str=True, objects=("import_m3u_box",)) - self._data_box.add(builder.get_object("import_m3u_box")) self._info_label = builder.get_object("info_label") self._progress_bar = builder.get_object("progress_bar") self._spinner = builder.get_object("spinner") self._spinner.bind_property("active", self._start_values_grid, "sensitive", 4) self._picon_switch = builder.get_object("picon_switch") self._picon_box = builder.get_object("picon_box") - # builder.get_object("import_type_box").set_visible(False) + # Type import buttons. + self._current_bq_button = builder.get_object("current_bq_button") + self._single_bq_button = builder.get_object("single_bq_button") + self._group_bq_button = builder.get_object("group_bq_button") + self._sub_bq_button = builder.get_object("sub_bq_button") + # EPG src. + self._epg_links_button = builder.get_object("epg_links_box") + self._add_epg_src_switch = builder.get_object("add_epg_src_switch") + + m3u_box = builder.get_object("import_m3u_box") + if s_type is SettingsType.ENIGMA_2: + self._data_box.add(m3u_box) + else: + self._data_box.set_visible(False) + self._sub_bq_button.set_sensitive(False) + m3u_box.set_margin_start(5) + m3u_box.set_margin_end(5) + self._dialog.get_content_area().pack_start(m3u_box, True, True, 0) self.get_m3u(m3_path, s_type) @run_task def get_m3u(self, path, s_type): try: - GLib.idle_add(self._spinner.set_property, "active", True) + GLib.idle_add(self._spinner.start) self._epg_src, self._services = parse_m3u(path, s_type) for s in self._services: if s.picon: GLib.idle_add(self._picon_box.set_sensitive, True) break finally: - msg = f"{translate('Streams detected:')} {len(self._services) if self._services else 0}." - GLib.idle_add(self._info_label.set_text, msg) - GLib.idle_add(self._spinner.set_property, "active", False) + self.update_info() + + @run_idle + def update_info(self): + msg = f"{translate('Streams detected:')} {len(self._services) if self._services else 0}." + self._info_label.set_text(msg) + self._spinner.stop() + + if self._epg_src: + self._epg_links_button.set_visible(True) + [self._epg_links_button.append(u, u) for u in self._epg_src] + self._epg_links_button.set_active(0) def on_apply(self, item): if not self._app.current_bouquet: @@ -766,6 +791,9 @@ class M3uImportDialog(IptvListDialog): services.append(s._replace(picon=None, picon_id=picon_id, data_id=None, fav_id=fav_id)) + if self._add_epg_src_switch.get_active(): + self.on_add_epg_source() + if self._picon_switch.get_active(): if self.is_default_values(): msg = "Set values for TID, NID and Namespace for correct naming of the picons!" @@ -778,6 +806,18 @@ class M3uImportDialog(IptvListDialog): self._app.append_imported_services(services) + def on_add_epg_source(self): + active_src = self._epg_links_button.get_active_id() + settings = self._app.app_settings + sources = settings.epg_xml_sources + log(f"Adding an EPG source -> {active_src}") + if active_src not in set(sources): + sources.append(active_src) + settings.epg_xml_sources = sources + self._app.emit("epg-settings-changed", None) + else: + log(f"{translate('This URL already exists!')}") + @run_task def download_picons(self, picons): self._is_download = True diff --git a/app/ui/m3u.glade b/app/ui/m3u.glade index e390cf89..8e77f029 100644 --- a/app/ui/m3u.glade +++ b/app/ui/m3u.glade @@ -464,7 +464,7 @@ Author: Dmitriy Yefremov False expand - + Current bouquet header-button True @@ -490,7 +490,7 @@ Author: Dmitriy Yefremov False True False - cuurent_bq_button + current_bq_button True @@ -499,7 +499,7 @@ Author: Dmitriy Yefremov - + Split by groups header-button True @@ -526,7 +526,7 @@ Author: Dmitriy Yefremov False True False - cuurent_bq_button + current_bq_button True @@ -648,6 +648,113 @@ Author: Dmitriy Yefremov 1 + + + 30 + True + False + + + True + False + EPG source + + + False + True + 0 + + + + + True + False + : + + + False + True + 1 + + + + + True + start + 5 + 5 + 0 + True + + + False + + + + + False + False + 2 + + + + + True + False + 5 + 5 + Not found. + + + False + True + 3 + + + + + False + False + 5 + 5 + + + True + False + Add to EPG sources list + + + False + True + 0 + + + + + True + True + + + False + True + 1 + + + + + False + True + end + 4 + + + + + False + True + 2 + +