add filtering by coding presence

This commit is contained in:
DYefremov
2025-05-02 16:16:05 +03:00
parent 5576bd8112
commit aa2b06ea27
2 changed files with 80 additions and 11 deletions

View File

@@ -3,7 +3,7 @@
The MIT License (MIT)
Copyright (c) 2018-2024 Dmitriy Yefremov
Copyright (c) 2018-2025 Dmitriy Yefremov
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
@@ -32,7 +32,7 @@ Author: Dmitriy Yefremov
<!-- interface-license-type mit -->
<!-- interface-name DemonEditor -->
<!-- interface-description Enigma2 channel and satellite list editor. -->
<!-- interface-copyright 2018-2024 Dmitriy Yefremov -->
<!-- interface-copyright 2018-2025 Dmitriy Yefremov -->
<!-- interface-authors Dmitriy Yefremov -->
<object class="GtkListStore" id="alt_list_store">
<columns>
@@ -298,6 +298,67 @@ Author: Dmitriy Yefremov
</object>
</child>
</object>
<object class="GtkPopover" id="filter_cas_popover">
<property name="can-focus">False</property>
<child>
<object class="GtkButtonBox">
<property name="width-request">100</property>
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="border-width">5</property>
<property name="orientation">vertical</property>
<property name="layout-style">expand</property>
<child>
<object class="GtkRadioButton" id="filter_all_button">
<property name="label" translatable="yes">All</property>
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">False</property>
<property name="active">True</property>
<property name="draw-indicator">False</property>
<signal name="toggled" handler="on_filter_changed" swapped="no"/>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkRadioButton" id="filter_free_button">
<property name="label" translatable="yes">Free</property>
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">False</property>
<property name="draw-indicator">False</property>
<property name="group">filter_coded_button</property>
<signal name="toggled" handler="on_filter_changed" swapped="no"/>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
<child>
<object class="GtkRadioButton" id="filter_coded_button">
<property name="label" translatable="yes">Coded</property>
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">False</property>
<property name="draw-indicator">False</property>
<property name="group">filter_all_button</property>
<signal name="toggled" handler="on_filter_changed" swapped="no"/>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">2</property>
</packing>
</child>
</object>
</child>
</object>
<object class="GtkListStore" id="filter_sat_pos_list_store">
<columns>
<!-- column-name satellite -->
@@ -2022,22 +2083,23 @@ Author: Dmitriy Yefremov
<object class="GtkBox" id="services_fs_box">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="margin-left">5</property>
<property name="margin-right">5</property>
<property name="margin-start">5</property>
<property name="margin-end">5</property>
<property name="margin-bottom">5</property>
<property name="spacing">10</property>
<property name="orientation">vertical</property>
<property name="spacing">5</property>
<child>
<object class="GtkBox" id="filter_box">
<property name="can-focus">False</property>
<property name="valign">center</property>
<child>
<object class="GtkToggleButton" id="filter_only_free_button">
<object class="GtkMenuButton" id="filter_cas_menu_button">
<property name="width-request">50</property>
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="receives-default">True</property>
<property name="tooltip-text" translatable="yes">Only free</property>
<signal name="toggled" handler="on_filter_changed" swapped="no"/>
<property name="tooltip-text" translatable="yes">Access</property>
<property name="popover">filter_cas_popover</property>
<child>
<object class="GtkImage">
<property name="visible">True</property>

View File

@@ -456,7 +456,9 @@ class Application(Gtk.Application):
self._filter_types_model = builder.get_object("filter_types_list_store")
self._filter_sat_pos_model = builder.get_object("filter_sat_pos_list_store")
self._filter_bouquet_model = builder.get_object("filter_bouquet_list_store")
self._filter_only_free_button = builder.get_object("filter_only_free_button")
self._filter_all_button = builder.get_object("filter_all_button")
self._filter_free_button = builder.get_object("filter_free_button")
self._filter_coded_button = builder.get_object("filter_coded_button")
self._filter_not_in_bq_button = builder.get_object("filter_not_in_bq_button")
self._services_load_spinner.bind_property("active", self._filter_services_button, "sensitive", 4)
self._filter_iptv_services_button = builder.get_object("filter_iptv_services_button")
@@ -3829,7 +3831,7 @@ class Application(Gtk.Application):
def filter_set_default(self):
""" Setting defaults for filter elements. """
self._filter_entry.set_text("")
self._filter_only_free_button.set_active(False)
self._filter_all_button.set_active(True)
self._filter_not_in_bq_button.set_active(False)
self._filter_types_model.foreach(lambda m, p, i: m.set_value(i, 1, True))
self._service_types.update({r[0] for r in self._filter_types_model})
@@ -3920,7 +3922,12 @@ class Application(Gtk.Application):
txt = self._filter_entry.get_text().upper()
for r in self._services_model:
fav_id = r[Column.SRV_FAV_ID]
free = not r[Column.SRV_CODED] if self._filter_only_free_button.get_active() else True
free = True
if self._filter_free_button.get_active():
free = not r[Column.SRV_CODED]
elif self._filter_coded_button.get_active():
free = r[Column.SRV_CODED]
self._filter_cache[fav_id] = all((free, fav_id not in self._in_bouquets,
r[Column.SRV_TYPE] in self._service_types,
r[Column.SRV_POS] in self._sat_positions,