diff --git a/README.md b/README.md
index c0ca408d..632309e0 100644
--- a/README.md
+++ b/README.md
@@ -9,15 +9,16 @@ Ctrl + X, C, V, Up, Down, PageUp, PageDown, S, T, E, L, H, Space; Insert, Delete
Insert - copies the selected channels from the main list to the bouquet or inserts (creates) a new bouquet.
Ctrl + X - only in bouquet list. Ctrl + C - only in services list.
Clipboard is "rubber". There is an accumulation before the insertion!
-Ctrl + E, F2 - edit/rename.
+Ctrl + E, F2 - edit.
+Ctrl + R - rename.
Ctrl + S, T, E in Satellites edit tool for create and edit satellite or transponder.
Ctrl + L - parental lock.
Ctrl + H - hide/skip.
Left/Right - remove selection.
### Extra:
-Multiple selections in lists only with Space key (as in file managers)!
-Ability to import IPTV into bouquet (Neutrino WEBTV) from m3u files!
+Multiple selections in lists only with Space key (as in file managers).
+Ability to import IPTV into bouquet (Neutrino WEBTV) from m3u files.
Tool for downloading picons from lyngsat.com.
### Minimum requirements:
Python >= 3.5.2 and GTK+ 3 with PyGObject bindings.
diff --git a/app/eparser/ecommons.py b/app/eparser/ecommons.py
index a593d947..0755c1c5 100644
--- a/app/eparser/ecommons.py
+++ b/app/eparser/ecommons.py
@@ -34,7 +34,7 @@ class Type(Enum):
Cable = "c"
-class FLAG(Enum):
+class Flag(Enum):
""" Service flags """
KEEP = 1 # Do not automatically update the services parameters.
HIDE = 2
@@ -47,6 +47,20 @@ class FLAG(Enum):
return 2, 3, 6, 7, 10, 42, 43, 46, 47
+class Inversion(Enum):
+ Off = "0"
+ On = "1"
+ Auto = "2"
+
+
+class Pilot(Enum):
+ Off = "0"
+ On = "1"
+ Auto = "2"
+
+
+ROLL_OFF = {"0": "35%", "1": "25%", "2": "20%", "3": "Auto"}
+
POLARIZATION = {"0": "H", "1": "V", "2": "L", "3": "R"}
PLS_MODE = {"0": "Root", "1": "Gold", "2": "Combo"}
diff --git a/app/eparser/enigma/lamedb.py b/app/eparser/enigma/lamedb.py
index 2ff88f0c..a4054c2c 100644
--- a/app/eparser/enigma/lamedb.py
+++ b/app/eparser/enigma/lamedb.py
@@ -6,7 +6,7 @@
from app.commons import log
from app.ui import CODED_ICON, LOCKED_ICON, HIDE_ICON
from .blacklist import get_blacklist
-from ..ecommons import Service, POLARIZATION, SYSTEM, FEC, SERVICE_TYPE, FLAG
+from ..ecommons import Service, POLARIZATION, SYSTEM, FEC, SERVICE_TYPE, Flag
_HEADER = "eDVB services /4/"
_SEP = ":" # separator
@@ -101,7 +101,7 @@ def parse_services(services, transponders, path):
all_flags = ch[2].split(",")
coded = CODED_ICON if list(filter(lambda x: x.startswith("C:"), all_flags)) else None
flags = list(filter(lambda x: x.startswith("f:"), all_flags))
- hide = HIDE_ICON if flags and int(flags[0][2:]) in FLAG.hide_values() else None
+ hide = HIDE_ICON if flags and int(flags[0][2:]) in Flag.hide_values() else None
locked = LOCKED_ICON if fav_id in blacklist else None
package = list(filter(lambda x: x.startswith("p:"), all_flags))
@@ -128,7 +128,7 @@ def parse_services(services, transponders, path):
rate=tr[1],
pol=POLARIZATION[tr[2]],
fec=FEC[tr[3]],
- system=SYSTEM[tr[6]],
+ system="DVB-S2" if len(tr) > 7 else "DVB-S",
pos="{}.{}".format(tr[4][:-1], tr[4][-1:]),
data_id=ch[0],
fav_id=fav_id,
diff --git a/app/ui/main_app_window.py b/app/ui/main_app_window.py
index addf7a60..c71947f5 100644
--- a/app/ui/main_app_window.py
+++ b/app/ui/main_app_window.py
@@ -7,7 +7,7 @@ import shutil
from app.commons import run_idle, log
from app.eparser import get_blacklist, write_blacklist, parse_m3u
from app.eparser import get_services, get_bouquets, write_bouquets, write_services, Bouquets, Bouquet, Service
-from app.eparser.ecommons import CAS, FLAG
+from app.eparser.ecommons import CAS, Flag
from app.eparser.enigma.bouquets import BqServiceType
from app.eparser.neutrino.bouquets import BqType
from app.properties import get_config, write_config, Profile
@@ -708,8 +708,15 @@ class MainAppWindow:
self.on_locked(None)
elif ctrl and key == Gdk.KEY_h or key == Gdk.KEY_H:
self.on_hide(None)
- elif ctrl and key == Gdk.KEY_E or key == Gdk.KEY_e or key == Gdk.KEY_F2:
+ elif ctrl and key == Gdk.KEY_R or key == Gdk.KEY_r:
self.on_edit(view)
+ elif ctrl and key == Gdk.KEY_E or key == Gdk.KEY_e or key == Gdk.KEY_F2:
+ if model_name == self._BOUQUETS_LIST_NAME:
+ self.on_edit(view)
+ return
+ elif model_name == self._FAV_LIST_NAME:
+ self.on_locate_in_services(view)
+ self.on_services_data_edit(view)
elif key == Gdk.KEY_Left or key == Gdk.KEY_Right:
view.do_unselect_all(view)
@@ -763,10 +770,10 @@ class MainAppWindow:
self.__tool_elements[elem].set_sensitive(not_empty)
def on_hide(self, item):
- self.set_service_flags(FLAG.HIDE)
+ self.set_service_flags(Flag.HIDE)
def on_locked(self, item):
- self.set_service_flags(FLAG.LOCK)
+ self.set_service_flags(Flag.LOCK)
def set_service_flags(self, flag):
profile = Profile(self.__profile)
@@ -779,9 +786,9 @@ class MainAppWindow:
elif profile is Profile.NEUTRINO_MP:
if bq_selected:
model, path = self.__bouquets_view.get_selection().get_selected()
- value = model.get_value(path, 1 if flag is FLAG.LOCK else 2)
- value = None if value else LOCKED_ICON if flag is FLAG.LOCK else HIDE_ICON
- model.set_value(path, 1 if flag is FLAG.LOCK else 2, value)
+ value = model.get_value(path, 1 if flag is Flag.LOCK else 2)
+ value = None if value else LOCKED_ICON if flag is Flag.LOCK else HIDE_ICON
+ model.set_value(path, 1 if flag is Flag.LOCK else 2, value)
@run_idle
def on_model_changed(self, model, path, itr=None):
@@ -891,7 +898,7 @@ class MainAppWindow:
@run_idle
def on_services_data_edit(self, item):
- dialog = ServiceDetailsDialog(self.__main_window, Profile(self.__profile), self.__services_view)
+ dialog = ServiceDetailsDialog(self.__main_window, self.__options, self.__services_view)
dialog.show()
@run_idle
diff --git a/app/ui/main_helper.py b/app/ui/main_helper.py
index a7cf51a2..c4dd2546 100644
--- a/app/ui/main_helper.py
+++ b/app/ui/main_helper.py
@@ -7,7 +7,7 @@ import shutil
from gi.repository import GdkPixbuf
from app.eparser import Service
-from app.eparser.ecommons import FLAG
+from app.eparser.ecommons import Flag
from app.eparser.enigma.bouquets import BqServiceType, to_bouquet_id
from . import Gtk, Gdk, HIDE_ICON, LOCKED_ICON
from .dialogs import show_dialog, DialogType, get_chooser_dialog
@@ -166,7 +166,7 @@ def set_flags(flag, services_view, fav_view, channels, blacklist):
model = get_base_model(model)
- if flag is FLAG.HIDE:
+ if flag is Flag.HIDE:
if target is ViewTarget.SERVICES:
set_hide(channels, model, paths)
else:
@@ -174,7 +174,7 @@ def set_flags(flag, services_view, fav_view, channels, blacklist):
srv_model = get_base_model(services_view.get_model())
srv_paths = [row.path for row in srv_model if row[18] in fav_ids]
set_hide(channels, srv_model, srv_paths)
- elif flag is FLAG.LOCK:
+ elif flag is Flag.LOCK:
set_lock(blacklist, channels, model, paths, target, services_model=get_base_model(services_view.get_model()))
return True
@@ -223,13 +223,13 @@ def set_hide(channels, model, paths):
value = int(flag[2:]) if flag else 0
if not hide:
- if value in FLAG.hide_values():
+ if value in Flag.hide_values():
continue # skip if already hidden
- value += FLAG.HIDE.value
+ value += Flag.HIDE.value
else:
- if value not in FLAG.hide_values():
+ if value not in Flag.hide_values():
continue # skip if already allowed to show
- value -= FLAG.HIDE.value
+ value -= Flag.HIDE.value
if value == 0 and index is not None:
del flags[index]
diff --git a/app/ui/main_window.glade b/app/ui/main_window.glade
index fbb278d6..4ee4efb4 100644
--- a/app/ui/main_window.glade
+++ b/app/ui/main_window.glade
@@ -380,12 +380,12 @@
diff --git a/app/ui/service_details_dialog.glade b/app/ui/service_details_dialog.glade
index 671a9a45..6822f3eb 100644
--- a/app/ui/service_details_dialog.glade
+++ b/app/ui/service_details_dialog.glade
@@ -45,6 +45,17 @@
+
+
+