diff --git a/app/eparser/enigma/lamedb.py b/app/eparser/enigma/lamedb.py index bc75d365..d6ca6798 100644 --- a/app/eparser/enigma/lamedb.py +++ b/app/eparser/enigma/lamedb.py @@ -105,11 +105,11 @@ class LameDbReader: services_list = [] blacklist = get_blacklist(self._path) if self._path else {} srvs = self.split(services, 3) - if srvs[0][0] == "": # remove first empty element + if srvs[0][0] == "": # Remove first empty element. srvs.remove(srvs[0]) for srv in srvs: - data_id = str(srv[0]).lower() # lower is for lamedb ver.3 + data_id = str(srv[0]).lower() # Lower is for lamedb ver.3. data = data_id.split(_SEP) sp = "0" tid = data[2] @@ -157,6 +157,8 @@ class LameDbReader: service_type = SERVICE_TYPE.get(data[4], SERVICE_TYPE["-2"]) # Removing all non printable symbols! srv_name = "".join(c for c in srv[1] if c.isprintable()) + freq = tr[0] + rate = tr[1] pol = None fec = None system = None @@ -166,7 +168,7 @@ class LameDbReader: pol = POLARIZATION.get(tr[2], None) fec = FEC.get(tr[3], None) system = "DVB-S2" if len(tr) > 7 else "DVB-S" - pos = "{}.{}".format(tr[4][:-1], tr[4][-1:]) + pos = tr[4] if tr_type is TrType.Terrestrial: system = T_SYSTEM.get(tr[9], None) pos = "T" @@ -176,26 +178,20 @@ class LameDbReader: pos = "C" fec = FEC_DEFAULT.get(tr[4]) - services_list.append(Service(flags_cas=srv[2], - transponder_type=tr_type.value, - coded=coded, - service=srv_name, - locked=locked, - hide=hide, - package=package, - service_type=service_type, - picon=None, - picon_id=picon_id, - ssid=data[0], - freq=tr[0], - rate=tr[1], - pol=pol, - fec=fec, - system=system, - pos=pos, - data_id=data_id, - fav_id=fav_id, - transponder=transponder)) + # Formatting displayed values. + try: + freq = "{}".format(int(freq) // 1000) + rate = "{}".format(int(rate) // 1000) + if tr_type is TrType.Satellite: + pos = int(pos) + pos = "{:0.1f}{}".format(abs(pos / 10), "W" if pos < 0 else "E") + except ValueError as e: + log("Parse error [parse_services]: {}".format(e)) + + s = Service(srv[2], tr_type.value, coded, srv_name, locked, hide, package, service_type, None, + picon_id, data[0], freq, rate, pol, fec, system, pos, data_id, fav_id, transponder) + + services_list.append(s) return services_list def get_services_list(self, data): diff --git a/app/eparser/neutrino/bouquets.py b/app/eparser/neutrino/bouquets.py index c9bfb570..7f6d0939 100644 --- a/app/eparser/neutrino/bouquets.py +++ b/app/eparser/neutrino/bouquets.py @@ -89,11 +89,8 @@ def parse_webtv(path, name, bq_type): group = group.value if group else group fav_id = NEUTRINO_FAV_ID_FORMAT.format(url, description, urlkey, account, usrname, psw, s_type, iconsrc, iconsrc_b, group) - srv = BouquetService(name=title, - type=BqServiceType.IPTV, - data=fav_id, - num=0) - services.append(srv) + services.append(BouquetService(name=title, type=BqServiceType.IPTV, data=fav_id, num=0)) + bouquet = Bouquet(name="default", type=bq_type, services=services, locked=None, hidden=None) bouquets[2].append(bouquet) @@ -125,14 +122,15 @@ def write_bouquet(file, bouquet): root.appendChild(bq_elem) for srv in bq.services: + f_data = srv.flags_cas.split(":") tr_id, on, ssid = srv.fav_id.split(":") srv_elem = doc.createElement("S") srv_elem.setAttribute("i", ssid) srv_elem.setAttribute("n", srv.service) srv_elem.setAttribute("t", tr_id) srv_elem.setAttribute("on", on) - srv_elem.setAttribute("s", srv.pos.replace(".", "")) - srv_elem.setAttribute("frq", srv.freq[:-3]) + srv_elem.setAttribute("s", f_data[1]) + srv_elem.setAttribute("frq", srv.freq) srv_elem.setAttribute("l", "0") # temporary !!! bq_elem.appendChild(srv_elem) diff --git a/app/eparser/neutrino/services.py b/app/eparser/neutrino/services.py index a8c6dff7..87f4802d 100644 --- a/app/eparser/neutrino/services.py +++ b/app/eparser/neutrino/services.py @@ -1,5 +1,6 @@ from xml.dom.minidom import parse, Document +from app.commons import log from ..ecommons import Service, POLARIZATION, FEC, SYSTEM, SERVICE_TYPE, PROVIDER _FILE = "services.xml" @@ -28,7 +29,7 @@ def write_services(path, services): tr_atr = sat.split(":") sat_elem = doc.createElement("sat") sat_elem.setAttribute("name", tr_atr[0]) - sat_elem.setAttribute("position", tr_atr[1].replace(".", "")) + sat_elem.setAttribute("position", tr_atr[1]) sat_elem.setAttribute("diseqc", tr_atr[2]) sat_elem.setAttribute("uncommited", tr_atr[3]) root.appendChild(sat_elem) @@ -88,7 +89,6 @@ def parse_services(path): if elem.hasAttributes(): sat_name = elem.attributes["name"].value sat_pos = elem.attributes["position"].value - sat_pos = "{}.{}".format(sat_pos[:-1], sat_pos[-1:]) diseqc = elem.attributes.get("diseqc") diseqc = diseqc.value if diseqc else diseqc uncommited = elem.attributes.get("uncommited") @@ -117,6 +117,15 @@ def parse_transponder(api, sat, sat_pos, services, tr_elem): tr = "{}:{}:{}:{}:{}:{}:{}:{}:{}".format(tr_id, on, freq, inv, rate, fec, pol, mod, sys) tr_id = tr_id.lstrip("0") + pol = POLARIZATION.get(pol) + # Formatting displayed values. + try: + freq = "{}".format(int(freq) // 1000) + rate = "{}".format(int(rate) // 1000) + sat_pos = int(sat_pos) + sat_pos = "{:0.1f}{}".format(abs(sat_pos / 10), "W" if sat_pos < 0 else "E") + except ValueError as e: + log("Neutrino parsing error [parse_transponder]: {}".format(e)) for srv_elem in tr_elem.getElementsByTagName("S"): if srv_elem.hasAttributes(): @@ -141,27 +150,10 @@ def parse_transponder(api, sat, sat_pos, services, tr_elem): data_id = "{}:{}:{}:{}:{}:{}:{}:{}:{}:{}:{}".format(api, srv_type, sys, num, f, v, a, p, pmt, tx, vt) fav_id = "{}:{}:{}".format(tr_id, on.lstrip("0"), ssid.lstrip("0")) picon_id = "{}{}{}.png".format(tr_id, on, ssid) + prv, st, = PROVIDER.get(int(on, 16)), SERVICE_TYPE.get(str(int(srv_type, 16)), SERVICE_TYPE.get("-2")) - srv = Service(flags_cas=sat, - transponder_type=None, - coded=None, - service=name, - locked=None, - hide=None, - package=PROVIDER.get(int(on, 16)), - service_type=SERVICE_TYPE.get(str(int(srv_type, 16))), - picon=None, - picon_id=picon_id, - ssid=ssid, - freq=freq, - rate=rate, - pol=POLARIZATION.get(pol), - fec=FEC.get(fec), - system=SYSTEM.get(sys), - pos=sat_pos, - data_id=data_id, - fav_id=fav_id, - transponder=tr) + srv = Service(sat, None, None, name, None, None, prv, st, None, picon_id, ssid, freq, rate, pol, + FEC.get(fec), SYSTEM.get(sys), sat_pos, data_id, fav_id, tr) services.append(srv) diff --git a/app/ui/main_app_window.py b/app/ui/main_app_window.py index ac4938ad..16cfa440 100644 --- a/app/ui/main_app_window.py +++ b/app/ui/main_app_window.py @@ -2760,7 +2760,7 @@ class Application(Gtk.Application): for srv in self._services.values(): tr_type = srv.transponder_type if tr_type == "s" and srv.pos: - sat_positions.add(float(srv.pos)) + sat_positions.add(srv.pos) elif tr_type == "t": terrestrial = True elif tr_type == "c": @@ -2771,7 +2771,7 @@ class Application(Gtk.Application): if cable: self._sat_positions.append("C") elif self._s_type is SettingsType.NEUTRINO_MP: - list(map(lambda s: sat_positions.add(float(s.pos)), filter(lambda s: s.pos, self._services.values()))) + list(map(lambda s: sat_positions.add(s.pos), filter(lambda s: s.pos, self._services.values()))) self._sat_positions.extend(map(str, sorted(sat_positions))) if self._filter_bar.is_visible():