reworking of picons dialog

This commit is contained in:
DYefremov
2020-04-26 19:26:36 +03:00
parent 58cf299097
commit 1b7d2f15b0
4 changed files with 727 additions and 719 deletions

View File

@@ -29,7 +29,7 @@ from .main_helper import (insert_marker, move_items, rename, ViewTarget, set_fla
scroll_to, get_base_model, update_picons_data, copy_picon_reference, assign_picon,
remove_picon, is_only_one_item_selected, gen_bouquets, BqGenType, get_iptv_url, append_picons,
get_selection, get_model_data, remove_all_unused_picons, get_picon_pixbuf)
from .picons_downloader import PiconsDialog
from .picons_manager import PiconsDialog
from .satellites_dialog import show_satellites_dialog
from .search import SearchProvider
from .service_details_dialog import ServiceDetailsDialog, Action
@@ -120,7 +120,7 @@ class Application(Gtk.Application):
"on_insert_marker": self.on_insert_marker,
"on_fav_press": self.on_fav_press,
"on_locate_in_services": self.on_locate_in_services,
"on_picons_loader_show": self.on_picons_loader_show,
"on_picons_manager_show": self.on_picons_manager_show,
"on_filter_changed": self.on_filter_changed,
"on_assign_picon": self.on_assign_picon,
"on_remove_picon": self.on_remove_picon,
@@ -842,7 +842,8 @@ class Application(Gtk.Application):
def on_services_view_drag_drop(self, view, drag_context, x, y, time):
view.stop_emission_by_name("drag_drop")
# https://stackoverflow.com/q/7661016 [Some data was dropped, get the data!]
view.drag_get_data(drag_context, drag_context.list_targets()[-1], time)
targets = drag_context.list_targets()
view.drag_get_data(drag_context, targets[-1] if targets else Gdk.atom_intern("text/plain", False), time)
def on_services_view_drag_data_received(self, view, drag_context, x, y, data, info, time):
# Needs for the GtkTreeView when using models [filter, sort]
@@ -2419,7 +2420,7 @@ class Application(Gtk.Application):
# ***************** Picons *********************#
def on_picons_loader_show(self, action, value=None):
def on_picons_manager_show(self, action, value=None):
ids = {}
if self._s_type is SettingsType.ENIGMA_2:
for r in self._services_model:

View File

@@ -1257,8 +1257,8 @@ Author: Dmitriy Yefremov
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="receives_default">True</property>
<property name="tooltip_text" translatable="yes">Picons downloader</property>
<signal name="clicked" handler="on_picons_loader_show" swapped="no"/>
<property name="tooltip_text" translatable="yes">Picons manager</property>
<signal name="clicked" handler="on_picons_manager_show" swapped="no"/>
<child>
<object class="GtkImage" id="picons_downloader_header_button_image">
<property name="visible">True</property>

File diff suppressed because it is too large Load Diff

View File

@@ -8,7 +8,7 @@ from gi.repository import GLib, GdkPixbuf
from app.commons import run_idle, run_task, run_with_delay
from app.connections import upload_data, DownloadType, download_data, remove_picons
from app.settings import SettingsType
from app.settings import SettingsType, Settings
from app.tools.picons import PiconsParser, parse_providers, Provider, convert_to
from app.tools.satellites import SatellitesParser, SatelliteSource
from .dialogs import show_dialog, DialogType, get_message
@@ -41,7 +41,7 @@ class PiconsDialog:
"on_url_changed": self.on_url_changed,
"on_picons_filter_changed": self.on_picons_filter_changed,
"on_position_edited": self.on_position_edited,
"on_notebook_switch_page": self.on_notebook_switch_page,
"on_visible_page": self.on_visible_page,
"on_convert": self.on_convert,
"on_picons_folder_changed": self.on_picons_folder_changed,
"on_picons_view_drag_drop": self.on_picons_view_drag_drop,
@@ -56,7 +56,7 @@ class PiconsDialog:
"on_popup_menu": on_popup_menu}
builder = Gtk.Builder()
builder.add_from_file(UI_RESOURCES_PATH + "picons_dialog.glade")
builder.add_from_file(UI_RESOURCES_PATH + "picons_manager.glade")
builder.connect_signals(handlers)
self._dialog = builder.get_object("picons_dialog")
@@ -101,6 +101,7 @@ class PiconsDialog:
self._load_providers_button.bind_property("visible", self._receive_button, "visible")
self._load_providers_button.bind_property("visible", builder.get_object("download_box_separator"), "visible")
self._filter_bar.bind_property("search-mode-enabled", self._filter_bar, "visible")
self._explorer_path_button.bind_property("sensitive", builder.get_object("picons_view_sw"), "sensitive")
# Init drag-and-drop
self.init_drag_and_drop()
# Style
@@ -112,8 +113,7 @@ class PiconsDialog:
self._s_type = settings.setting_type
self._ip_entry.set_text(self._settings.host)
self._picons_entry.set_text(self._settings.picons_path)
self._picons_path = self._settings.picons_local_path
self._picons_dir_entry.set_text(self._picons_path)
self._picons_dir_entry.set_text(self._settings.picons_local_path)
window_size = self._settings.get("picons_downloader_window_size")
if window_size:
@@ -129,7 +129,7 @@ class PiconsDialog:
self._dialog.show()
def on_picons_view_realize(self, view):
self._explorer_path_button.set_current_folder(self._picons_path)
self._explorer_path_button.set_current_folder(self._settings.picons_local_path)
def on_picons_folder_changed(self, button):
path = button.get_filename()
@@ -142,10 +142,13 @@ class PiconsDialog:
def update_picons(self, path):
p_model = self._picons_view.get_model()
self._picons_view.set_model(None)
model = get_base_model(p_model)
model.clear()
self._picons_view.set_model(p_model)
self._picons_view.set_model(None)
for index, itr in enumerate([row.iter for row in model]):
model.remove(itr)
if index % 50 == 0:
yield True
for file in os.listdir(path):
if self._terminate:
@@ -158,6 +161,7 @@ class PiconsDialog:
else:
yield model.append((p, file))
self._picons_view.set_model(p_model)
self._explorer_path_button.set_sensitive(True)
yield True
@@ -171,7 +175,8 @@ class PiconsDialog:
def on_picons_view_drag_drop(self, view, drag_context, x, y, time):
view.stop_emission_by_name("drag_drop")
view.drag_get_data(drag_context, drag_context.list_targets()[-1], time)
targets = drag_context.list_targets()
view.drag_get_data(drag_context, targets[-1] if targets else Gdk.atom_intern("text/plain", False), time)
def on_picons_view_drag_data_received(self, view, drag_context, x, y, data, info, time):
view.stop_emission_by_name("drag_data_received")
@@ -317,7 +322,7 @@ class PiconsDialog:
self.process_provider(Provider(*prv))
if self._resize_no_radio_button.get_active():
self.resize(self._picons_path)
self.resize(self._picons_dir_entry.get_text())
self.show_info_message(get_message("Done!"), Gtk.MessageType.INFO)
finally:
@@ -334,7 +339,8 @@ class PiconsDialog:
GLib.io_add_watch(self._current_process.stderr, GLib.IO_IN, self.write_to_buffer)
self._current_process.wait()
path = self._TMP_DIR + (url[url.find("//") + 2:] if prv.single else self._BASE_URL + url[url.rfind("/") + 1:])
PiconsParser.parse(path, self._picons_path, self._TMP_DIR, prv, self._picon_ids, self.get_picons_format())
PiconsParser.parse(path, self._picons_dir_entry.get_text(),
self._TMP_DIR, prv, self._picon_ids, self.get_picons_format())
def write_to_buffer(self, fd, condition):
if condition == GLib.IO_IN:
@@ -382,10 +388,9 @@ class PiconsDialog:
GLib.idle_add(self._dialog.destroy)
def save_window_size(self, window):
t, _ = self._text_view.get_allocated_size()
b, _ = self._info_bar.get_allocated_size()
size = window.get_size()
self._settings.add("picons_downloader_window_size", (size.width, size.height - t.height - b.height))
height = size.height - self._text_view.get_allocated_height() - self._info_bar.get_allocated_height()
self._settings.add("picons_downloader_window_size", (size.width, height))
@run_task
def clean_data(self):
@@ -397,8 +402,10 @@ class PiconsDialog:
if show_dialog(DialogType.QUESTION, self._dialog) == Gtk.ResponseType.CANCEL:
return
settings = Settings(self._settings.settings)
settings.picons_local_path = self._explorer_path_button.get_filename() + "/"
self.show_info_message(get_message("Please, wait..."), Gtk.MessageType.INFO)
self.run_func(lambda: upload_data(settings=self._settings,
self.run_func(lambda: upload_data(settings=settings,
download_type=DownloadType.PICONS,
callback=self.append_output,
done_callback=lambda: self.show_info_message(get_message("Done!"),
@@ -408,9 +415,11 @@ class PiconsDialog:
if show_dialog(DialogType.QUESTION, self._dialog) == Gtk.ResponseType.CANCEL:
return
self.run_func(lambda: download_data(settings=self._settings,
settings = Settings(self._settings.settings)
settings.picons_local_path = self._explorer_path_button.get_filename() + "/"
self.run_func(lambda: download_data(settings=settings,
download_type=DownloadType.PICONS,
callback=self.append_output))
callback=self.append_output), True)
def on_remove(self, item):
if show_dialog(DialogType.QUESTION, self._dialog) == Gtk.ResponseType.CANCEL:
@@ -422,14 +431,17 @@ class PiconsDialog:
Gtk.MessageType.INFO)))
@run_task
def run_func(self, func):
def run_func(self, func, update=False):
try:
GLib.idle_add(self._expander.set_expanded, True)
GLib.idle_add(self._header_download_box.set_sensitive, False)
func()
except OSError as e:
self.show_info_message(str(e), Gtk.MessageType.ERROR)
GLib.idle_add(self._header_download_box.set_sensitive, True)
finally:
GLib.idle_add(self._header_download_box.set_sensitive, True)
if update:
self.on_picons_folder_changed(self._explorer_path_button)
def on_info_bar_close(self, bar=None, resp=None):
self._info_bar.set_visible(False)
@@ -486,10 +498,11 @@ class PiconsDialog:
model.set_value(model.get_iter(path), 2, value)
@run_idle
def on_notebook_switch_page(self, nb, box, tab_num):
self._convert_button.set_visible(tab_num > 1)
self._load_providers_button.set_visible(tab_num == 1)
is_explorer = tab_num == 0
def on_visible_page(self, stack: Gtk.Stack, param):
name = stack.get_visible_child_name()
self._convert_button.set_visible(name == "converter")
self._load_providers_button.set_visible(name == "downloader")
is_explorer = name == "explorer"
self._filter_button.set_visible(is_explorer)
if is_explorer:
self.on_picons_folder_changed(self._explorer_path_button)