diff --git a/app/settings.py b/app/settings.py index 020c0b4f..2e6f7c25 100644 --- a/app/settings.py +++ b/app/settings.py @@ -503,6 +503,16 @@ class Settings: def epg_options(self, value): self._cp_settings["epg_options"] = value + # *********** FTP ************ # + + @property + def ftp_bookmarks(self): + return self._cp_settings.get("ftp_bookmarks", []) + + @ftp_bookmarks.setter + def ftp_bookmarks(self, value): + self._cp_settings["ftp_bookmarks"] = value + # ***** Program settings ***** # @property diff --git a/app/ui/ftp.glade b/app/ui/ftp.glade index 0b873fd1..4cb7192f 100644 --- a/app/ui/ftp.glade +++ b/app/ui/ftp.glade @@ -34,11 +34,23 @@ Author: Dmitriy Yefremov + + True + False + + + gtk-remove + True + False + True + True + + + + - - - + @@ -174,9 +186,66 @@ Author: Dmitriy Yefremov 1 + + + True + False + True + expand + + + True + True + True + Bookmarks + + + True + False + user-bookmarks + + + + + True + True + 1 + + + + + True + False + True + True + Add bookmark + + + + True + False + bookmark-new + + + + + False + True + end + 1 + + + + + False + True + 2 + + True + False False 5 @@ -184,7 +253,7 @@ Author: Dmitriy Yefremov True False True - Add folder + New folder @@ -246,20 +315,7 @@ Author: Dmitriy Yefremov False True - 2 - - - - - False - bookmarks_list_store - 0 - - - False - True - end - 5 + 3 @@ -270,122 +326,191 @@ Author: Dmitriy Yefremov - + True - True - in - 100 + False + 5 - + + 150 + False + vertical + 2 + + + True + True + in + + + True + True + bookmarks_list_store + False + 0 + 0 + + + + + + + + + Name + + + end + + + 0 + + + + + + + + + True + True + 0 + + + + + + + + False + True + 0 + + + + True True - ftp_list_store - 1 - True - - - - - - - - - - - - multiple - - + in + 100 - - True - 100 - Name - True - 0.5 - 1 - - - 0.019999999552965164 + + True + True + ftp_list_store + 1 + True + + + + + + + + + + + + multiple - - 0 - - - 0.019999999552965164 - end - + + True + 100 + Name + True + 0.5 + 1 + + + 0.019999999552965164 + + + 0 + + + + + 0.019999999552965164 + end + + + + 1 + + - - 1 - - - - - - fixed - 75 - Size - 0.5 - 2 - - 0.94999998807907104 + + fixed + 75 + Size + 0.5 + 2 + + + 0.94999998807907104 + + + 2 + + - - 2 - - - - - - 75 - Date - 0.5 - 3 - - - 3 - - - - - - - fixed - 85 - Attr. - 0.5 - 4 - - - 0.50999999046325684 - end + + 75 + Date + 0.5 + 3 + + + + 3 + + - - 4 - - - - - - False - Extra - - - 5 - + + fixed + 85 + Attr. + 0.5 + 4 + + + 0.50999999046325684 + end + + + 4 + + + + + + + False + Extra + + + + 5 + + + + + True + True + 1 + @@ -395,7 +520,7 @@ Author: Dmitriy Yefremov - + 24 True False @@ -484,7 +609,7 @@ Author: Dmitriy Yefremov True False True - Add folder + New folder @@ -649,7 +774,7 @@ Author: Dmitriy Yefremov - + 24 True False @@ -747,6 +872,7 @@ Author: Dmitriy Yefremov Create folder True + False False ftp_create_folder_image False @@ -758,6 +884,7 @@ Author: Dmitriy Yefremov gtk-edit True + False False True True @@ -770,6 +897,7 @@ Author: Dmitriy Yefremov Rename True False + False rename_image False @@ -787,6 +915,7 @@ Author: Dmitriy Yefremov Remove True + False False remove_image_2 False diff --git a/app/ui/ftp.py b/app/ui/ftp.py index 536526a9..9121cb64 100644 --- a/app/ui/ftp.py +++ b/app/ui/ftp.py @@ -159,6 +159,7 @@ class FtpClientBox(Gtk.HBox): "on_disconnect": self.on_disconnect, "on_ftp_row_activated": self.on_ftp_row_activated, "on_file_row_activated": self.on_file_row_activated, + "on_bookmark_activated": self.on_bookmark_activated, "on_ftp_edit": self.on_ftp_edit, "on_ftp_rename": self.on_ftp_rename, "on_ftp_renamed": self.on_ftp_renamed, @@ -168,6 +169,7 @@ class FtpClientBox(Gtk.HBox): "on_file_copy": self.on_file_copy, "on_file_remove": self.on_file_remove, "on_ftp_remove": self.on_ftp_file_remove, + "on_bookmark_remove": self.on_bookmark_remove, "on_file_create_folder": self.on_file_create_folder, "on_ftp_create_folder": self.on_ftp_create_folder, "on_view_drag_begin": self.on_view_drag_begin, @@ -176,6 +178,7 @@ class FtpClientBox(Gtk.HBox): "on_file_drag_data_get": self.on_file_drag_data_get, "on_file_drag_data_received": self.on_file_drag_data_received, "on_view_drag_end": self.on_view_drag_end, + "on_bookmark_add": self.on_bookmark_add, "on_view_popup_menu": on_popup_menu, "on_view_key_press": self.on_view_key_press, "on_view_press": self.on_view_press, @@ -192,6 +195,8 @@ class FtpClientBox(Gtk.HBox): self._file_view = builder.get_object("file_view") self._file_model = builder.get_object("file_list_store") self._file_name_renderer = builder.get_object("file_name_column_renderer") + self._bookmark_view = builder.get_object("bookmarks_view") + self._bookmark_model = builder.get_object("bookmarks_list_store") # Buttons self._connect_button = builder.get_object("connect_button") disconnect_button = builder.get_object("disconnect_button") @@ -200,7 +205,10 @@ class FtpClientBox(Gtk.HBox): disconnect_button.bind_property("visible", builder.get_object("ftp_edit_menu_item"), "sensitive") disconnect_button.bind_property("visible", builder.get_object("ftp_rename_menu_item"), "sensitive") disconnect_button.bind_property("visible", builder.get_object("ftp_remove_menu_item"), "sensitive") + disconnect_button.bind_property("visible", builder.get_object("add_ftp_bookmark_button"), "sensitive") self._connect_button.bind_property("visible", builder.get_object("disconnect_button"), "visible", 4) + self._bookmarks_button = builder.get_object("bookmarks_button") + self._bookmarks_button.bind_property("active", builder.get_object("bookmarks_box"), "visible") # Force Ctrl self._ftp_view.connect("key-press-event", self._app.force_ctrl) self._file_view.connect("key-press-event", self._app.force_ctrl) @@ -218,6 +226,7 @@ class FtpClientBox(Gtk.HBox): @run_task def init_ftp(self): + self.init_bookmarks() GLib.idle_add(self._ftp_model.clear) try: if self._ftp: @@ -712,6 +721,27 @@ class FtpClientBox(Gtk.HBox): self._ftp_info_label.set_text(message) self._ftp_info_label.set_tooltip_text(message) + # **************** Bookmarks ***************** # + + @run_idle + def init_bookmarks(self): + self._bookmark_model.clear() + list(map(lambda b: self._bookmark_model.append((b,)), self._settings.ftp_bookmarks)) + + def on_bookmark_activated(self, view, path, column): + self.init_ftp_data(self._bookmark_model[path][0]) + + def on_bookmark_add(self, item=None): + self._bookmarks_button.set_active(True) + self._bookmark_model.append((self._ftp_model.get_value(self._ftp_model.get_iter_first(), 4),)) + self._settings.ftp_bookmarks = [r[0] for r in self._bookmark_model] + + def on_bookmark_remove(self, item=None): + model, paths = self._bookmark_view.get_selection().get_selected_rows() + if paths and show_dialog(DialogType.QUESTION, self._app.app_window) == Gtk.ResponseType.OK: + list(map(lambda p: model.remove(model.get_iter(p)), paths)) + self._settings.ftp_bookmarks = [r[0] for r in self._bookmark_model] + def on_view_key_press(self, view, event): key_code = event.hardware_keycode if not KeyboardKey.value_exist(key_code): @@ -743,6 +773,8 @@ class FtpClientBox(Gtk.HBox): self.on_ftp_file_remove() elif self._file_view.is_focus(): self.on_file_remove() + elif self._bookmark_view.is_focus(): + self.on_bookmark_remove() elif key is KeyboardKey.RETURN: path, column = view.get_cursor() if path: @@ -760,11 +792,13 @@ class FtpClientBox(Gtk.HBox): # Enable selection. self._select_enabled = True - def on_paned_size_allocate(self, paned, allocation): + @staticmethod + def on_paned_size_allocate(paned, allocation): """ Sets default homogeneous sizes. """ paned.set_position(0.5 * allocation.width) - def get_size_from_bytes(self, size): + @staticmethod + def get_size_from_bytes(size): """ Simple convert function from bytes to other units like K, M or G. """ try: b = float(size)