mirror of
https://github.com/DYefremov/DemonEditor.git
synced 2026-01-18 05:23:07 +01:00
adding favorites
This commit is contained in:
@@ -1576,7 +1576,7 @@ Discovery Channel
|
||||
p:HTB+,C:0500
|
||||
0523:01680000:000d:0070:22:0
|
||||
НТВ
|
||||
p:HTB+,C:0500
|
||||
p:HTB+,c:0000d7,c:01013b,c:020203,c:0300d7,c:050001,C:0500
|
||||
0324:0168affb:0008:0070:22:0
|
||||
НСТ
|
||||
p:HTB+,C:0500
|
||||
@@ -1924,7 +1924,7 @@ p:HTB+,C:0500
|
||||
p:HTB+,C:0500
|
||||
007a:01680000:0001:0070:22:0
|
||||
Hustler TV
|
||||
p:HTB+,C:0500
|
||||
p:HTB+,c:0000de,c:010142,c:0300de,c:050001,C:0500
|
||||
007b:01680000:0001:0070:22:0
|
||||
ЖАРА
|
||||
p:HTB+,C:0500
|
||||
@@ -2308,7 +2308,7 @@ Bollywood HD
|
||||
p:HTB+,C:0500
|
||||
0899:01680000:0016:0070:25:0
|
||||
HTB HD
|
||||
p:HTB+,C:0500
|
||||
p:HTB+,c:0000c9,c:01012d,c:0300c9,c:050001,C:0500
|
||||
089a:01680000:0016:0070:25:0
|
||||
Animal Planet HD
|
||||
p:HTB+,C:0500
|
||||
|
||||
@@ -2,22 +2,22 @@
|
||||
<!-- Generated with glade 3.18.3 -->
|
||||
<interface>
|
||||
<requires lib="gtk+" version="3.12"/>
|
||||
<object class="GtkTreeStore" id="bouquets_treestore">
|
||||
<object class="GtkTreeStore" id="bouquets_tree_store">
|
||||
<columns>
|
||||
<!-- column-name bouquet -->
|
||||
<column type="gchararray"/>
|
||||
</columns>
|
||||
</object>
|
||||
<object class="GtkListStore" id="fav_liststore">
|
||||
<object class="GtkListStore" id="fav_list_store">
|
||||
<columns>
|
||||
<!-- column-name Num -->
|
||||
<!-- column-name num -->
|
||||
<column type="gint"/>
|
||||
<!-- column-name Service -->
|
||||
<!-- column-name service -->
|
||||
<column type="gchararray"/>
|
||||
<!-- column-name Type -->
|
||||
<!-- column-name type -->
|
||||
<column type="gchararray"/>
|
||||
<!-- column-name pos -->
|
||||
<column type="gfloat"/>
|
||||
<column type="gchararray"/>
|
||||
</columns>
|
||||
</object>
|
||||
<object class="GtkImage" id="image1">
|
||||
@@ -304,7 +304,7 @@
|
||||
<property name="sizing">autosize</property>
|
||||
<property name="title" translatable="yes">Service</property>
|
||||
</object>
|
||||
<object class="GtkListStore" id="services_liststore">
|
||||
<object class="GtkListStore" id="services_list_store">
|
||||
<columns>
|
||||
<!-- column-name service -->
|
||||
<column type="gchararray"/>
|
||||
@@ -364,8 +364,8 @@
|
||||
<property name="can_focus">False</property>
|
||||
<property name="use_underline">True</property>
|
||||
<property name="use_stock">True</property>
|
||||
<signal name="activate" handler="on_data_open_bouquets" object="bouquets_treestore" swapped="no"/>
|
||||
<signal name="activate" handler="on_data_open_services" object="services_liststore" swapped="no"/>
|
||||
<signal name="activate" handler="on_data_open" object="bouquets_tree_store" swapped="no"/>
|
||||
<signal name="activate" handler="on_data_open" object="services_list_store" swapped="no"/>
|
||||
</object>
|
||||
</child>
|
||||
<child>
|
||||
@@ -547,8 +547,8 @@
|
||||
<property name="label" translatable="yes">Open</property>
|
||||
<property name="use_underline">True</property>
|
||||
<property name="stock_id">gtk-open</property>
|
||||
<signal name="clicked" handler="on_data_open_bouquets" object="bouquets_treestore" swapped="no"/>
|
||||
<signal name="clicked" handler="on_data_open_services" object="services_liststore" swapped="no"/>
|
||||
<signal name="clicked" handler="on_data_open" object="bouquets_tree_store" swapped="no"/>
|
||||
<signal name="clicked" handler="on_data_open" object="services_list_store" swapped="no"/>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
@@ -802,9 +802,9 @@
|
||||
<object class="GtkTreeView" id="services_tree_view">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="model">services_liststore</property>
|
||||
<property name="model">services_list_store</property>
|
||||
<property name="enable_grid_lines">both</property>
|
||||
<signal name="key-release-event" handler="on_tree_view_key_release" object="services_liststore" swapped="no"/>
|
||||
<signal name="key-release-event" handler="on_tree_view_key_release" object="services_list_store" swapped="no"/>
|
||||
<child internal-child="selection">
|
||||
<object class="GtkTreeSelection" id="treeview-selection1">
|
||||
<property name="mode">multiple</property>
|
||||
@@ -984,9 +984,9 @@
|
||||
<object class="GtkTreeView" id="fav_tree_view">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="model">fav_liststore</property>
|
||||
<property name="model">fav_list_store</property>
|
||||
<property name="enable_grid_lines">both</property>
|
||||
<signal name="key-release-event" handler="on_tree_view_key_release" object="fav_liststore" swapped="no"/>
|
||||
<signal name="key-release-event" handler="on_tree_view_key_release" object="fav_list_store" swapped="no"/>
|
||||
<child internal-child="selection">
|
||||
<object class="GtkTreeSelection" id="treeview-selection2">
|
||||
<property name="mode">multiple</property>
|
||||
@@ -1057,7 +1057,10 @@
|
||||
<object class="GtkTreeView" id="bouquets_tree_view">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="model">bouquets_treestore</property>
|
||||
<property name="model">bouquets_tree_store</property>
|
||||
<property name="headers_clickable">False</property>
|
||||
<property name="activate_on_single_click">True</property>
|
||||
<signal name="row-activated" handler="on_bouquets_selection" object="bouquets_tree_store" swapped="no"/>
|
||||
<child internal-child="selection">
|
||||
<object class="GtkTreeSelection" id="treeview-selection5"/>
|
||||
</child>
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
from .lamedb import get_channels
|
||||
from .bouquets import get_bouquets
|
||||
from .bouquets import get_bouquets, get_bouquet
|
||||
from .satxml import get_transponders
|
||||
|
||||
|
||||
|
||||
@@ -14,8 +14,13 @@ def get_bouquets(path):
|
||||
|
||||
|
||||
def get_bouquet(path, name, type):
|
||||
with open(path + "userbouquet.{}.{}".format(name, type)) as file:
|
||||
print(file.read())
|
||||
with open(path + "userbouquet.{}.{}".format(name, str(type))) as file:
|
||||
chs_list = file.read()
|
||||
ids = []
|
||||
for ch in chs_list.split("#SERVICE")[1:]:
|
||||
ch_data = ch.strip().split(":")
|
||||
ids.append("{}:{}:{}:{}".format(ch_data[3], ch_data[4], ch_data[5], ch_data[6]))
|
||||
return ids
|
||||
|
||||
|
||||
def parse_bouquets(path, name):
|
||||
@@ -33,5 +38,4 @@ def parse_bouquets(path, name):
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
# print(get_bouquet(__BOUQUETS_PATH, "TV", "tv"))
|
||||
pass
|
||||
|
||||
@@ -46,7 +46,7 @@ def parse_channels(*args):
|
||||
for ch in srv:
|
||||
data = str(ch[0]).split(_SEP)
|
||||
sp = "0"
|
||||
# For comparison in bouquets
|
||||
# For comparison in bouquets. Needed in upper case!!!
|
||||
fav_id = "{}:{}:{}:{}".format(str(data[0]).lstrip(sp), str(data[2]).lstrip(sp),
|
||||
str(data[3]).lstrip(sp), str(data[1]).lstrip(sp))
|
||||
pack = str(ch[2])
|
||||
@@ -56,7 +56,7 @@ def parse_channels(*args):
|
||||
pack = pack[2:] if pack.find(",") < 0 else pack[2:pack.find(",")]
|
||||
channels.append(Channel(ch[1], pack, SERVICE_TYPE.get(int(data[4]), SERVICE_TYPE[-2]), data[0], tr[0],
|
||||
tr[1], Polarization(int(tr[2])).name, FEC[int(tr[3])], SYSTEM[int(tr[6])],
|
||||
"{}{}.{}".format(*list(tr[4])), ch[0], fav_id))
|
||||
"{}{}.{}".format(*list(tr[4])), ch[0], fav_id.upper()))
|
||||
return channels
|
||||
|
||||
|
||||
@@ -73,5 +73,4 @@ def split(itr, size):
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
for ch in get_channels(_FILE_PATH):
|
||||
print(ch)
|
||||
pass
|
||||
|
||||
56
main/ui.py
56
main/ui.py
@@ -1,8 +1,11 @@
|
||||
import gi
|
||||
import os
|
||||
from ftplib import FTP
|
||||
|
||||
from threading import Thread
|
||||
from main.eparser.__constants import SERVICE_TYPE
|
||||
from main.properties import get_config, write_config
|
||||
from main.eparser import get_channels, get_transponders, get_bouquets
|
||||
from main.eparser import get_channels, get_transponders, get_bouquets, get_bouquet
|
||||
|
||||
gi.require_version('Gtk', '3.0')
|
||||
from gi.repository import Gtk, Gdk
|
||||
@@ -11,7 +14,9 @@ __status_bar = None
|
||||
__options = get_config()
|
||||
__services_model = None
|
||||
__bouquets_model = None
|
||||
__fav_model = None
|
||||
__DATA_FILES_LIST = ("tv", "radio", "lamedb")
|
||||
__channels = {}
|
||||
|
||||
|
||||
def on_about_app(item):
|
||||
@@ -30,28 +35,49 @@ def get_handlers():
|
||||
"on_download": on_download,
|
||||
"on_upload": on_upload,
|
||||
"on_data_dir_field_icon_press": on_path_open,
|
||||
"on_data_open_services": on_data_open_services,
|
||||
"on_data_open_bouquets": on_data_open_bouquets,
|
||||
"on_tree_view_key_release": on_tree_view_key_release
|
||||
"on_data_open": on_data_open,
|
||||
"on_tree_view_key_release": on_tree_view_key_release,
|
||||
"on_bouquets_selection": on_bouquets_selection
|
||||
}
|
||||
|
||||
|
||||
def on_data_open_services(items):
|
||||
def data_open(model):
|
||||
try:
|
||||
model.clear()
|
||||
__fav_model.clear()
|
||||
model_id = model.get_name()
|
||||
data_path = get_config()["data_dir_path"]
|
||||
for ch in get_channels(data_path + "lamedb"):
|
||||
items.append(ch)
|
||||
if model_id == "services_list_store":
|
||||
for ch in get_channels(data_path + "lamedb"):
|
||||
# adding channels to dict with fav_id as keys
|
||||
__channels[ch.fav_id] = ch
|
||||
model.append(ch)
|
||||
if model_id == "bouquets_tree_store":
|
||||
data = get_bouquets(data_path)
|
||||
for name, bouquets in data:
|
||||
parent = model.append(None, [name])
|
||||
for bouquet in bouquets:
|
||||
model.append(parent, [bouquet])
|
||||
except Exception as e:
|
||||
__status_bar.push(1, getattr(e, "message", repr(e)))
|
||||
|
||||
|
||||
def on_data_open_bouquets(item):
|
||||
data_path = get_config()["data_dir_path"]
|
||||
data = get_bouquets(data_path)
|
||||
for name, bouquets in data:
|
||||
parent = item.append(None, [name])
|
||||
for bouquet in bouquets:
|
||||
item.append(parent, [bouquet])
|
||||
def on_data_open(model):
|
||||
# Maybe is not necessary? Need testing.
|
||||
task = Thread(target=data_open(model))
|
||||
task.start()
|
||||
|
||||
|
||||
def on_bouquets_selection(model, path, column):
|
||||
if len(path) > 1:
|
||||
tree_iter = model.get_iter(path)
|
||||
name = model.get_value(tree_iter, 0)
|
||||
# 'tv' Temporary! It is necessary to implement a row type attribute.
|
||||
bq = get_bouquet(__options["data_dir_path"], name, SERVICE_TYPE[1].lower())
|
||||
__fav_model.clear()
|
||||
for num, ch_id in enumerate(bq):
|
||||
channel = __channels.get(ch_id, None)
|
||||
__fav_model.append((num + 1, channel[0], channel[2], channel[9]))
|
||||
|
||||
|
||||
def on_path_open(*args):
|
||||
@@ -171,6 +197,8 @@ def init_ui():
|
||||
builder = Gtk.Builder()
|
||||
builder.add_from_file("editor_ui.glade")
|
||||
main_window = builder.get_object("main_window")
|
||||
global __fav_model
|
||||
__fav_model = builder.get_object("fav_list_store")
|
||||
global __status_bar
|
||||
__status_bar = builder.get_object("status_bar")
|
||||
builder.connect_signals(get_handlers())
|
||||
|
||||
Reference in New Issue
Block a user