adding favorites

This commit is contained in:
Dmitriy Yefremov
2017-10-11 23:22:30 +03:00
parent a5fabb1797
commit 2686e00a8d
6 changed files with 75 additions and 41 deletions

View File

@@ -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

View File

@@ -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>

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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())