diff --git a/app/tools/picons.py b/app/tools/picons.py
index 3e37a7f7..9403bcce 100644
--- a/app/tools/picons.py
+++ b/app/tools/picons.py
@@ -106,6 +106,10 @@ class ProviderParser(HTMLParser):
""" Parser for satellite html page. (https://www.lyngsat.com/*sat-name*.html) """
_POSITION_PATTERN = re.compile("at\s\d+\..*(?:E|W)']")
+ _DOMAIN = "https://www.lyngsat.com"
+ _TV_DOMAIN = _DOMAIN + "/tvchannels/"
+ _RADIO_DOMAIN = _DOMAIN + "/radiochannels/"
+ _PKG_DOMAIN = _DOMAIN + "/packages/"
def __init__(self, entities=False, separator=' '):
@@ -121,6 +125,7 @@ class ProviderParser(HTMLParser):
self._current_cell = []
self.rows = []
self._ids = set()
+ self._prv_names = set()
self._positon = None
def handle_starttag(self, tag, attrs):
@@ -132,8 +137,9 @@ class ProviderParser(HTMLParser):
if attrs[0][1].startswith("logo/"):
self._current_row.append(attrs[0][1])
if tag == "a":
- if "https://www.lyngsat.com/packages/" in attrs[0][1]:
- self._current_row.append(attrs[0][1])
+ url = attrs[0][1]
+ if url.startswith((self._PKG_DOMAIN, self._TV_DOMAIN, self._RADIO_DOMAIN)):
+ self._current_row.append(url)
def handle_data(self, data):
""" Save content to a cell """
@@ -151,20 +157,33 @@ class ProviderParser(HTMLParser):
self._current_row.append(final_cell)
self._current_cell = []
elif tag == 'tr':
- row = self._current_row
+ r = self._current_row
# Satellite position
if not self._positon:
- pos = re.findall(self._POSITION_PATTERN, str(row))
+ pos = re.findall(self._POSITION_PATTERN, str(r))
if pos:
self._positon = "".join(c for c in str(pos) if c.isdigit() or c in ".EW")
- if len(row) == 12:
- on_id, sep, tid = str(row[-2]).partition("-")
+ len_row = len(r)
+
+ if len_row == 12:
+ name = r[5]
+ self._prv_names.add(name)
+ on_id, sep, tid = str(r[-2]).partition("-")
if tid and on_id not in self._ON_ID_BLACK_LIST and on_id not in self._ids:
- row[-2] = on_id
- self.rows.append(row)
+ r[-2] = on_id
self._ids.add(on_id)
- row[0] = self._positon
+ r[0] = self._positon
+ if name + on_id not in self._prv_names:
+ self._prv_names.add(name + on_id)
+ self.rows.append(Provider(logo=r[2], name=name, pos=r[0], url=r[6], on_id=r[-2], selected=True))
+ elif len_row == 8 and r[0].startswith(self._DOMAIN):
+ self.rows.append(
+ Provider(logo=None, name=r[1], pos=self._positon, url=r[0], on_id=None, selected=False))
+ elif len_row == 9 and r[1].startswith(self._DOMAIN):
+ self.rows.append(
+ Provider(logo=None, name=r[2], pos=self._positon, url=r[1], on_id=None, selected=False))
+
self._current_row = []
def error(self, message):
@@ -180,10 +199,8 @@ def parse_providers(open_path):
with open(open_path, encoding="utf-8", errors="replace") as f:
parser.feed(f.read())
- rows = parser.rows
- if rows:
- return [Provider(logo=r[2], name=r[5], pos=r[0], url=r[6], on_id=r[-2], selected=True) for r in rows]
+ return parser.rows
@run_task
diff --git a/app/ui/main_app_window.py b/app/ui/main_app_window.py
index 2dc9a9f1..c7bf3e1a 100644
--- a/app/ui/main_app_window.py
+++ b/app/ui/main_app_window.py
@@ -479,11 +479,6 @@ class MainAppWindow:
top_iter = model.get_iter(path)
if model.iter_n_children(top_iter): # parent
pass
- # for index, itr in enumerate(itrs):
- # ch_itr = model.insert(top_iter, index, rows[index])
- # print("PARENT")
- # ch_itr = model.insert(itr, 0, bq)
- # scroll_to(model.get_path(ch_itr), view, paths)
else:
list(map(lambda itr: model.move_before(itr, top_iter), itrs))
diff --git a/app/ui/picons_dialog.glade b/app/ui/picons_dialog.glade
index ea982557..cd9d773a 100644
--- a/app/ui/picons_dialog.glade
+++ b/app/ui/picons_dialog.glade
@@ -71,7 +71,6 @@ Author: Dmitriy Yefremov
- False
+ True
True
1
@@ -824,7 +823,7 @@ Author: Dmitriy Yefremov
- False
+ True
True
8
diff --git a/app/ui/picons_downloader.py b/app/ui/picons_downloader.py
index aef8a27f..67b54513 100644
--- a/app/ui/picons_downloader.py
+++ b/app/ui/picons_downloader.py
@@ -9,7 +9,7 @@ from app.commons import run_idle, run_task
from app.ftp import upload_data, DownloadType
from app.tools.picons import PiconsParser, parse_providers, Provider, convert_to
from app.properties import Profile
-from .uicommons import Gtk, Gdk, UI_RESOURCES_PATH, TEXT_DOMAIN
+from .uicommons import Gtk, Gdk, UI_RESOURCES_PATH, TEXT_DOMAIN, TV_ICON
from .dialogs import show_dialog, DialogType, get_message
from .main_helper import update_entry_data, append_text_to_tview
@@ -108,7 +108,7 @@ class PiconsDialog:
providers = parse_providers(self._TMP_DIR + url[url.find("w"):])
if providers:
for p in providers:
- model.append((self.get_pixbuf(p[0]), p.name, p.pos, p.url, p.on_id, p.selected))
+ model.append((self.get_pixbuf(p[0]) if p[0] else TV_ICON, p.name, p.pos, p.url, p.on_id, p.selected))
self.update_receive_button_state()
def get_pixbuf(self, img_url):