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 True False - 5 - 5 - 5 + 10 + 10 + 10 5 @@ -343,16 +343,13 @@ Author: Dmitriy Yefremov True False 0.05000000074505806 - in + none 220 True False - 5 - 5 5 - 5 vertical 2 @@ -418,6 +415,55 @@ Author: Dmitriy Yefremov 0 + + + True + False + center + 5 + 5 + 5 + + + True + False + Settings type: + 0 + + + + + + False + True + 0 + + + + + True + False + 0 + 0 + + Enigma2 + Neutrino-MP + + + + + False + True + 2 + + + + + False + True + 1 + + True @@ -532,6 +578,9 @@ Author: Dmitriy Yefremov True False Profile: + + + @@ -545,13 +594,644 @@ Author: Dmitriy Yefremov True False - 0.019999999552965164 - in + 0.009999999776482582 + none + + + True + False + vertical + 5 + + + True + False + 5 + + + + True + False + 10 + 10 + 10 + 10 + 5 + 5 + + + True + False + Host: + 0.019999999552965164 + + + 0 + 0 + + + + + True + False + Login: + 0.019999999552965164 + + + 0 + 1 + + + + + True + False + Password: + 0.019999999552965164 + + + 0 + 2 + + + + + True + False + 2 + + + True + False + Default selection + True + + + True + 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 + 0 + + + + + True + True + start + center + root + avatar-default-symbolic + False + + + 1 + 1 + + + + + True + True + start + center + False + False + + root + emblem-readonly + False + password + + + 1 + 2 + + + + + True + False + start + Port: + + + 1 + 3 + + + + + True + False + start + FTP: + 1 + + + 0 + 4 + + + + + True + False + start + HTTP: + 1 + + + 0 + 5 + + + + + True + False + start + Telnet: + 1 + + + 0 + 6 + + + + + True + True + Default 21 + start + 6 + 6 + 21 + network-workgroup-symbolic + + + 1 + 4 + + + + + 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 + 5 + + + + + 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 + 6 + + + + + + + + + + + True + True + 1 + + + + + True + False + 0.009999999776482582 + none + + + True + False + 5 + + + + True + False + 10 + 10 + 10 + 10 + 5 + 5 + + + True + True + start + /etc/enigma2/ + document-edit-symbolic + + + 1 + 0 + + + + + False + User bouquet files: + 2.2351741291171123e-10 + + + 0 + 1 + + + + + True + start + /etc/enigma2/ + document-edit-symbolic + + + 1 + 1 + + + + + True + False + Satellites.xml file: + 0.019999999552965164 + + + 0 + 2 + + + + + True + True + start + /etc/tuxbox/ + document-edit-symbolic + + + 1 + 2 + + + + + True + True + False + EPG *.dat file: + 0.019999999552965164 + + + 0 + 3 + + + + + True + False + start + 0 + True + + /etc/enigma2/ + /media/hdd/ + /media/usb/ + /media/mmc/ + /media/cf/ + + + + False + + + + + 1 + 3 + + + + + True + False + Picons: + 2.2351741291171123e-10 + + + 0 + 4 + + + + + 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 + 4 + + + + + True + False + Services and Bouquets files: + 0 + + + 0 + 0 + + + + + + + + + + True + False + STB file paths: + + + + + + + + True + True + 2 + + + + True False Network settings: + + + @@ -577,47 +1257,96 @@ Author: Dmitriy Yefremov True False - 0.02 - in + 0.009999999776482582 + none - + True False - 5 - 5 + 5 5 - vertical - 5 - + True False - Sets the profile folder as default to store picons, backups, etc. - center - 5 - 5 + vertical + 5 - + True False - 5 - 5 - Make profile folder as default for the additional data - 0 + 10 + 10 + 10 + + + True + False + Make profile folder as default for the additional data + + + False + True + 0 + + + + + True + True + end + center + + + + False + True + end + 1 + + - True + False True 0 - + True - True - end - center - + True + False + Activates single folder use for several profiles. + 10 + 10 + 5 + + + True + False + Use common folder for picons + + + False + True + 0 + + + + + True + True + end + center + + + False + True + end + 1 + + False @@ -625,209 +1354,212 @@ Author: Dmitriy Yefremov 1 - - - False - True - 0 - - - - - - True - False - 5 - 10 - True - - True - False - start - Data path: - 0 - - - 0 - 0 - - - - - True - False - start - Picons path: - - - 0 - 1 - - - - - True - False - start - Backup path: - - - 0 - 2 - - - - + + True False + 10 + 10 + 10 + 5 + 10 + True - + True - True - True - document-edit-symbolic - False + False + start + Data path: + 0 - False - True - 0 + 0 + 0 - + True - True - True - Select - + False - + True - False - folder-open-symbolic + True + True + document-edit-symbolic + False + + False + True + 0 + - - - False - True - 1 - - - - - - 1 - 0 - - - - - True - False - - - True - True - True - document-edit-symbolic - False - - - False - True - 0 - - - - - True - True - True - Select - - + True - False - folder-open-symbolic + True + True + Select + + + + True + False + folder-open-symbolic + + + + False + True + 1 + + - False - True - 1 - - - - - - 1 - 1 - - - - - True - False - - - True - True - True - document-edit-symbolic - False - - - False - True - 0 + 1 + 0 - + True - True - True - Select - + False + start + Picons path: + + + 0 + 1 + + + + + True + False + start + Backup path: + + + 0 + 2 + + + + + True + True + 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 + 1 + + + + + True + True + False + + + True + True + True + document-edit-symbolic + False + + + False + True + 0 + + + + + True + True + True + Select + + + + True + False + folder-open-symbolic + + + + + False + True + 1 + + + + + + 1 + 2 - - 1 - 2 + False + True + 2 - - False - True - 1 - + @@ -835,6 +1567,9 @@ Author: Dmitriy Yefremov True False Local file paths: + + + @@ -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):