Compare commits

..

27 Commits

Author SHA1 Message Date
DYefremov
528f59d990 updated it *.mo file 2022-04-26 17:46:53 +03:00
mapi68
28802957fc Italian translation update (#99) 2022-04-26 17:42:33 +03:00
DYefremov
b763d9785d minor translation improvement (#97) 2022-04-26 16:52:48 +03:00
DYefremov
601a81beb9 bump version 2022-04-25 21:00:08 +03:00
DYefremov
ace38433a1 fixed layout switching for the control tab 2022-04-25 20:48:22 +03:00
DYefremov
536b23a845 minor fix 2022-04-25 20:19:36 +03:00
DYefremov
d71a1d5dac removed unused option 2022-04-25 20:18:34 +03:00
DYefremov
4a92084c75 updated pl *.mo file 2022-04-18 13:09:32 +03:00
lareq
e7b8412c11 Polish translation update (#96)
added missing polish translations
2022-04-18 12:51:37 +03:00
audi06_19
ef53de1796 Turkish translation update (#95) 2022-04-17 22:56:10 +03:00
DYefremov
8e7a116db7 multiple selection for picons explorer 2022-04-12 23:33:17 +03:00
DYefremov
285014480f win style correction 2022-04-12 13:42:44 +03:00
DYefremov
279c255ad0 minor fixes in the control panel 2022-04-11 15:04:47 +03:00
DYefremov
90a3053192 bump version 2022-04-11 11:23:11 +03:00
DYefremov
19c6a5bef9 disabling FlySat source (#55) 2022-04-11 10:52:20 +03:00
DYefremov
945ee13058 hooks config for *.spec file 2022-04-10 10:39:59 +03:00
DYefremov
c65b6c540c transponder menu fix 2022-04-09 12:57:45 +03:00
DYefremov
62091dfa96 mac style correction 2022-04-07 22:29:00 +03:00
DYefremov
6ca06fd2cd minor start script correction 2022-04-07 16:29:46 +03:00
DYefremov
4cab05fc09 minor mac style correction 2022-04-06 14:16:50 +03:00
DYefremov
81e714ebab updated it *.mo file 2022-04-04 15:26:15 +03:00
DYefremov
147430d4f3 README update 2022-04-04 15:14:32 +03:00
DYefremov
f8f209d288 build instruction for Windows (#87) 2022-04-04 14:58:29 +03:00
DYefremov
bd0e08e90b changed ssl context for Windows package (#89) 2022-04-03 19:15:27 +03:00
DYefremov
57020423d7 minor fix 2022-04-03 19:08:08 +03:00
mapi68
1fd3e45dd3 Italian translation сorrection (#88) 2022-04-02 09:17:36 +03:00
DYefremov
ac1725b3ef changed path for 7zip on Windows 2022-04-01 12:12:02 +03:00
43 changed files with 276 additions and 124 deletions

View File

@@ -36,7 +36,8 @@ Clipboard is **"rubber"**. There is an accumulation before the insertion!
beginning or inserts (creates) a new bouquet. beginning or inserts (creates) a new bouquet.
* **Ctrl + BackSpace** - copies the selected channels from the main list to the bouquet end. * **Ctrl + BackSpace** - copies the selected channels from the main list to the bouquet end.
* **Ctrl + E** - edit. * **Ctrl + E** - edit.
* **Ctrl + R, F2** - rename. * **Ctrl + R, F2** - rename.
* **Ctrl + Alt + R** - rename for bouquet.
* **Ctrl + S, T** in Satellites edit tool for create satellite or transponder. * **Ctrl + S, T** in Satellites edit tool for create satellite or transponder.
* **Ctrl + L** - parental lock. * **Ctrl + L** - parental lock.
* **Ctrl + H** - hide/skip. * **Ctrl + H** - hide/skip.
@@ -85,7 +86,8 @@ Recommended copy the package to the **Application** directory.
Perhaps in the security settings it will be necessary to allow the launch of this application! Perhaps in the security settings it will be necessary to allow the launch of this application!
* ### MS Windows * ### MS Windows
**Windows users can also run this program.** One way is to use the [MSYS2](https://www.msys2.org/) platform. **Windows users can also run this program.**
One way is to use the [MSYS2](https://www.msys2.org/) platform. You can use [this](https://github.com/DYefremov/DemonEditor/blob/master/build/BUILD_WIN.md) quick guide.
In addition, you can download a ready-made build (**64-bit**) from the [releases](https://github.com/DYefremov/DemonEditor/releases) page. In addition, you can download a ready-made build (**64-bit**) from the [releases](https://github.com/DYefremov/DemonEditor/releases) page.
**All builds may contain components distributed under the GPL [v3](http://www.gnu.org/licenses/gpl-3.0.html) or lower license. **All builds may contain components distributed under the GPL [v3](http://www.gnu.org/licenses/gpl-3.0.html) or lower license.

View File

@@ -757,14 +757,6 @@ class Settings:
def is_darwin(self): def is_darwin(self):
return IS_DARWIN return IS_DARWIN
@property
def force_external_themes(self):
return self._settings.get("force_external_themes", False)
@force_external_themes.setter
def force_external_themes(self, value):
self._settings["force_external_themes"] = value
# *********** Download dialog *********** # # *********** Download dialog *********** #
@property @property

View File

@@ -57,7 +57,7 @@ class PiconsCzDownloader:
_PERM_URL = "https://picon.cz/download/7337" _PERM_URL = "https://picon.cz/download/7337"
_BASE_URL = "https://picon.cz/download/" _BASE_URL = "https://picon.cz/download/"
_BASE_LOGO_URL = "https://picon.cz/picon/0/" _BASE_LOGO_URL = "https://picon.cz/picon/0/"
_HEADER = {"User-Agent": "DemonEditor/2.2.2", "Referer": ""} _HEADER = {"User-Agent": "DemonEditor/2.2.4", "Referer": ""}
_LINK_PATTERN = re.compile(r"((.*)-\d+x\d+)-(.*)_by_chocholousek.7z$") _LINK_PATTERN = re.compile(r"((.*)-\d+x\d+)-(.*)_by_chocholousek.7z$")
_FILE_PATTERN = re.compile(b"\\s+(1_.*\\.png).*") _FILE_PATTERN = re.compile(b"\\s+(1_.*\\.png).*")
@@ -136,7 +136,7 @@ class PiconsCzDownloader:
raise PiconsError("7-zip [7z] archiver not found!") raise PiconsError("7-zip [7z] archiver not found!")
if IS_WIN: if IS_WIN:
exe = f"C:{os.sep}Program Files{os.sep}7-Zip{os.sep}{exe}.exe" exe = f"{exe}.exe" if GTK_PATH else f"C:{os.sep}Program Files{os.sep}7-Zip{os.sep}{exe}.exe"
if not os.path.isfile(exe): if not os.path.isfile(exe):
raise PiconsError("7-Zip executable not found!") raise PiconsError("7-Zip executable not found!")

View File

@@ -164,16 +164,15 @@ class SatellitesParser(HTMLParser):
for src in SatelliteSource.get_sources(self._source): for src in SatelliteSource.get_sources(self._source):
try: try:
request = requests.get(url=src, headers=_HEADERS, timeout=_TIMEOUT) resp = requests.get(url=src, headers=_HEADERS, timeout=_TIMEOUT)
except requests.exceptions.RequestException as e: except requests.exceptions.RequestException as e:
log(f"Getting satellite list error: {repr(e)}") log(f"Getting satellite list error: {repr(e)}")
return []
else: else:
reason = request.reason reason = resp.reason
if reason == "OK": if reason == "OK":
self.feed(request.text) self.feed(resp.text)
else: else:
log(reason) log(f"Getting satellite list error: {reason} -> {resp.url}")
if self._rows: if self._rows:
if self._source is SatelliteSource.FLYSAT: if self._source is SatelliteSource.FLYSAT:
@@ -183,6 +182,8 @@ class SatellitesParser(HTMLParser):
elif source is SatelliteSource.KINGOFSAT: elif source is SatelliteSource.KINGOFSAT:
return self.get_satellites_for_king_of_sat() return self.get_satellites_for_king_of_sat()
return []
def get_satellite(self, sat): def get_satellite(self, sat):
pos = sat[1] pos = sat[1]
return Satellite(name=f"{pos} {sat[0]}", flags="0", return Satellite(name=f"{pos} {sat[0]}", flags="0",

View File

@@ -2941,6 +2941,7 @@ Author: Dmitriy Yefremov
<property name="margin_bottom">5</property> <property name="margin_bottom">5</property>
<property name="row_spacing">5</property> <property name="row_spacing">5</property>
<property name="column_spacing">5</property> <property name="column_spacing">5</property>
<property name="column_homogeneous">True</property>
<child> <child>
<object class="GtkButton" id="control_ok_button"> <object class="GtkButton" id="control_ok_button">
<property name="label" translatable="yes">OK</property> <property name="label" translatable="yes">OK</property>
@@ -3336,10 +3337,12 @@ audio-volume-medium-symbolic</property>
<property name="margin_right">5</property> <property name="margin_right">5</property>
<property name="margin_top">5</property> <property name="margin_top">5</property>
<property name="margin_bottom">5</property> <property name="margin_bottom">5</property>
<property name="homogeneous">True</property>
<property name="layout_style">expand</property> <property name="layout_style">expand</property>
<child> <child>
<object class="GtkButton"> <object class="GtkButton">
<property name="label" translatable="yes">All</property> <property name="label" translatable="yes">All</property>
<property name="width_request">75</property>
<property name="visible">True</property> <property name="visible">True</property>
<property name="can_focus">True</property> <property name="can_focus">True</property>
<property name="receives_default">True</property> <property name="receives_default">True</property>

View File

@@ -2,7 +2,7 @@
# #
# The MIT License (MIT) # The MIT License (MIT)
# #
# Copyright (c) 2018-2021 Dmitriy Yefremov # Copyright (c) 2018-2022 Dmitriy Yefremov
# #
# Permission is hereby granted, free of charge, to any person obtaining a copy # Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"), to deal # of this software and associated documentation files (the "Software"), to deal
@@ -860,6 +860,8 @@ class ControlTool(Gtk.Box):
self._ber_level_bar = builder.get_object("ber_level_bar") self._ber_level_bar = builder.get_object("ber_level_bar")
self._agc_level_bar = builder.get_object("agc_level_bar") self._agc_level_bar = builder.get_object("agc_level_bar")
self._volume_button = builder.get_object("volume_button") self._volume_button = builder.get_object("volume_button")
self._network_button = builder.get_object("control_network_button")
self._header_box = builder.get_object("control_header_box")
self.init_actions(app) self.init_actions(app)
if settings.alternate_layout: if settings.alternate_layout:
@@ -899,7 +901,11 @@ class ControlTool(Gtk.Box):
app.set_action("on_screenshot_osd", self.on_screenshot_osd) app.set_action("on_screenshot_osd", self.on_screenshot_osd)
def on_layout_changed(self, app, alt_layout): def on_layout_changed(self, app, alt_layout):
self._remote_box.reorder_child(self._remote_box.get_children()[0], 1) children = self._remote_box.get_children()
self._remote_box.reorder_child(children[0], len(children) - 1)
self._remote_box.reorder_child(children[-1], 0)
pack_type = Gtk.PackType.END if alt_layout else Gtk.PackType.START
self._header_box.set_child_packing(self._network_button, False, False, 0, pack_type)
# ***************** Remote controller ********************* # # ***************** Remote controller ********************* #

View File

@@ -40,7 +40,7 @@ Author: Dmitriy Yefremov
<property name="icon_name">system-help</property> <property name="icon_name">system-help</property>
<property name="type_hint">normal</property> <property name="type_hint">normal</property>
<property name="program_name">DemonEditor</property> <property name="program_name">DemonEditor</property>
<property name="version">2.2.2 Beta</property> <property name="version">2.2.4 Beta</property>
<property name="copyright">2018-2022 Dmitriy Yefremov <property name="copyright">2018-2022 Dmitriy Yefremov
</property> </property>
<property name="comments" translatable="yes">Enigma2 channel and satellite list editor.</property> <property name="comments" translatable="yes">Enigma2 channel and satellite list editor.</property>

View File

@@ -108,7 +108,7 @@ class EpgDialog:
self._info_bar = builder.get_object("info_bar") self._info_bar = builder.get_object("info_bar")
self._message_label = builder.get_object("info_bar_message_label") self._message_label = builder.get_object("info_bar_message_label")
self._assign_ref_popup_item = builder.get_object("bouquet_assign_ref_popup_item") self._assign_ref_popup_item = builder.get_object("bouquet_assign_ref_popup_item")
self._left_header_box = builder.get_object("left_header_box") self._left_action_box = builder.get_object("left_action_box")
self._xml_download_progress_bar = builder.get_object("xml_download_progress_bar") self._xml_download_progress_bar = builder.get_object("xml_download_progress_bar")
# Filter # Filter
self._filter_bar = builder.get_object("filter_bar") self._filter_bar = builder.get_object("filter_bar")
@@ -500,7 +500,7 @@ class EpgDialog:
@run_idle @run_idle
def update_active_header_elements(self, state): def update_active_header_elements(self, state):
self._left_header_box.set_sensitive(state) self._left_action_box.set_sensitive(state)
self._xml_download_progress_bar.set_visible(not state) self._xml_download_progress_bar.set_visible(not state)
self._source_info_label.set_text("" if state else "Downloading XML:") self._source_info_label.set_text("" if state else "Downloading XML:")

View File

@@ -666,7 +666,7 @@ class M3uImportDialog(IptvListDialog):
progress_box.pack_start(load_label, False, False, 0) progress_box.pack_start(load_label, False, False, 0)
# Picons # Picons
self._picons_switch = Gtk.Switch(visible=True) self._picons_switch = Gtk.Switch(visible=True)
self._picon_box = Gtk.HBox(visible=True, sensitive=False, spacing=2) self._picon_box = Gtk.HBox(visible=True, sensitive=False, spacing=5)
self._picon_box.pack_end(self._picons_switch, False, False, 0) self._picon_box.pack_end(self._picons_switch, False, False, 0)
self._picon_box.pack_end(Gtk.Label(visible=True, label=get_message("Download picons")), False, False, 0) self._picon_box.pack_end(Gtk.Label(visible=True, label=get_message("Download picons")), False, False, 0)
# Extra box # Extra box

View File

@@ -10,13 +10,19 @@
entry { entry {
min-height: 2.0em; min-height: 2.0em;
padding: 0.2em;
}
entry > image {
padding-left: 0.3em;
padding-right: 0.3em;
} }
button { button {
min-height: 1.5em; min-height: 1.2em;
min-width: 1.5em; min-width: 1.5em;
padding-top: 0.1em; padding-top: 0.3em;
padding-bottom: 0.1em; padding-bottom: 0.3em;
} }
button:active, button:checked { button:active, button:checked {
@@ -25,7 +31,7 @@ button:active, button:checked {
} }
combobox { combobox {
min-height: 2.1em; min-height: 2.2em;
} }
spinbutton { spinbutton {
@@ -54,6 +60,10 @@ switch slider {
min-width: 1.5em; min-width: 1.5em;
} }
popover .view {
background-color: transparent;
}
.font > box { .font > box {
min-height: 1.5em; min-height: 1.5em;
padding-top: 0.1em; padding-top: 0.1em;

View File

@@ -1587,7 +1587,7 @@ Author: Dmitriy Yefremov
<object class="GtkLabel" id="app_ver_label"> <object class="GtkLabel" id="app_ver_label">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can_focus">False</property> <property name="can_focus">False</property>
<property name="label">2.2.2 Beta</property> <property name="label">2.2.4 Beta</property>
<attributes> <attributes>
<attribute name="weight" value="bold"/> <attribute name="weight" value="bold"/>
</attributes> </attributes>

View File

@@ -709,6 +709,7 @@ Author: Dmitriy Yefremov
<property name="tooltip_text" translatable="yes">Drag the services to the desired picon or picon to the list of selected services.</property> <property name="tooltip_text" translatable="yes">Drag the services to the desired picon or picon to the list of selected services.</property>
<property name="model">picons_src_sort_model</property> <property name="model">picons_src_sort_model</property>
<property name="fixed_height_mode">True</property> <property name="fixed_height_mode">True</property>
<property name="rubber_banding">True</property>
<property name="enable_grid_lines">horizontal</property> <property name="enable_grid_lines">horizontal</property>
<property name="tooltip_column">0</property> <property name="tooltip_column">0</property>
<property name="activate_on_single_click">True</property> <property name="activate_on_single_click">True</property>
@@ -720,7 +721,9 @@ Author: Dmitriy Yefremov
<signal name="key-press-event" handler="on_tree_view_key_press" swapped="no"/> <signal name="key-press-event" handler="on_tree_view_key_press" swapped="no"/>
<signal name="query-tooltip" handler="on_view_query_tooltip" swapped="no"/> <signal name="query-tooltip" handler="on_view_query_tooltip" swapped="no"/>
<child internal-child="selection"> <child internal-child="selection">
<object class="GtkTreeSelection" id="picons_src_view_selection"/> <object class="GtkTreeSelection" id="picons_src_view_selection">
<property name="mode">multiple</property>
</object>
</child> </child>
<child> <child>
<object class="GtkTreeViewColumn" id="src_picon_column"> <object class="GtkTreeViewColumn" id="src_picon_column">
@@ -841,9 +844,10 @@ Author: Dmitriy Yefremov
<object class="GtkTreeView" id="picons_dest_view"> <object class="GtkTreeView" id="picons_dest_view">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can_focus">True</property> <property name="can_focus">True</property>
<property name="tooltip_text" translatable="yes">Drag the services to the desired picon or picon to the list of selected services. </property> <property name="tooltip_text" translatable="yes">Drag the services to the desired picon or picon to the list of selected services.</property>
<property name="model">picons_dst_sort_model</property> <property name="model">picons_dst_sort_model</property>
<property name="fixed_height_mode">True</property> <property name="fixed_height_mode">True</property>
<property name="rubber_banding">True</property>
<property name="enable_grid_lines">horizontal</property> <property name="enable_grid_lines">horizontal</property>
<property name="tooltip_column">0</property> <property name="tooltip_column">0</property>
<property name="activate_on_single_click">True</property> <property name="activate_on_single_click">True</property>
@@ -856,7 +860,9 @@ Author: Dmitriy Yefremov
<signal name="key-press-event" handler="on_tree_view_key_press" swapped="no"/> <signal name="key-press-event" handler="on_tree_view_key_press" swapped="no"/>
<signal name="query-tooltip" handler="on_view_query_tooltip" swapped="no"/> <signal name="query-tooltip" handler="on_view_query_tooltip" swapped="no"/>
<child internal-child="selection"> <child internal-child="selection">
<object class="GtkTreeSelection" id="picons_dest_view_selection"/> <object class="GtkTreeSelection" id="picons_dest_view_selection">
<property name="mode">multiple</property>
</object>
</child> </child>
<child> <child>
<object class="GtkTreeViewColumn" id="dest_picon_column"> <object class="GtkTreeViewColumn" id="dest_picon_column">

View File

@@ -453,12 +453,12 @@ class PiconManager(Gtk.Box):
def on_send_button_drag_data_received(self, button, drag_context, x, y, data, info, time): def on_send_button_drag_data_received(self, button, drag_context, x, y, data, info, time):
path = self.get_path_from_uris(data) path = self.get_path_from_uris(data)
if path: if path:
self.on_send(files_filter={path.name}, path=path.parent) self.on_picons_send(files_filter={path.name}, path=path.parent)
def on_download_button_drag_data_received(self, button, drag_context, x, y, data, info, time): def on_download_button_drag_data_received(self, button, drag_context, x, y, data, info, time):
path = self.get_path_from_uris(data) path = self.get_path_from_uris(data)
if path: if path:
self.on_download(files_filter={path.name}) self.on_picons_download(files_filter={path.name})
def on_remove_button_drag_data_received(self, button, drag_context, x, y, data, info, time): def on_remove_button_drag_data_received(self, button, drag_context, x, y, data, info, time):
path = self.get_path_from_uris(data) path = self.get_path_from_uris(data)
@@ -526,12 +526,12 @@ class PiconManager(Gtk.Box):
def on_selective_send(self, view): def on_selective_send(self, view):
path = self.get_selected_path(view) path = self.get_selected_path(view)
if path: if path:
self.on_send(files_filter={path.name}, path=path.parent) self.on_picons_send(files_filter={path.name}, path=path.parent)
def on_selective_download(self, view): def on_selective_download(self, view):
path = self.get_selected_path(view) path = self.get_selected_path(view)
if path: if path:
self.on_download(files_filter={path.name}) self.on_picons_download(files_filter={path.name})
def on_selective_remove(self, view): def on_selective_remove(self, view):
path = self.get_selected_path(view) path = self.get_selected_path(view)
@@ -541,20 +541,32 @@ class PiconManager(Gtk.Box):
def on_local_remove(self, view): def on_local_remove(self, view):
model, paths = view.get_selection().get_selected_rows() model, paths = view.get_selection().get_selected_rows()
if paths and show_dialog(DialogType.QUESTION, self._app_window) == Gtk.ResponseType.OK: if paths and show_dialog(DialogType.QUESTION, self._app_window) == Gtk.ResponseType.OK:
itr = model.get_iter(paths.pop()) base_model = get_base_model(model)
p_path = Path(model.get_value(itr, 2)).resolve() filter_model = model.get_model()
if p_path.is_file(): to_del = []
p_path.unlink()
base_model = get_base_model(model) for p in paths:
filter_model = model.get_model() itr = model.get_iter(p)
itr = filter_model.convert_iter_to_child_iter(model.convert_iter_to_child_iter(itr)) p_path = Path(model.get_value(itr, 2)).resolve()
base_model.remove(itr) if p_path.is_file():
self._app.update_picons() p_path.unlink()
to_del.append(filter_model.convert_iter_to_child_iter(model.convert_iter_to_child_iter(itr)))
list(map(base_model.remove, to_del))
self._app.update_picons()
if view is self._picons_dest_view: if view is self._picons_dest_view:
self._dst_count_label.set_text(str(len(model))) self._dst_count_label.set_text(str(len(model)))
def on_send(self, item=None, files_filter=None, path=None): def on_send(self, item=None):
view = self._picons_src_view if self._picons_src_view.is_focus() else self._picons_dest_view
model, paths = view.get_selection().get_selected_rows()
if paths:
self.on_picons_send(files_filter={Path(model[p][-1]).resolve().name for p in paths})
else:
self._app.show_error_message("No selected item!")
def on_picons_send(self, item=None, files_filter=None, path=None):
dest_path = path or self._settings.profile_picons_path dest_path = path or self._settings.profile_picons_path
settings = Settings(self._settings.settings) settings = Settings(self._settings.settings)
settings.profile_picons_path = f"{dest_path}{SEP}" settings.profile_picons_path = f"{dest_path}{SEP}"
@@ -567,7 +579,10 @@ class PiconManager(Gtk.Box):
Gtk.MessageType.INFO), Gtk.MessageType.INFO),
files_filter=files_filter)) files_filter=files_filter))
def on_download(self, item=None, files_filter=None, path=None): def on_download(self, item=None):
self.on_picons_download()
def on_picons_download(self, item=None, files_filter=None, path=None):
path = path or self._settings.profile_picons_path path = path or self._settings.profile_picons_path
settings = Settings(self._settings.settings) settings = Settings(self._settings.settings)
settings.profile_picons_path = path + SEP settings.profile_picons_path = path + SEP

View File

@@ -195,7 +195,6 @@ Author: Dmitriy Yefremov
<object class="GtkMenu" id="transponder_popup_menu"> <object class="GtkMenu" id="transponder_popup_menu">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can_focus">False</property> <property name="can_focus">False</property>
<property name="reserve_toggle_size">False</property>
<child> <child>
<object class="GtkImageMenuItem" id="add_tr_popup_menu_item"> <object class="GtkImageMenuItem" id="add_tr_popup_menu_item">
<property name="label" translatable="yes">Add</property> <property name="label" translatable="yes">Add</property>
@@ -1468,7 +1467,6 @@ Author: Dmitriy Yefremov
<property name="tooltip_text" translatable="yes">Source</property> <property name="tooltip_text" translatable="yes">Source</property>
<property name="active">0</property> <property name="active">0</property>
<items> <items>
<item id="FLYSAT" translatable="yes">FlySat</item>
<item id="LYNGSAT" translatable="yes">LyngSat</item> <item id="LYNGSAT" translatable="yes">LyngSat</item>
<item id="KINGOFSAT" translatable="yes">KingOfSat</item> <item id="KINGOFSAT" translatable="yes">KingOfSat</item>
</items> </items>

View File

@@ -530,11 +530,11 @@ class UpdateDialog:
@run_task @run_task
def get_sat_list(self, src, callback): def get_sat_list(self, src, callback):
sat_src = SatelliteSource.FLYSAT sat_src = SatelliteSource.LYNGSAT
if src == 1: if src == 1:
sat_src = SatelliteSource.LYNGSAT
elif src == 2:
sat_src = SatelliteSource.KINGOFSAT sat_src = SatelliteSource.KINGOFSAT
elif src == 2:
sat_src = SatelliteSource.FLYSAT
sats = self._parser.get_satellites_list(sat_src) sats = self._parser.get_satellites_list(sat_src)
callback(sats) callback(sats)
@@ -744,9 +744,7 @@ class ServicesUpdateDialog(UpdateDialog):
self._transponder_view.connect("select_all", lambda w: self.update_transponder_selection(True)) self._transponder_view.connect("select_all", lambda w: self.update_transponder_selection(True))
self._transponder_paned.set_visible(True) self._transponder_paned.set_visible(True)
self._source_box.remove(0)
self._source_box.connect("changed", self.on_update_satellites_list) self._source_box.connect("changed", self.on_update_satellites_list)
self._source_box.set_active(0)
@run_idle @run_idle
def on_receive_data(self, item): def on_receive_data(self, item):
@@ -843,8 +841,8 @@ class ServicesUpdateDialog(UpdateDialog):
sat_src = SatelliteSource.LYNGSAT sat_src = SatelliteSource.LYNGSAT
if src == 1: if src == 1:
sat_src = SatelliteSource.KINGOFSAT sat_src = SatelliteSource.KINGOFSAT
self._services_parser.source = sat_src
self._services_parser.source = sat_src
sats = self._parser.get_satellites_list(sat_src) sats = self._parser.get_satellites_list(sat_src)
callback(sats) callback(sats)
self.is_download = False self.is_download = False

View File

@@ -627,7 +627,7 @@ Author: Dmitriy Yefremov
<object class="GtkLabel" id="record_label"> <object class="GtkLabel" id="record_label">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can_focus">False</property> <property name="can_focus">False</property>
<property name="label" translatable="yes">Record:</property> <property name="label" translatable="yes">Recordings:</property>
</object> </object>
</child> </child>
</object> </object>
@@ -2551,7 +2551,7 @@ Author: Dmitriy Yefremov
<object class="GtkBox" id="enable_yt_dl_box"> <object class="GtkBox" id="enable_yt_dl_box">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can_focus">False</property> <property name="can_focus">False</property>
<property name="tooltip_text" translatable="yes">Enables parsing links using youtube-dl to get direct media links.</property> <property name="tooltip_text" translatable="yes">Enables URL parsing using youtube-dl to get direct links to media.</property>
<child> <child>
<object class="GtkLabel" id="enable_yt_dl_label"> <object class="GtkLabel" id="enable_yt_dl_label">
<property name="visible">True</property> <property name="visible">True</property>
@@ -2569,7 +2569,6 @@ Author: Dmitriy Yefremov
<object class="GtkSwitch" id="enable_yt_dl_switch"> <object class="GtkSwitch" id="enable_yt_dl_switch">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can_focus">True</property> <property name="can_focus">True</property>
<property name="tooltip_text" translatable="yes">Enables parsing links using youtube-dl to get direct links to media</property>
<property name="halign">end</property> <property name="halign">end</property>
<property name="valign">center</property> <property name="valign">center</property>
</object> </object>
@@ -2691,45 +2690,6 @@ Author: Dmitriy Yefremov
<property name="position">2</property> <property name="position">2</property>
</packing> </packing>
</child> </child>
<child>
<object class="GtkBox" id="force_ext_themes_box">
<property name="can_focus">False</property>
<property name="tooltip_text" translatable="yes">Enables forced use of external themes on macOS. </property>
<property name="margin_top">5</property>
<child>
<object class="GtkLabel" id="force_ext_themes_label">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="halign">start</property>
<property name="hexpand">True</property>
<property name="label" translatable="yes">Force external themes on macOS </property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkSwitch" id="force_ext_themes_switch">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="halign">end</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="pack_type">end</property>
<property name="position">1</property>
</packing>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">3</property>
</packing>
</child>
</object> </object>
</child> </child>
<child type="label_item"> <child type="label_item">

View File

@@ -216,8 +216,6 @@ class SettingsDialog:
builder.get_object("themes_support_frame").set_visible(True) builder.get_object("themes_support_frame").set_visible(True)
self._layout_switch = builder.get_object("layout_switch") self._layout_switch = builder.get_object("layout_switch")
self._layout_switch.set_active(self._ext_settings.alternate_layout) self._layout_switch.set_active(self._ext_settings.alternate_layout)
self._force_ext_themes_switch = builder.get_object("force_ext_themes_switch")
self._force_ext_themes_switch.set_active(self._settings.force_external_themes)
self._theme_frame = builder.get_object("theme_frame") self._theme_frame = builder.get_object("theme_frame")
self._theme_frame.set_visible(True) self._theme_frame.set_visible(True)
self._theme_thumbnail_image = builder.get_object("theme_thumbnail_image") self._theme_thumbnail_image = builder.get_object("theme_thumbnail_image")
@@ -401,7 +399,6 @@ class SettingsDialog:
self._ext_settings.is_themes_support = self._themes_support_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.theme = self._theme_combo_box.get_active_id()
self._ext_settings.icon_theme = self._icon_theme_combo_box.get_active_id() self._ext_settings.icon_theme = self._icon_theme_combo_box.get_active_id()
self._ext_settings.force_external_themes = self._force_ext_themes_switch.get_active()
if self._s_type is SettingsType.ENIGMA_2: if self._s_type is SettingsType.ENIGMA_2:
self._ext_settings.is_enable_experimental = self._enable_exp_switch.get_active() self._ext_settings.is_enable_experimental = self._enable_exp_switch.get_active()

View File

@@ -9,3 +9,12 @@ switch {
spinbutton entry { spinbutton entry {
min-height: 16px; min-height: 16px;
} }
button > image {
padding: 2px;
}
grid > button {
padding-left: 15px;
padding-right: 15px;
}

40
build/BUILD_WIN.md Normal file
View File

@@ -0,0 +1,40 @@
## Launch
The best way to run this program from source is using of [MSYS2](https://www.msys2.org/) platform.
1. Download and install the platform as described [here](https://www.msys2.org/) up to point 4.
2. Launch **mingw64** shell.
![mingw64](https://user-images.githubusercontent.com/7511379/161400639-898ceb10-7de8-4557-bde1-25fe32bdfb03.png)
3. Run first `pacman -Suy` After that, you may need to restart the terminal and re-run the update command.
4. Install minimal required packages:
`pacman -S mingw-w64-x86_64-gtk3 mingw-w64-x86_64-python3 mingw-w64-x86_64-python3-gobject mingw-w64-x86_64-python3-pip mingw-w64-x86_64-python3-requests`
Optional: `pacman -S mingw-w64-x86_64-python3-pillow`
To support streams playback, install the following packages (the list may not be complete):
For [MPV](https://mpv.io/) `pacman -S mingw-w64-x86_64-mpv`,
For [GStreamer](https://gstreamer.freedesktop.org/) `pacman -S mingw-w64-x86_64-gst-libav mingw-w64-x86_64-gst-plugins-bad mingw-w64-x86_64-gst-plugins-base mingw-w64-x86_64-gst-plugins-good mingw-w64-x86_64-gstreamer`
5. Download and unzip the archive with sources from preferred branch (e.g. [master](https://github.com/DYefremov/DemonEditor/archive/refs/heads/master.zip)) in to folder where MSYS2 is installed. E.g: `c:\msys64\home\username\`
6. Run mingw64 shell. Go to the folder where the program was unpacked. E.g: `cd DemonEditor/`
And run: `./start.py`
## Building a package
To build a standalone package, we can use [PyInstaller](https://pyinstaller.readthedocs.io/en/stable/).
1. Launch mingw64 shell.
2. Install PyInstaller via pip: `pip3 install pyinstaller`
3. Go to the folder where the program was unpacked. E.g: `c:\msys64\home\username\DemonEditor\`
4. Сopy and replace the files from the /build/win/ folder to the root .
5. Go to the folder with the program in the running terminal: `cd DemonEditor/`
6. Give the following command: `pyinstaller.exe DemonEditor.spec`
7. Wait until the operation end. In the dist folder you will find a ready-made build.
### Appearance
To change the look we can use third party [Gtk3 themes and Icon sets](https://www.gnome-look.org).
To set the default theme:
1. Сreate a folder "`\etc\gtk-3.0\`" in the root of the finished build folder.
2. Create a _settings.ini_ file in this folder with the following content:
```
[Settings]
gtk-icon-theme-name = Adwaita
gtk-theme-name = Windows-10
```
In this case, we are using the default icon theme "Adwaita" and the [third party theme](https://github.com/B00merang-Project/Windows-10) "Windows-10".
Themes and icon sets should be located in the `share\themes` and `share\icons` folders respectively.
To fine-tune the default theme you use, you can use the _win_style.css_ file in the `ui` folder.
You can find more info about changing the appearance of Gtk applications on the Web yourself.

View File

@@ -1,5 +1,5 @@
#!/bin/bash #!/bin/bash
VER="2.2.2_Beta" VER="2.2.4_Beta"
B_PATH="dist/DemonEditor" B_PATH="dist/DemonEditor"
DEB_PATH="$B_PATH/usr/share/demoneditor" DEB_PATH="$B_PATH/usr/share/demoneditor"

View File

@@ -1,5 +1,5 @@
Package: demon-editor Package: demon-editor
Version: 2.2.2-Beta Version: 2.2.4-Beta
Section: utils Section: utils
Priority: optional Priority: optional
Architecture: all Architecture: all

View File

@@ -32,6 +32,16 @@ a = Analysis([EXE_NAME],
hiddenimports=['fileinput', 'uuid'], hiddenimports=['fileinput', 'uuid'],
hookspath=[], hookspath=[],
runtime_hooks=[], runtime_hooks=[],
hooksconfig={
"gi": {
"languages": ["en", "be", "es", "it", "nl",
"pl", "pt", "ru", "tr", "zh_CN"],
"module-versions": {
"Gtk": "3.0",
"GtkSource": "3",
},
},
},
excludes=excludes, excludes=excludes,
win_no_prefer_redirects=False, win_no_prefer_redirects=False,
win_private_assemblies=False, win_private_assemblies=False,
@@ -69,7 +79,8 @@ app = BUNDLE(coll,
'CFBundleGetInfoString': "Enigma2 channel and satellite editor", 'CFBundleGetInfoString': "Enigma2 channel and satellite editor",
'LSApplicationCategoryType': 'public.app-category.utilities', 'LSApplicationCategoryType': 'public.app-category.utilities',
'LSMinimumSystemVersion': '10.13', 'LSMinimumSystemVersion': '10.13',
'CFBundleShortVersionString': f"2.2.2.{BUILD_DATE} Beta", 'CFBundleShortVersionString': f"2.2.4.{BUILD_DATE} Beta",
'NSHumanReadableCopyright': u"Copyright © 2022, Dmitriy Yefremov", 'NSHumanReadableCopyright': u"Copyright © 2022, Dmitriy Yefremov",
'NSRequiresAquaSystemAppearance': 'false' 'NSRequiresAquaSystemAppearance': 'false',
'NSHighResolutionCapable': 'true'
}) })

View File

@@ -30,6 +30,16 @@ a = Analysis([EXE_NAME],
hiddenimports=['fileinput', 'uuid', 'ctypes.wintypes'], hiddenimports=['fileinput', 'uuid', 'ctypes.wintypes'],
hookspath=[], hookspath=[],
runtime_hooks=[], runtime_hooks=[],
hooksconfig={
"gi": {
"languages": ["en", "be", "es", "it", "nl",
"pl", "pt", "ru", "tr", "zh_CN"],
"module-versions": {
"Gtk": "3.0",
"GtkSource": "3",
},
},
},
excludes=excludes, excludes=excludes,
win_no_prefer_redirects=False, win_no_prefer_redirects=False,
win_private_assemblies=False, win_private_assemblies=False,

View File

@@ -1,8 +1,14 @@
#!/usr/bin/env python3 #!/usr/bin/env python3
import os
import ssl
if __name__ == "__main__": if __name__ == "__main__":
from multiprocessing import freeze_support from multiprocessing import freeze_support
from app.ui.main import start_app from app.ui.main import start_app
os.environ["PYTHONUTF8"] = "1"
# TODO There needs to be a more "correct" way.
ssl._create_default_https_context = ssl._create_unverified_context
freeze_support() freeze_support()
start_app() start_app()

View File

@@ -1253,6 +1253,9 @@ msgstr "Выконваецца загрузка дадзеных!"
msgid "Recordings" msgid "Recordings"
msgstr "Запісы" msgstr "Запісы"
msgid "Recordings:"
msgstr "Запісы:"
msgid "Help" msgid "Help"
msgstr "Даведка" msgstr "Даведка"
@@ -1354,3 +1357,6 @@ msgstr "Усе букеты"
msgid "Playback from the main list" msgid "Playback from the main list"
msgstr "Прайграванне з асноўнага спіса" msgstr "Прайграванне з асноўнага спіса"
msgid "Enables URL parsing using youtube-dl to get direct links to media."
msgstr "Улучае аналіз URL-адрасоў з дапамогай youtube-dl для атрымання прамых спасылак на медыя."

View File

@@ -1267,6 +1267,9 @@ msgstr "Daten werden geladen!"
msgid "Recordings" msgid "Recordings"
msgstr "Aufnahmen" msgstr "Aufnahmen"
msgid "Recordings:"
msgstr "Aufnahmen:"
msgid "Help" msgid "Help"
msgstr "Hilfe" msgstr "Hilfe"
@@ -1368,3 +1371,6 @@ msgstr "Alle Bouquets"
msgid "Playback from the main list" msgid "Playback from the main list"
msgstr "Wiedergabe aus der Hauptliste" msgstr "Wiedergabe aus der Hauptliste"
msgid "Enables URL parsing using youtube-dl to get direct links to media."
msgstr "Aktiviert URL-Parsing mit youtube-dl, um direkte Links zu Medien zu erhalten."

View File

@@ -53,7 +53,7 @@ msgstr "Assegna"
msgid "Assign file" msgid "Assign file"
msgstr "Assegna file" msgstr "Assegna file"
msgid "Bouquet Details" msgid "Bouquet details"
msgstr "Dettagli bouquet" msgstr "Dettagli bouquet"
msgid "Bouquets" msgid "Bouquets"
@@ -93,7 +93,7 @@ msgid "Import m3u"
msgstr "Importa m3u" msgstr "Importa m3u"
msgid "Import m3u file" msgid "Import m3u file"
msgstr "Importa file m3u" msgstr "Importa m3u"
msgid "List configuration" msgid "List configuration"
msgstr "Visualizza configurazione" msgstr "Visualizza configurazione"
@@ -294,7 +294,7 @@ msgid "Providers"
msgstr "Provider" msgstr "Provider"
msgid "Receive picons" msgid "Receive picons"
msgstr "Ricevi picons" msgstr "Scarica picons"
msgid "Picons name format:" msgid "Picons name format:"
msgstr "Formato del nome:" msgstr "Formato del nome:"
@@ -312,7 +312,7 @@ msgid "Picons download tool"
msgstr "Strumento per scaricare picons" msgstr "Strumento per scaricare picons"
msgid "Transfer to receiver" msgid "Transfer to receiver"
msgstr "Trasferisci al ricevitore" msgstr "Trasferisci al ricevitore"
msgid "Downloader" msgid "Downloader"
msgstr "Scarica" msgstr "Scarica"
@@ -336,7 +336,7 @@ msgid "Converter between name formats"
msgstr "Convertitore per il formato dei nomi" msgstr "Convertitore per il formato dei nomi"
msgid "Receive picons for providers" msgid "Receive picons for providers"
msgstr "Ricevi picons per providers" msgstr "Scarica picons per providers"
msgid "Load satellite providers." msgid "Load satellite providers."
msgstr "Carica i providers satellitari" msgstr "Carica i providers satellitari"
@@ -876,7 +876,7 @@ msgid "Record"
msgstr "Registra" msgstr "Registra"
msgid "Record:" msgid "Record:"
msgstr "Registra:" msgstr "Registrazioni:"
msgid "Record to disk:" msgid "Record to disk:"
msgstr "Registra su disco:" msgstr "Registra su disco:"
@@ -1250,6 +1250,8 @@ msgstr "Caricamento dati in corso!"
msgid "Recordings" msgid "Recordings"
msgstr "Registrazioni" msgstr "Registrazioni"
msgid "Recordings:"
msgstr "Registrazioni:"
msgid "Help" msgid "Help"
msgstr "Aiuto" msgstr "Aiuto"
@@ -1351,3 +1353,6 @@ msgstr "Tutti i bouquets"
msgid "Playback from the main list" msgid "Playback from the main list"
msgstr "Riproduzione dalla lista principale" msgstr "Riproduzione dalla lista principale"
msgid "Enables URL parsing using youtube-dl to get direct links to media."
msgstr "Abilita l'analisi degli URL utilizzando youtube-dl per ottenere collegamenti diretti ai media."

View File

@@ -4,7 +4,7 @@
# #
msgid "" msgid ""
msgstr "" msgstr ""
"Last-Translator: wwns <https://github.com/wwns>\n" "Last-Translator: lareq <lareq@lareq.eu>\n"
"Language: pl\n" "Language: pl\n"
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
@@ -13,10 +13,12 @@ msgstr ""
"POT-Creation-Date: \n" "POT-Creation-Date: \n"
"PO-Revision-Date: \n" "PO-Revision-Date: \n"
"Language-Team: \n" "Language-Team: \n"
"X-Generator: Poedit 3.0\n" "X-Generator: Poedit 2.3\n"
msgid "translator-credits" msgid "translator-credits"
msgstr "wwns" msgstr ""
"lareq <lareq@lareq.eu>\n"
"wwns <https://github.com/wwns>"
# Main # Main
msgid "Service" msgid "Service"
@@ -215,7 +217,7 @@ msgid "Host:"
msgstr "Host:" msgstr "Host:"
msgid "Loading data..." msgid "Loading data..."
msgstr "Ładowanie danych" msgstr "Ładowanie danych..."
msgid "Receive" msgid "Receive"
msgstr "Pobierz" msgstr "Pobierz"
@@ -542,10 +544,10 @@ msgid "Done!"
msgstr "Zrobione!" msgstr "Zrobione!"
msgid "Please, wait..." msgid "Please, wait..."
msgstr "Proszę czekać" msgstr "Proszę czekać..."
msgid "Resizing..." msgid "Resizing..."
msgstr "Zmiana rozmiaru" msgstr "Zmiana rozmiaru..."
msgid "Select paths!" msgid "Select paths!"
msgstr "Wybierz ścieżki!" msgstr "Wybierz ścieżki!"
@@ -573,7 +575,7 @@ msgstr "Nie znaleziono VLC. Sprawdź, czy jest zainstalowany!"
# Search unavailable streams dialog # Search unavailable streams dialog
msgid "Please wait, streams testing in progress..." msgid "Please wait, streams testing in progress..."
msgstr "Proszę czekać, trwa testowanie strumieni" msgstr "Proszę czekać, trwa testowanie strumieni..."
msgid "Found" msgid "Found"
msgstr "Znaleziono" msgstr "Znaleziono"
@@ -989,7 +991,7 @@ msgid "Gtk3 Themes and Icons:"
msgstr "Gtk3 motywy i ikony:" msgstr "Gtk3 motywy i ikony:"
msgid "Deleting data..." msgid "Deleting data..."
msgstr "Usuwanie danych" msgstr "Usuwanie danych..."
msgid "Download from the receiver" msgid "Download from the receiver"
msgstr "Pobierz z odbiornika" msgstr "Pobierz z odbiornika"
@@ -1019,7 +1021,7 @@ msgid "EXPERIMENTAL!"
msgstr "EKSPERYMENTALNE!" msgstr "EKSPERYMENTALNE!"
msgid "Sorting data..." msgid "Sorting data..."
msgstr "Sortowanie danych" msgstr "Sortowanie danych..."
msgid "" msgid ""
"There are unsaved changes.\n" "There are unsaved changes.\n"
@@ -1059,7 +1061,7 @@ msgid "Enable Dark Mode"
msgstr "Włącz tryb ciemny" msgstr "Włącz tryb ciemny"
msgid "Extract..." msgid "Extract..."
msgstr "Rozpakuj" msgstr "Rozpakuj..."
msgid "Unsupported format!" msgid "Unsupported format!"
msgstr "Format nieobsługiwany!" msgstr "Format nieobsługiwany!"
@@ -1331,3 +1333,45 @@ msgstr "Przeciągnij usługi na żądaną ikonę lub na listę wybranych usług.
msgid "Sets the profile folder as default to store picons, backups, etc." msgid "Sets the profile folder as default to store picons, backups, etc."
msgstr "Ustawia folder profilu jako domyślny do przechowywania pikonów, kopii zapasowych itp." msgstr "Ustawia folder profilu jako domyślny do przechowywania pikonów, kopii zapasowych itp."
msgid "New sub-bouquet"
msgstr "Nowy sub-bukiet"
msgid "Mark not presented in Bouquets"
msgstr "Zaznacz te, których nie ma w bukietach"
msgid "Not in Bouquets"
msgstr "Nie ma w bukietach"
msgid "Do not show services present in Bouquets."
msgstr "Nie pokazuj usług obecnych w bukietach."
msgid "IPTV services only"
msgstr "Tylko serwisy IPTV"
msgid "Display picons"
msgstr "Wyświetl pikony"
msgid "Alternate layout"
msgstr "Alternatywny wygląd"
msgid "Layout of elements has been changed!"
msgstr "Zmieniono układ elementów!"
msgid "Restart the program to apply all changes."
msgstr "Uruchom ponownie program, aby zastosować wszystkie zmiany."
msgid "New folder"
msgstr "Nowy katalog"
msgid "Bookmarks"
msgstr "Zakładki"
msgid "Add bookmark"
msgstr "Dodaj zakładkę"
msgid "All bouquets"
msgstr "Wszystkie bukiety"
msgid "Playback from the main list"
msgstr "Odtwarzanie z listy głównej"

View File

@@ -1250,6 +1250,9 @@ msgstr "Выполняется загрузка данных!"
msgid "Recordings" msgid "Recordings"
msgstr "Записи" msgstr "Записи"
msgid "Recordings:"
msgstr "Записи:"
msgid "Help" msgid "Help"
msgstr "Справка" msgstr "Справка"
@@ -1351,3 +1354,6 @@ msgstr "Все букеты"
msgid "Playback from the main list" msgid "Playback from the main list"
msgstr "Воспроизведение из основного списка" msgstr "Воспроизведение из основного списка"
msgid "Enables URL parsing using youtube-dl to get direct links to media."
msgstr "Включает анализ URL-адресов с помощью youtube-dl для получения прямых ссылок на медиа."

View File

@@ -3,7 +3,7 @@ msgstr ""
"Project-Id-Version: DemonEditor\n" "Project-Id-Version: DemonEditor\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2020-04-16 15:59+0300\n" "POT-Creation-Date: 2020-04-16 15:59+0300\n"
"PO-Revision-Date: 2022-02-21 22:06+0300\n" "PO-Revision-Date: 2022-04-17 22:05+0300\n"
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
@@ -1312,6 +1312,9 @@ msgstr "Favoriler listesinde seçilen adı otomatik olarak ayarlayın."
msgid "Playback" msgid "Playback"
msgstr "Oynatım" msgstr "Oynatım"
msgid "Playback:"
msgstr "Oynatım:"
msgid "Audio" msgid "Audio"
msgstr "Ses" msgstr "Ses"
@@ -1362,3 +1365,21 @@ msgstr "Öğelerin düzeni değiştirildi!"
msgid "Restart the program to apply all changes." msgid "Restart the program to apply all changes."
msgstr "Tüm değişiklikleri uygulamak için programı yeniden başlatın." msgstr "Tüm değişiklikleri uygulamak için programı yeniden başlatın."
msgid "New folder"
msgstr "Yeni dosya"
msgid "Rename"
msgstr "Düzenle"
msgid "Bookmarks"
msgstr "Yer imleri"
msgid "Add bookmark"
msgstr "Yer imleri ekle"
msgid "All bouquets"
msgstr "Tüm buketler"
msgid "Playback from the main list"
msgstr "Ana listeden oynatma"

View File

@@ -6,19 +6,19 @@ def update_icon():
need_update = False need_update = False
icon_name = "DemonEditor.desktop" icon_name = "DemonEditor.desktop"
with open(icon_name, "r") as f: with open(icon_name, "r", encoding="utf-8") as f:
lines = f.readlines() lines = f.readlines()
for i, line in enumerate(lines): for i, line in enumerate(lines):
if line.startswith("Icon="): if line.startswith("Icon="):
icon_path = line.lstrip("Icon=") icon_path = line.lstrip("Icon=")
current_path = "{}/app/ui/icons/hicolor/96x96/apps/demon-editor.png".format(os.getcwd()) current_path = f"{os.getcwd()}/app/ui/icons/hicolor/96x96/apps/demon-editor.png"
if icon_path != current_path: if icon_path != current_path:
need_update = True need_update = True
lines[i] = "Icon={}\n".format(current_path) lines[i] = f"Icon={current_path}\n"
break break
if need_update: if need_update:
with open(icon_name, "w") as f: with open(icon_name, "w", encoding="utf-8") as f:
f.writelines(lines) f.writelines(lines)