Added IO ui to stop move or copy, enhanced favorites plugin

This commit is contained in:
2022-11-25 23:12:43 -06:00
parent 4f9fe37613
commit f51a860de5
6 changed files with 139 additions and 51 deletions

View File

@@ -1,15 +1,17 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- Generated with glade 3.38.2 -->
<!-- Generated with glade 3.40.0 -->
<interface>
<requires lib="gtk+" version="3.24"/>
<object class="GtkListStore" id="favorites_store">
<columns>
<!-- column-name Favorites -->
<column type="gchararray"/>
<!-- column-name Path -->
<column type="gchararray"/>
</columns>
</object>
<object class="GtkDialog" id="favorites_dialog">
<property name="width-request">320</property>
<property name="width-request">420</property>
<property name="height-request">450</property>
<property name="can-focus">False</property>
<property name="modal">True</property>

View File

@@ -1,5 +1,5 @@
# Python imports
import os, threading, subprocess, time, inspect, json
import os, inspect, json
# Lib imports
import gi
@@ -10,19 +10,6 @@ from gi.repository import Gtk
from plugins.plugin_base import PluginBase
# NOTE: Threads WILL NOT die with parent's destruction.
def threaded(fn):
def wrapper(*args, **kwargs):
threading.Thread(target=fn, args=args, kwargs=kwargs, daemon=False).start()
return wrapper
# NOTE: Threads WILL die with parent's destruction.
def daemon_threaded(fn):
def wrapper(*args, **kwargs):
threading.Thread(target=fn, args=args, kwargs=kwargs, daemon=True).start()
return wrapper
class Plugin(PluginBase):
@@ -65,7 +52,8 @@ class Plugin(PluginBase):
with open(self._FAVORITES_FILE) as f:
self._favorites = json.load(f)
for favorite in self._favorites:
self._favorites_store.append([favorite])
display, path = favorite
self._favorites_store.append([display, path])
else:
with open(self._FAVORITES_FILE, 'a') as f:
f.write('[]')
@@ -78,25 +66,29 @@ class Plugin(PluginBase):
button.connect("button-release-event", self._show_favorites_menu)
return button
@threaded
def _get_state(self, widget=None, eve=None):
self._event_system.emit("get_current_state")
@threaded
def _set_current_dir_lbl(self, widget=None, eve=None):
self._current_dir_lbl.set_label(f"Current Directory:\n{self._fm_state.tab.get_current_directory()}")
def _add_to_favorite(self, state):
current_directory = self._fm_state.tab.get_current_directory()
self._favorites_store.append([current_directory])
self._favorites.append(current_directory)
path = self._fm_state.tab.get_current_directory()
parts = path.split("/")
display = '/'.join(parts[-3:]) if len(parts) > 3 else path
self._favorites_store.append([display, path])
self._favorites.append([display, path])
self._save_favorites()
def _remove_from_favorite(self, state):
path = self._favorites_store.get_value(self._selected, 0)
path = self._favorites_store.get_value(self._selected, 1)
self._favorites_store.remove(self._selected)
self._favorites.remove(path)
for i, f in enumerate(self._favorites):
if f[1] == path:
self._favorites.remove( self._favorites[i] )
self._save_favorites()
def _save_favorites(self):
@@ -104,7 +96,7 @@ class Plugin(PluginBase):
json.dump(self._favorites, outfile, separators=(',', ':'), indent=4)
def _set_selected_path(self, widget=None, eve=None):
path = self._favorites_store.get_value(self._selected, 0)
path = self._favorites_store.get_value(self._selected, 1)
self._ui_objects[0].set_text(path)
self._set_current_dir_lbl()
@@ -119,5 +111,5 @@ class Plugin(PluginBase):
def _set_selected(self, user_data):
selected = user_data.get_selected()[1]
if selected:
if selected and not self._selected == selected:
self._selected = selected