diff --git a/app/settings.py b/app/settings.py
index 241857d7..5bfe4673 100644
--- a/app/settings.py
+++ b/app/settings.py
@@ -31,7 +31,7 @@ import json
import locale
import os
import sys
-from enum import Enum, IntEnum
+from enum import IntEnum
from functools import lru_cache
from pathlib import Path
from pprint import pformat
@@ -51,8 +51,8 @@ IS_LINUX = sys.platform == "linux"
USE_HEADER_BAR = int(bool(os.environ.get("GNOME_DESKTOP_SESSION_ID")))
-class Defaults(Enum):
- """ Default program settings """
+class Defaults:
+ """ Default program settings. """
USER = "root"
PASSWORD = ""
HOST = "127.0.0.1"
@@ -114,30 +114,30 @@ class SettingsType(IntEnum):
def get_default_settings(self):
""" Returns default settings for current type. """
if self is self.ENIGMA_2:
- srv_path = Defaults.BOX_SERVICES_PATH.value
- sat_path = Defaults.BOX_SATELLITE_PATH.value
- picons_path = Defaults.BOX_PICON_PATH.value
- epg_path = Defaults.BOX_EPG_PATH.value
+ srv_path = Defaults.BOX_SERVICES_PATH
+ sat_path = Defaults.BOX_SATELLITE_PATH
+ picons_path = Defaults.BOX_PICON_PATH
+ epg_path = Defaults.BOX_EPG_PATH
http_timeout = 5
telnet_timeout = 5
else:
- srv_path = Defaults.NEUTRINO_BOX_SERVICES_PATH.value
- sat_path = Defaults.NEUTRINO_BOX_SATELLITE_PATH.value
- picons_path = Defaults.NEUTRINO_BOX_PICON_PATH.value
+ srv_path = Defaults.NEUTRINO_BOX_SERVICES_PATH
+ sat_path = Defaults.NEUTRINO_BOX_SATELLITE_PATH
+ picons_path = Defaults.NEUTRINO_BOX_PICON_PATH
epg_path = ""
http_timeout = 2
telnet_timeout = 1
return {"setting_type": self.value,
- "host": Defaults.HOST.value,
- "port": Defaults.FTP_PORT.value,
+ "host": Defaults.HOST,
+ "port": Defaults.FTP_PORT,
"timeout": 5,
- "user": Defaults.USER.value,
- "password": Defaults.PASSWORD.value,
- "http_port": Defaults.HTTP_PORT.value,
+ "user": Defaults.USER,
+ "password": Defaults.PASSWORD,
+ "http_port": Defaults.HTTP_PORT,
"http_timeout": http_timeout,
- "http_use_ssl": Defaults.HTTP_USE_SSL.value,
- "telnet_port": Defaults.TELNET_PORT.value,
+ "http_use_ssl": Defaults.HTTP_USE_SSL,
+ "telnet_port": Defaults.TELNET_PORT,
"telnet_timeout": telnet_timeout,
"services_path": srv_path,
"user_bouquet_path": srv_path,
@@ -411,9 +411,9 @@ class Settings:
@property
def picons_paths(self):
if self.setting_type is SettingsType.NEUTRINO_MP:
- return self._settings.get("neutrino_picon_paths", Defaults.NEUTRINO_BOX_PICON_PATHS.value)
+ return self._settings.get("neutrino_picon_paths", Defaults.NEUTRINO_BOX_PICON_PATHS)
else:
- return self._settings.get("picon_paths", Defaults.BOX_PICON_PATHS.value)
+ return self._settings.get("picon_paths", Defaults.BOX_PICON_PATHS)
@picons_paths.setter
def picons_paths(self, value):
@@ -426,12 +426,20 @@ class Settings:
@property
def profile_folder_is_default(self):
- return self._settings.get("profile_folder_is_default", Defaults.PROFILE_FOLDER_DEFAULT.value)
+ return self._settings.get("profile_folder_is_default", Defaults.PROFILE_FOLDER_DEFAULT)
@profile_folder_is_default.setter
def profile_folder_is_default(self, value):
self._settings["profile_folder_is_default"] = value
+ @property
+ def use_common_picon_path(self):
+ return self._settings.get("use_common_picon_path", False)
+
+ @use_common_picon_path.setter
+ def use_common_picon_path(self, value):
+ self._settings["use_common_picon_path"] = value
+
@property
def default_data_path(self):
return self._settings.get("default_data_path", DATA_PATH)
@@ -442,7 +450,7 @@ class Settings:
@property
def default_backup_path(self):
- return self._settings.get("default_backup_path", Defaults.BACKUP_PATH.value)
+ return self._settings.get("default_backup_path", Defaults.BACKUP_PATH)
@default_backup_path.setter
def default_backup_path(self, value):
@@ -450,7 +458,7 @@ class Settings:
@property
def default_picon_path(self):
- return self._settings.get("default_picon_path", Defaults.PICON_PATH.value)
+ return self._settings.get("default_picon_path", Defaults.PICON_PATH)
@default_picon_path.setter
def default_picon_path(self, value):
@@ -486,7 +494,7 @@ class Settings:
@property
def recordings_path(self):
- return self._settings.get("recordings_path", Defaults.RECORDINGS_PATH.value)
+ return self._settings.get("recordings_path", Defaults.RECORDINGS_PATH)
@recordings_path.setter
def recordings_path(self, value):
@@ -496,7 +504,7 @@ class Settings:
@property
def activate_transcoding(self):
- return self._settings.get("activate_transcoding", Defaults.ACTIVATE_TRANSCODING.value)
+ return self._settings.get("activate_transcoding", Defaults.ACTIVATE_TRANSCODING)
@activate_transcoding.setter
def activate_transcoding(self, value):
@@ -504,7 +512,7 @@ class Settings:
@property
def active_preset(self):
- return self._settings.get("active_preset", Defaults.ACTIVE_TRANSCODING_PRESET.value)
+ return self._settings.get("active_preset", Defaults.ACTIVE_TRANSCODING_PRESET)
@active_preset.setter
def active_preset(self, value):
@@ -520,7 +528,7 @@ class Settings:
@property
def play_streams_mode(self):
- return PlayStreamsMode(self._settings.get("play_streams_mode", Defaults.PLAY_STREAMS_MODE.value))
+ return PlayStreamsMode(self._settings.get("play_streams_mode", Defaults.PLAY_STREAMS_MODE))
@play_streams_mode.setter
def play_streams_mode(self, value):
@@ -528,7 +536,7 @@ class Settings:
@property
def stream_lib(self):
- return self._settings.get("stream_lib", Defaults.STREAM_LIB.value)
+ return self._settings.get("stream_lib", Defaults.STREAM_LIB)
@stream_lib.setter
def stream_lib(self, value):
@@ -536,7 +544,7 @@ class Settings:
@property
def fav_click_mode(self):
- return self._settings.get("fav_click_mode", Defaults.FAV_CLICK_MODE.value)
+ return self._settings.get("fav_click_mode", Defaults.FAV_CLICK_MODE)
@fav_click_mode.setter
def fav_click_mode(self, value):
@@ -544,7 +552,7 @@ class Settings:
@property
def main_list_playback(self):
- return self._settings.get("main_list_playback", Defaults.MAIN_LIST_PLAYBACK.value)
+ return self._settings.get("main_list_playback", Defaults.MAIN_LIST_PLAYBACK)
@main_list_playback.setter
def main_list_playback(self, value):
@@ -599,7 +607,7 @@ class Settings:
@property
def backup_before_save(self):
- return self._settings.get("backup_before_save", Defaults.BACKUP_BEFORE_SAVE.value)
+ return self._settings.get("backup_before_save", Defaults.BACKUP_BEFORE_SAVE)
@backup_before_save.setter
def backup_before_save(self, value):
@@ -607,7 +615,7 @@ class Settings:
@property
def backup_before_downloading(self):
- return self._settings.get("backup_before_downloading", Defaults.BACKUP_BEFORE_DOWNLOADING.value)
+ return self._settings.get("backup_before_downloading", Defaults.BACKUP_BEFORE_DOWNLOADING)
@backup_before_downloading.setter
def backup_before_downloading(self, value):
@@ -615,7 +623,7 @@ class Settings:
@property
def v5_support(self):
- return self._settings.get("v5_support", Defaults.V5_SUPPORT.value)
+ return self._settings.get("v5_support", Defaults.V5_SUPPORT)
@v5_support.setter
def v5_support(self, value):
@@ -623,7 +631,7 @@ class Settings:
@property
def unlimited_copy_buffer(self):
- return self._settings.get("unlimited_copy_buffer", Defaults.UNLIMITED_COPY_BUFFER.value)
+ return self._settings.get("unlimited_copy_buffer", Defaults.UNLIMITED_COPY_BUFFER)
@unlimited_copy_buffer.setter
def unlimited_copy_buffer(self, value):
@@ -631,7 +639,7 @@ class Settings:
@property
def extensions_support(self):
- return self._settings.get("extensions_support", Defaults.EXTENSIONS_SUPPORT.value)
+ return self._settings.get("extensions_support", Defaults.EXTENSIONS_SUPPORT)
@extensions_support.setter
def extensions_support(self, value):
@@ -639,7 +647,7 @@ class Settings:
@property
def force_bq_names(self):
- return self._settings.get("force_bq_names", Defaults.FORCE_BQ_NAMES.value)
+ return self._settings.get("force_bq_names", Defaults.FORCE_BQ_NAMES)
@force_bq_names.setter
def force_bq_names(self, value):
@@ -647,7 +655,7 @@ class Settings:
@property
def http_api_support(self):
- return self._settings.get("http_api_support", Defaults.HTTP_API_SUPPORT.value)
+ return self._settings.get("http_api_support", Defaults.HTTP_API_SUPPORT)
@http_api_support.setter
def http_api_support(self, value):
@@ -655,7 +663,7 @@ class Settings:
@property
def enable_yt_dl(self):
- return self._settings.get("enable_yt_dl", Defaults.ENABLE_YT_DL.value)
+ return self._settings.get("enable_yt_dl", Defaults.ENABLE_YT_DL)
@enable_yt_dl.setter
def enable_yt_dl(self, value):
@@ -663,7 +671,7 @@ class Settings:
@property
def enable_yt_dl_update(self):
- return self._settings.get("enable_yt_dl_update", Defaults.ENABLE_YT_DL.value)
+ return self._settings.get("enable_yt_dl_update", Defaults.ENABLE_YT_DL)
@enable_yt_dl_update.setter
def enable_yt_dl_update(self, value):
@@ -671,7 +679,7 @@ class Settings:
@property
def enable_send_to(self):
- return self._settings.get("enable_send_to", Defaults.ENABLE_SEND_TO.value)
+ return self._settings.get("enable_send_to", Defaults.ENABLE_SEND_TO)
@enable_send_to.setter
def enable_send_to(self, value):
@@ -731,7 +739,7 @@ class Settings:
@property
def list_picon_size(self):
- return self._settings.get("list_picon_size", Defaults.LIST_PICON_SIZE.value)
+ return self._settings.get("list_picon_size", Defaults.LIST_PICON_SIZE)
@list_picon_size.setter
def list_picon_size(self, value):
@@ -739,7 +747,7 @@ class Settings:
@property
def tooltip_logo_size(self):
- return self._settings.get("tooltip_logo_size", Defaults.TOOLTIP_LOGO_SIZE.value)
+ return self._settings.get("tooltip_logo_size", Defaults.TOOLTIP_LOGO_SIZE)
@tooltip_logo_size.setter
def tooltip_logo_size(self, value):
@@ -747,7 +755,7 @@ class Settings:
@property
def use_colors(self):
- return self._settings.get("use_colors", Defaults.USE_COLORS.value)
+ return self._settings.get("use_colors", Defaults.USE_COLORS)
@use_colors.setter
def use_colors(self, value):
@@ -755,7 +763,7 @@ class Settings:
@property
def new_color(self):
- return self._settings.get("new_color", Defaults.NEW_COLOR.value)
+ return self._settings.get("new_color", Defaults.NEW_COLOR)
@new_color.setter
def new_color(self, value):
@@ -763,7 +771,7 @@ class Settings:
@property
def extra_color(self):
- return self._settings.get("extra_color", Defaults.EXTRA_COLOR.value)
+ return self._settings.get("extra_color", Defaults.EXTRA_COLOR)
@extra_color.setter
def extra_color(self, value):
@@ -929,18 +937,18 @@ class Settings:
return {
"version": Settings.__VERSION,
- "default_profile": Defaults.DEFAULT_PROFILE.value,
+ "default_profile": Defaults.DEFAULT_PROFILE,
"profiles": {profile_name: def_settings},
- "v5_support": Defaults.V5_SUPPORT.value,
- "http_api_support": Defaults.HTTP_API_SUPPORT.value,
- "enable_yt_dl": Defaults.ENABLE_YT_DL.value,
- "enable_send_to": Defaults.ENABLE_SEND_TO.value,
- "use_colors": Defaults.USE_COLORS.value,
- "new_color": Defaults.NEW_COLOR.value,
- "extra_color": Defaults.EXTRA_COLOR.value,
- "fav_click_mode": Defaults.FAV_CLICK_MODE.value,
- "profile_folder_is_default": Defaults.PROFILE_FOLDER_DEFAULT.value,
- "records_path": Defaults.RECORDINGS_PATH.value
+ "v5_support": Defaults.V5_SUPPORT,
+ "http_api_support": Defaults.HTTP_API_SUPPORT,
+ "enable_yt_dl": Defaults.ENABLE_YT_DL,
+ "enable_send_to": Defaults.ENABLE_SEND_TO,
+ "use_colors": Defaults.USE_COLORS,
+ "new_color": Defaults.NEW_COLOR,
+ "extra_color": Defaults.EXTRA_COLOR,
+ "fav_click_mode": Defaults.FAV_CLICK_MODE,
+ "profile_folder_is_default": Defaults.PROFILE_FOLDER_DEFAULT,
+ "records_path": Defaults.RECORDINGS_PATH
}
@staticmethod
diff --git a/app/ui/settings_dialog.glade b/app/ui/settings_dialog.glade
index ad84c258..e0c61a56 100644
--- a/app/ui/settings_dialog.glade
+++ b/app/ui/settings_dialog.glade
@@ -304,7 +304,7 @@ Author: Dmitriy Yefremov
True
True
- 2
+ 3
@@ -328,9 +328,9 @@ Author: Dmitriy Yefremov
@@ -848,79 +1583,90 @@ Author: Dmitriy Yefremov
True
False
- 0.019999999552965164
- in
+ 0.009999999776482582
+ none
-
-
+
True
False
- 5
- 5
5
5
- 10
- True
-
- True
- False
- Streams record path:
- 0.019999999552965164
-
-
- 0
- 0
-
-
-
-
+
+
True
False
+ 10
+ 10
+ 10
+ 10
+ 10
+ True
-
+
True
- True
- True
- document-edit-symbolic
- False
+ False
+ Streams record path:
+ 0.019999999552965164
- False
- True
- 0
+ 0
+ 0
-
+
True
- True
- True
- Select
-
+ False
-
+
True
- False
- folder-open-symbolic
+ True
+ True
+ document-edit-symbolic
+ False
+
+ False
+ True
+ 0
+
+
+
+ True
+ True
+ True
+ Select
+
+
+
+ True
+ False
+ folder-open-symbolic
+
+
+
+
+ False
+ True
+ 1
+
+
+
- False
- True
- 1
+ 1
+ 0
-
-
- 1
- 0
-
+
@@ -928,11 +1674,14 @@ Author: Dmitriy Yefremov
True
False
Recordings:
+
+
+
- False
+ True
True
3
@@ -954,28 +1703,61 @@ Author: Dmitriy Yefremov
True
False
- 0.019999999552965164
- in
+ 0.009999999776482582
+ none
-
+
True
False
- 5
- 5
5
- 5
- vertical
- 5
-
+
True
False
+ 10
+ 10
+ 10
+ 10
+ vertical
5
-
+
True
False
- Use to play streams:
+ 5
+
+
+ True
+ False
+ Use to play streams:
+
+
+ False
+ True
+ 0
+
+
+
+
+ 185
+ True
+ False
+ 0
+ vlc
+
+ - VLC Player
+ - GStreamer
+ - MPV
+
+
+
+
+ False
+ True
+ end
+ 4
+
+
False
@@ -984,161 +1766,139 @@ Author: Dmitriy Yefremov
-
- 185
+
True
False
- 0
- vlc
-
- - VLC Player
- - GStreamer
- - MPV
-
-
+ 5
+
+
+ True
+ False
+ Play streams mode:
+
+
+ False
+ True
+ 0
+
+
+
+
+ 185
+ True
+ False
+ 0
+ Built-in player
+
+ - Built-in player
+ - In a separate window
+ - Only get m3u file
+
+
+
+
+ False
+ True
+ end
+ 4
+
+
False
True
- end
- 4
-
-
-
-
- False
- True
- 0
-
-
-
-
- True
- False
- 5
-
-
- True
- False
- Play streams mode:
-
-
- False
- True
- 0
-
-
-
-
- 185
- True
- False
- 0
- Built-in player
-
- - Built-in player
- - In a separate window
- - Only get m3u file
-
-
-
-
- False
- True
- end
- 4
-
-
-
-
- False
- True
- 1
-
-
-
-
- True
- False
- 5
-
-
- True
- False
- Double click on the service in the bouquet list:
-
-
- False
- True
- 0
-
-
-
-
- 185
- True
- False
- 0
- 0
-
- - Disabled
- - Play stream
- - Play
- - Zap
- - Zap and Play
-
-
-
-
- False
- True
- end
1
-
-
- False
- True
- 2
-
-
-
-
- True
- False
- 5
-
+
True
False
- Playback from the main list
+ 5
+
+
+ True
+ False
+ Double click on the service in the bouquet list:
+
+
+ False
+ True
+ 0
+
+
+
+
+ 185
+ True
+ False
+ 0
+ 0
+
+ - Disabled
+ - Play stream
+ - Play
+ - Zap
+ - Zap and Play
+
+
+
+
+ False
+ True
+ end
+ 1
+
+
False
True
- 0
+ 2
-
+
True
- True
+ True
+ False
+ 5
+
+
+ True
+ False
+ Playback from the main list
+
+
+ False
+ True
+ 0
+
+
+
+
+ True
+ True
+
+
+ False
+ True
+ end
+ 1
+
+
False
True
- end
- 1
+ 3
-
- False
- True
- 3
-
+
@@ -1146,11 +1906,14 @@ Author: Dmitriy Yefremov
True
False
Playback:
+
+
+
- False
+ True
True
0
@@ -1159,29 +1922,53 @@ Author: Dmitriy Yefremov
True
False
- 0.019999999552965164
- in
+ 0.009999999776482582
+ none
-
+
True
False
- 5
- 5
5
- 5
- vertical
- 5
-
+
True
False
- 5
+ 10
+ 10
+ 10
+ 10
+ vertical
5
-
+
True
False
- Activate transcoding
+ 5
+ 5
+
+
+ True
+ False
+ Activate transcoding
+
+
+ False
+ True
+ 0
+
+
+
+
+ True
+ True
+
+
+ False
+ True
+ end
+ 1
+
+
False
@@ -1190,81 +1977,218 @@ Author: Dmitriy Yefremov
-
- True
- True
-
-
- False
- True
- end
- 1
-
-
-
-
- False
- True
- 0
-
-
-
-
- True
- False
- False
- vertical
- 5
-
-
+
True
+ False
False
+ vertical
5
-
+
True
False
- start
- Presets:
-
-
- True
- True
- 0
-
-
-
-
- True
- False
- Edit
- end
5
-
+
True
False
- document-edit-symbolic
+ start
+ Presets:
- False
+ True
True
0
-
+
True
- True
- center
+ False
+ Edit
+ end
+ 5
+
+
+ True
+ False
+ document-edit-symbolic
+
+
+ False
+ True
+ 0
+
+
+
+
+ True
+ True
+ center
+
+
+ False
+ True
+ end
+ 1
+
+
False
True
- end
1
+
+
+ 185
+ True
+ False
+ 720p TV/device
+
+ - 720p TV/device
+ - 1080p TV/device
+
+
+
+
+ False
+ True
+ 2
+
+
+
+
+ False
+ True
+ 0
+
+
+
+
+
+ True
+ False
+ False
+ 5
+ 5
+ 5
+ 5
+ 2
+ 5
+
+
+ True
+ False
+ Codec:
+
+
+ 4
+ 0
+
+
+
+
+ h264
+ True
+ True
+ False
+ center
+ True
+ True
+
+
+ 4
+ 1
+
+
+
+
+ True
+ False
+ Height (px):
+
+
+ 3
+ 0
+
+
+
+
+ True
+ True
+ number
+
+
+
+ 3
+ 1
+
+
+
+
+ True
+ False
+ Width (px):
+
+
+ 2
+ 0
+
+
+
+
+ True
+ True
+
+
+ number
+
+
+
+ 2
+ 1
+
+
+
+
+ True
+ False
+ Bitrate (kb/s):
+
+
+ 1
+ 0
+
+
+
+
+ True
+ True
+ number
+
+
+
+ 1
+ 1
+
+
+
+
+ True
+ False
+ Video options:
+ 0
+
+
+ 0
+ 1
+
+
+
+
+
False
@@ -1273,16 +2197,137 @@ Author: Dmitriy Yefremov
-
- 185
+
+
True
+ False
False
- 720p TV/device
-
- - 720p TV/device
- - 1080p TV/device
-
-
+ 5
+ 5
+ 5
+ 5
+ 2
+ 5
+
+
+ True
+ False
+ Codec:
+
+
+ 4
+ 0
+
+
+
+
+ True
+ False
+ mp3
+
+ - mp3
+ - AC3
+
+
+
+ 4
+ 1
+
+
+
+
+ True
+ False
+ Sample rate (Hz):
+
+
+ 3
+ 0
+
+
+
+
+ True
+ False
+ 44100
+
+ - 8000
+ - 11025
+ - 22050
+ - 44100
+ - 48000
+
+
+
+ 3
+ 1
+
+
+
+
+ True
+ False
+ Channels:
+
+
+ 2
+ 0
+
+
+
+
+ 75
+ True
+ False
+ 2
+
+ - 1
+ - 2
+
+
+
+ 2
+ 1
+
+
+
+
+ True
+ False
+ Bitrate (kb/s):
+
+
+ 1
+ 0
+
+
+
+
+ True
+ True
+ number
+
+
+
+ 1
+ 1
+
+
+
+
+ True
+ False
+ Audio options:
+ 0
+
+
+ 0
+ 1
+
+
+
+
+
False
@@ -1292,288 +2337,16 @@ Author: Dmitriy Yefremov
- False
+ True
True
- 0
-
-
-
-
-
- True
- False
- False
- 5
- 5
- 5
- 5
- 2
- 5
-
-
- True
- False
- Codec:
-
-
- 4
- 0
-
-
-
-
- True
- False
- mp3
-
- - mp3
- - AC3
-
-
-
- 4
- 1
-
-
-
-
- True
- False
- Sample rate (Hz):
-
-
- 3
- 0
-
-
-
-
- True
- False
- 44100
-
- - 8000
- - 11025
- - 22050
- - 44100
- - 48000
-
-
-
- 3
- 1
-
-
-
-
- True
- False
- Channels:
-
-
- 2
- 0
-
-
-
-
- 75
- True
- False
- 2
-
- - 1
- - 2
-
-
-
- 2
- 1
-
-
-
-
- True
- False
- Bitrate (kb/s):
-
-
- 1
- 0
-
-
-
-
- True
- True
- number
-
-
-
- 1
- 1
-
-
-
-
- True
- False
- Audio options:
- 0
-
-
- 0
- 1
-
-
-
-
-
-
-
- False
- True
- 2
-
-
-
-
-
- True
- False
- False
- 5
- 5
- 5
- 5
- 2
- 5
-
-
- True
- False
- Codec:
-
-
- 4
- 0
-
-
-
-
- h264
- True
- True
- False
- center
- True
- True
-
-
- 4
- 1
-
-
-
-
- True
- False
- Height (px):
-
-
- 3
- 0
-
-
-
-
- True
- True
- number
-
-
-
- 3
- 1
-
-
-
-
- True
- False
- Width (px):
-
-
- 2
- 0
-
-
-
-
- True
- True
-
-
- number
-
-
-
- 2
- 1
-
-
-
-
- True
- False
- Bitrate (kb/s):
-
-
- 1
- 0
-
-
-
-
- True
- True
- number
-
-
-
- 1
- 1
-
-
-
-
- True
- False
- Video options:
- 0
-
-
- 0
- 1
-
-
-
-
-
-
-
- False
- True
- 2
+ 1
-
- True
- True
- 1
-
+
@@ -1581,6 +2354,9 @@ Author: Dmitriy Yefremov
True
False
Record to disk:
+
+
+
@@ -1604,64 +2380,53 @@ Author: Dmitriy Yefremov
vertical
5
-
+
True
False
- 0
- in
+ 5
-
+
True
False
- 5
- 5
- 5
- 5
-
-
- True
- False
- Language:
-
-
- False
- True
- 0
-
-
-
-
- 175
- True
- False
- False
- 0
-
- - English
- - Deutsch
- - Español
- - Italiano
- - Nederlands
- - Polski
- - Português
- - Türkçe
- - Беларуская
- - Русский
- - 漢語
-
-
-
-
- False
- True
- end
- 1
-
-
+ Language:
+
+
+
+
+ False
+ True
+ 0
+
-
-
+
+
+ 175
+ True
+ False
+ False
+ 0
+
+ - English
+ - Deutsch
+ - Español
+ - Italiano
+ - Nederlands
+ - Polski
+ - Português
+ - Türkçe
+ - Беларуская
+ - Русский
+ - 漢語
+
+
+
+
+ False
+ True
+ end
+ 1
+
@@ -1671,19 +2436,17 @@ Author: Dmitriy Yefremov
-
+
True
False
- 0
- in
True
False
- 5
- 5
- 5
- 5
+ 10
+ 10
+ 10
+ 10
vertical
5
@@ -1722,7 +2485,7 @@ Author: Dmitriy Yefremov
False
True
- 0
+ 1
@@ -1761,7 +2524,7 @@ Author: Dmitriy Yefremov
False
True
- 1
+ 2
@@ -1799,14 +2562,14 @@ Author: Dmitriy Yefremov
False
True
- 2
+ 3
-
-
-
+
False
@@ -1815,20 +2578,18 @@ Author: Dmitriy Yefremov
-
+
True
False
- 0
- in
True
False
- 5
- 5
- 5
- 5
+ 10
+ 10
+ 10
+ 10
5
5
@@ -1882,9 +2643,9 @@ Author: Dmitriy Yefremov
-
-
-
+
False
@@ -1896,66 +2657,77 @@ Author: Dmitriy Yefremov
True
False
- 0.019999999552965164
- in
+ 0.009999999776482582
+ none
-
-
+
True
False
- 5
- 5
- 5
- 5
- 5
+ 5
-
- True
- True
- end
-
-
- 1
- 0
-
-
-
-
- True
- True
- end
-
-
- 1
- 1
-
-
-
-
+
+
True
False
- 1
- True
- Before saving
- 0
+ 10
+ 10
+ 10
+ 10
+ 5
+ 5
+
+
+ True
+ True
+ end
+
+
+ 1
+ 0
+
+
+
+
+ True
+ True
+ end
+
+
+ 1
+ 1
+
+
+
+
+ True
+ False
+ 1
+ True
+ Before saving
+ 0
+
+
+ 0
+ 0
+
+
+
+
+ True
+ False
+ Before downloading from the receiver
+ 0
+
+
+ 0
+ 1
+
+
-
- 0
- 0
-
-
-
-
- True
- False
- Before downloading from the receiver
- 0
-
-
- 0
- 1
-
+
@@ -1963,6 +2735,9 @@ Author: Dmitriy Yefremov
True
False
Backup:
+
+
+
@@ -1986,19 +2761,17 @@ Author: Dmitriy Yefremov
vertical
5
-
+
True
False
- 0.019999999552965164
- in
True
False
- 5
- 5
- 5
- 5
+ 10
+ 10
+ 10
+ 10
vertical
5
@@ -2155,9 +2928,9 @@ Author: Dmitriy Yefremov
-
-
-
+
False
@@ -2166,19 +2939,18 @@ Author: Dmitriy Yefremov
-
+
True
False
- 0
- in
-
+
True
+ True
False
- 5
- 5
- 5
- 5
+ 10
+ 10
+ 10
+ 10
vertical
@@ -2288,9 +3060,9 @@ Author: Dmitriy Yefremov
-
-
-
+
False
@@ -2299,23 +3071,20 @@ Author: Dmitriy Yefremov
-
+
False
- 0
- in
True
False
- 5
- 5
- 5
- 5
+ 10
+ 10
+ 10
+ 10
vertical
5
- True
False
@@ -2350,14 +3119,26 @@ Author: Dmitriy Yefremov
-
+
+ True
False
- Enables an alternate layout of the main window elements.
-
-
+
+
True
False
- Enable alternate layout
+ EXPERIMENTAL!
+
+
+ False
+ True
+ 2
+
+
+
+
+ True
+ False
+ Enable Themes support
False
@@ -2366,7 +3147,7 @@ Author: Dmitriy Yefremov
-
+
True
True
@@ -2382,14 +3163,14 @@ Author: Dmitriy Yefremov
False
True
- 1
+ 2
-
-
-
+
False
@@ -2398,81 +3179,17 @@ Author: Dmitriy Yefremov
-
- False
- 0
- in
-
-
- True
- False
- 5
- 5
- 5
- 5
-
-
- True
- False
- EXPERIMENTAL!
-
-
- False
- True
- 2
-
-
-
-
- True
- False
- Enable Themes support
-
-
- False
- True
- 0
-
-
-
-
- True
- True
-
-
-
- False
- True
- end
- 1
-
-
-
-
-
-
-
-
-
- False
- True
- 3
-
-
-
-
+
False
False
- 0
- in
True
False
- 5
- 5
- 5
- 5
+ 10
+ 10
+ 10
+ 10
vertical
5
@@ -2740,14 +3457,14 @@ Author: Dmitriy Yefremov
-
-
-
+
- True
+ False
True
- 4
+ 3
@@ -2762,149 +3479,164 @@ Author: Dmitriy Yefremov
True
False
vertical
- 10
+ 5
True
False
- 0.019999999552965164
- in
+ 0.009999999776482582
+ none
-
-
+
True
False
- 5
- 5
- 5
+ 5
-
- True
- True
- end
- True
-
-
- 1
- 0
-
-
-
-
+
+
True
+ True
False
- start
- Use HTTP to reload data in the receiver
-
-
- 0
- 0
-
-
-
-
- True
- False
- start
- Remove unused bouquets
-
-
- 0
- 1
-
-
-
-
- True
- True
- end
- True
-
-
- 1
- 1
-
-
-
-
- True
- False
- Allows you to name bouquet files using their names.
- start
- True
- Enable alternate bouquet file naming
-
-
- 0
- 4
-
-
-
-
- True
- True
- Allows you to name bouquet files using their names.
- end
-
-
-
- 1
- 4
-
-
-
-
- True
- False
- Enables upload as an archive if a large number of picon (> 1000) is selected.
+ 10
+ 10
+ 5
+ 10
+ 5
+ 5
+ 5
+
+
+ True
+ True
+ end
+ True
+
+
+ 1
+ 0
+
+
+
+
+ True
+ False
+ start
+ Use HTTP to reload data in the receiver
+
+
+ 0
+ 0
+
+
+
+
+ True
+ False
+ start
+ Remove unused bouquets
+
+
+ 0
+ 1
+
+
+
+
+ True
+ True
+ end
+ True
+
+
+ 1
+ 1
+
+
+
+
+ True
+ False
+ Allows you to name bouquet files using their names.
+ start
+ True
+ Enable alternate bouquet file naming
+
+
+ 0
+ 4
+
+
+
+
+ True
+ True
+ Allows you to name bouquet files using their names.
+ end
+
+
+
+ 1
+ 4
+
+
+
+
+ True
+ False
+ Enables upload as an archive if a large number of picon (> 1000) is selected.
Recommended only if you have external storage.
- start
- Enable picons compression
-
-
- 0
- 3
-
-
-
-
- True
- True
- Enables upload as an archive if a large number of picon (> 1000) is selected.
+ start
+ Enable picons compression
+
+
+ 0
+ 3
+
+
+
+
+ True
+ True
+ Enables upload as an archive if a large number of picon (> 1000) is selected.
Recommended only if you have external storage.
- end
+ end
+
+
+ 1
+ 3
+
+
+
+
+ True
+ True
+ False
+ Don't toggle standby mode when updating bouquets and services.
+ Don't change power state
+ 0
+
+
+ 0
+ 2
+
+
+
+
+ True
+ True
+ True
+ Don't toggle standby mode when updating bouquets and services.
+
+
+ 1
+ 2
+
+
-
- 1
- 3
-
-
-
-
- True
- True
- False
- Don't toggle standby mode when updating bouquets and services.
- Don't change power state
- 0
-
-
- 0
- 2
-
-
-
-
- True
- True
- True
- Don't toggle standby mode when updating bouquets and services.
-
-
- 1
- 2
-
+
@@ -2912,6 +3644,9 @@ Author: Dmitriy Yefremov
True
False
FTP-transfer
+
+
+
@@ -2925,26 +3660,17 @@ Author: Dmitriy Yefremov
True
False
- 5
- 5
-
-
- True
- False
- EXPERIMENTAL!
-
-
- False
- True
- 2
-
-
+ 10
+ 10
True
False
start
Enable experimental features
+
+
+
False
@@ -2975,15 +3701,18 @@ Author: Dmitriy Yefremov
-
+
True
False
- 0.5
- in
True
+ True
False
+ 10
+ 10
+ 10
+ 10
5
vertical
5
@@ -3220,9 +3949,9 @@ Author: Dmitriy Yefremov
-
-
-
+
True
@@ -3241,7 +3970,7 @@ Author: Dmitriy Yefremov
True
True
- 1
+ 2
@@ -3296,7 +4025,7 @@ Author: Dmitriy Yefremov
False
True
end
- 2
+ 3
@@ -3305,632 +4034,4 @@ Author: Dmitriy Yefremov
save_button
-
-
- True
- False
- 10
- 10
- 5
- 5
- 5
- 5
-
-
- True
- False
- Satellites.xml file:
- 0.019999999552965164
-
-
- 0
- 11
-
-
-
-
- True
- True
- start
- /etc/tuxbox/
- document-edit-symbolic
-
-
- 1
- 11
-
-
-
-
- False
- User bouquet files:
- 2.2351741291171123e-10
-
-
- 0
- 10
-
-
-
-
- True
- start
- /etc/enigma2/
- document-edit-symbolic
-
-
- 1
- 10
-
-
-
-
- True
- False
- Services and Bouquets files:
- 0
-
-
- 0
- 9
-
-
-
-
- True
- True
- start
- /etc/enigma2/
- document-edit-symbolic
-
-
- 1
- 9
-
-
-
-
- True
- False
- start
- STB file paths:
-
-
- 1
- 8
-
-
-
-
- True
- False
- start
- Telnet:
- 1
-
-
- 0
- 7
-
-
-
-
- True
- False
- 5
-
-
- True
- True
- Default 23
- start
- 6
- 6
- 23
- network-workgroup-symbolic
-
-
- False
- True
- 0
-
-
-
-
- True
- False
- 5
- Timeout:
-
-
- False
- True
- 1
-
-
-
-
- True
- True
- Timeout between commands in seconds
- start
- center
- 2
- 6
- 6
- 1
- alarm-symbolic
- number
- telnet_timeout_adjustment
- True
- 1
-
-
- False
- True
- 2
-
-
-
-
- 1
- 7
-
-
-
-
- True
- False
- start
- HTTP:
- 1
-
-
- 0
- 6
-
-
-
-
- True
- False
- 5
-
-
- True
- True
- Default 80
- start
- 5
- 6
- 6
- 80
- network-workgroup-symbolic
-
-
- False
- True
- 0
-
-
-
-
- SSL/TSL
- True
- True
- False
- start
- center
- True
-
-
-
- False
- True
- 1
-
-
-
-
- 1
- 6
-
-
-
-
- True
- False
- start
- FTP:
- 1
-
-
- 0
- 5
-
-
-
-
- True
- True
- Default 21
- start
- 6
- 6
- 21
- network-workgroup-symbolic
-
-
- 1
- 5
-
-
-
-
- True
- False
- start
- Port:
-
-
- 1
- 4
-
-
-
-
- True
- False
- Password:
- 0.019999999552965164
-
-
- 0
- 3
-
-
-
-
- True
- True
- start
- center
- False
- False
- ●
- root
- emblem-readonly
- False
- password
-
-
- 1
- 3
-
-
-
-
- True
- False
- Login:
- 0.019999999552965164
-
-
- 0
- 2
-
-
-
-
- True
- True
- start
- center
- root
- avatar-default-symbolic
- False
-
-
- 1
- 2
-
-
-
-
- True
- False
- Host:
- 0.019999999552965164
-
-
- 0
- 1
-
-
-
-
- True
- False
- 5
-
-
- Enigma2
- True
- True
- False
- True
- neutrino_radio_button
-
-
-
- False
- True
- 1
-
-
-
-
- Neutrino-MP
- True
- True
- False
- True
- enigma_radio_button
-
-
- False
- True
- 4
-
-
-
-
- 1
- 0
-
-
-
-
- True
- False
- Settings type:
- 0
-
-
- 0
- 0
-
-
-
-
- True
- False
- Picons:
- 2.2351741291171123e-10
-
-
- 0
- 13
-
-
-
-
- True
- False
- 2
-
-
- True
- False
- start
- 0
- True
-
-
- False
-
-
-
-
- False
- True
- 0
-
-
-
-
- True
- False
- expand
-
-
- True
- True
- True
- Remove
-
-
-
- True
- False
- list-remove-symbolic
-
-
-
-
- False
- True
- 0
-
-
-
-
- True
- True
- True
- Add
-
-
-
- True
- False
- list-add-symbolic
-
-
-
-
- False
- True
- 1
-
-
-
-
- False
- True
- 3
-
-
-
-
- 1
- 13
-
-
-
-
- True
- True
- False
- EPG *.dat file:
- 0.019999999552965164
-
-
- 0
- 12
-
-
-
-
- True
- True
- False
- start
- 0
- True
-
- - /etc/enigma2/
- - /media/hdd/
- - /media/usb/
- - /media/mmc/
- - /media/cf/
-
-
-
- True
-
-
-
-
- 1
- 12
-
-
-
-
- True
- False
- 2
-
-
- True
- False
- Default selection
- True
-
-
- True
- Specify hostname or IP address
- network-transmit-receive-symbolic
-
-
-
-
-
-
-
- False
- True
- 0
-
-
-
-
- True
- False
- True
- expand
-
-
- True
- False
- True
- True
- Remove
-
-
-
- True
- False
- list-remove-symbolic
-
-
-
-
- False
- True
- 0
-
-
-
-
- True
- True
- True
- Add
-
-
-
- True
- False
- list-add-symbolic
-
-
-
-
- False
- True
- 1
-
-
-
-
- False
- True
- 2
-
-
-
-
- 1
- 1
-
-
-
-
-
-
-
-
-
diff --git a/app/ui/settings_dialog.py b/app/ui/settings_dialog.py
index 09041236..80a76004 100644
--- a/app/ui/settings_dialog.py
+++ b/app/ui/settings_dialog.py
@@ -129,13 +129,13 @@ class SettingsDialog:
self._backup_path_field = builder.get_object("backup_path_field")
self._recordings_path_field = builder.get_object("recordings_path_field")
self._default_data_paths_switch = builder.get_object("default_data_paths_switch")
- self._default_data_paths_switch.bind_property("active", builder.get_object("picons_path_box"), "sensitive", 4)
- self._default_data_paths_switch.bind_property("active", builder.get_object("backup_path_box"), "sensitive", 4)
+ self._use_common_picon_path_switch = builder.get_object("use_common_picon_path_switch")
# Info bar.
self._info_bar = builder.get_object("info_bar")
self._message_label = builder.get_object("info_bar_message_label")
self._test_spinner = builder.get_object("test_spinner")
# Settings type.
+ self._settings_type_box = builder.get_object("settings_type_combo_box")
self._enigma_radio_button = builder.get_object("enigma_radio_button")
self._neutrino_radio_button = builder.get_object("neutrino_radio_button")
# Streaming.
@@ -187,18 +187,10 @@ class SettingsDialog:
self._enable_update_yt_dl_switch = builder.get_object("enable_update_yt_dl_switch")
self._enable_send_to_switch = builder.get_object("enable_send_to_switch")
self._enable_exp_switch = builder.get_object("enable_experimental_switch")
- # Enigma2 only.
- self._enigma_radio_button.bind_property("active", builder.get_object("bq_naming_grid"), "sensitive")
- self._enigma_radio_button.bind_property("active", builder.get_object("program_frame"), "sensitive")
- self._enigma_radio_button.bind_property("active", builder.get_object("experimental_box"), "sensitive")
- self._enigma_radio_button.bind_property("active", builder.get_object("allow_double_click_box"), "sensitive")
# Profiles.
self._profile_view = builder.get_object("profile_tree_view")
self._profile_add_button = builder.get_object("profile_add_button")
self._profile_remove_button = builder.get_object("profile_remove_button")
- # Network.
- # Separated due to a bug with response (presumably in the builder) in ubuntu 18.04 and derivatives.
- builder.get_object("network_settings_frame").add(builder.get_object("network_grid"))
# Style.
style_provider = Gtk.CssProvider()
style_provider.load_from_path(f"{UI_RESOURCES_PATH}style.css")
@@ -223,29 +215,27 @@ class SettingsDialog:
if not IS_LINUX:
# Themes.
- builder.get_object("style_frame").set_visible(IS_WIN)
- builder.get_object("themes_support_frame").set_visible(True)
- self._layout_switch = builder.get_object("layout_switch")
- self._layout_switch.set_active(self._ext_settings.alternate_layout)
- self._theme_frame = builder.get_object("theme_frame")
- self._theme_frame.set_visible(True)
+ builder.get_object("dark_mode_box").set_visible(IS_WIN)
+ builder.get_object("style_box_view").set_visible(True)
+ self._theme_view = builder.get_object("theme_view")
+ self._theme_view.set_visible(True)
self._theme_thumbnail_image = builder.get_object("theme_thumbnail_image")
self._theme_combo_box = builder.get_object("theme_combo_box")
self._icon_theme_combo_box = builder.get_object("icon_theme_combo_box")
self._dark_mode_switch = builder.get_object("dark_mode_switch")
self._dark_mode_switch.set_active(self._ext_settings.dark_mode)
self._themes_support_switch = builder.get_object("themes_support_switch")
- self._themes_support_switch.bind_property("active", self._theme_frame, "sensitive")
+ self._themes_support_switch.bind_property("active", self._theme_view, "sensitive")
self.init_themes()
def init_ui_elements(self):
- is_enigma_profile = self._s_type is SettingsType.ENIGMA_2
- self._neutrino_radio_button.set_active(self._s_type is SettingsType.NEUTRINO_MP)
self.update_picon_paths()
- self.update_title()
+ self._dialog.set_title(f"{translate('Options')} [{self._settings_type_box.get_active_text()}]")
self._lang_combo_box.set_active_id(self._ext_settings.language)
- self.on_info_bar_close() if is_enigma_profile else self.show_info_message(
+ is_enigma = self._s_type is SettingsType.ENIGMA_2
+ self.on_info_bar_close() if is_enigma else self.show_info_message(
"The Neutrino has only experimental support. Not all features are supported!", Gtk.MessageType.WARNING)
+ self._epg_dat_box.set_sensitive(is_enigma)
def init_profiles(self):
p_def = self._settings.default_profile
@@ -261,13 +251,6 @@ class SettingsDialog:
def init_element_style(self, elem, screen, provider):
elem.get_style_context().add_provider_for_screen(screen, provider, Gtk.STYLE_PROVIDER_PRIORITY_USER)
- def update_title(self):
- title = "{} [{}]"
- if self._s_type is SettingsType.ENIGMA_2:
- self._dialog.set_title(title.format(translate("Options"), self._enigma_radio_button.get_label()))
- elif self._s_type is SettingsType.NEUTRINO_MP:
- self._dialog.set_title(title.format(translate("Options"), self._neutrino_radio_button.get_label()))
-
def update_picon_paths(self):
model = self._picons_paths_box.get_model()
model.clear()
@@ -292,7 +275,7 @@ class SettingsDialog:
update_entry_data(entry, self._dialog, self._settings)
def on_settings_type_changed(self, item):
- s_type = SettingsType.ENIGMA_2 if self._enigma_radio_button.get_active() else SettingsType.NEUTRINO_MP
+ s_type = SettingsType(int(self._settings_type_box.get_active_id()))
if s_type is not self._s_type:
self._settings.setting_type = s_type
self._s_type = s_type
@@ -334,6 +317,7 @@ class SettingsDialog:
self._bouquet_hints_switch.set_active(self._settings.show_bq_hints)
self._services_hints_switch.set_active(self._settings.show_srv_hints)
self._default_data_paths_switch.set_active(self._settings.profile_folder_is_default)
+ self._use_common_picon_path_switch.set_active(self._settings.use_common_picon_path)
self._transcoding_switch.set_active(self._settings.activate_transcoding)
self._presets_combo_box.set_active_id(self._settings.active_preset)
self.on_transcoding_preset_changed(self._presets_combo_box)
@@ -363,17 +347,14 @@ class SettingsDialog:
self._new_color_button.set_rgba(new_rgb)
self._extra_color_button.set_rgba(extra_rgb)
- if self._s_type is SettingsType.ENIGMA_2:
- self._enigma_radio_button.activate()
- else:
- self._neutrino_radio_button.activate()
+ self._settings_type_box.set_active_id(str(self._s_type.value))
def on_apply_profile_settings(self, item=None):
if not self.is_data_correct(self._digit_elems):
show_dialog(DialogType.ERROR, self._dialog, "Error. Verify the data!")
return
- self._s_type = SettingsType.ENIGMA_2 if self._enigma_radio_button.get_active() else SettingsType.NEUTRINO_MP
+ self._s_type = SettingsType(int(self._settings_type_box.get_active_id()))
self._settings.setting_type = self._s_type
self._settings.host = self._host_field.get_text()
self._settings.hosts = [h[1] for h in self._hosts_box.get_model()]
@@ -406,6 +387,7 @@ class SettingsDialog:
self._ext_settings.show_bq_hints = self._bouquet_hints_switch.get_active()
self._ext_settings.show_srv_hints = self._services_hints_switch.get_active()
self._ext_settings.profile_folder_is_default = self._default_data_paths_switch.get_active()
+ self._ext_settings.use_common_picon_path = self._use_common_picon_path_switch.get_active()
self._ext_settings.default_data_path = self._data_path_field.get_text()
self._ext_settings.default_backup_path = self._backup_path_field.get_text()
self._ext_settings.default_picon_path = self._picons_path_field.get_text()
@@ -419,7 +401,6 @@ class SettingsDialog:
if not IS_LINUX:
self._ext_settings.dark_mode = self._dark_mode_switch.get_active()
- self._ext_settings.alternate_layout = self._layout_switch.get_active()
self._ext_settings.is_themes_support = self._themes_support_switch.get_active()
self._ext_settings.theme = self._theme_combo_box.get_active_id()
self._ext_settings.icon_theme = self._icon_theme_combo_box.get_active_id()
@@ -536,7 +517,7 @@ class SettingsDialog:
self.show_info_message("Not implemented yet!", Gtk.MessageType.WARNING)
def on_default_path_mode_switch(self, switch, state):
- self._settings.profile_folder_is_default = state
+ self._use_common_picon_path_switch.set_active(False) if state else None
def on_profile_add(self, item):
model = self._profile_view.get_model()
@@ -799,7 +780,7 @@ class SettingsDialog:
response = get_chooser_dialog(self._dialog, self._settings, "Themes Archive [*.xz, *.zip]", ("*.xz", "*.zip"))
if response in (Gtk.ResponseType.CANCEL, Gtk.ResponseType.DELETE_EVENT):
return
- self._theme_frame.set_sensitive(False)
+ self._theme_view.set_sensitive(False)
self.unpack_theme(response, path, button)
@run_task
@@ -829,7 +810,7 @@ class SettingsDialog:
button.append(theme, theme)
button.set_active_id(theme)
self.show_info_message("Done!", Gtk.MessageType.INFO)
- self._theme_frame.set_sensitive(True)
+ self._theme_view.set_sensitive(True)
@run_idle
def remove_theme(self, button, path):