Added watchdogs for *.application folders to refresh app groups
This commit is contained in:
@@ -4,6 +4,8 @@
|
|||||||
import gi
|
import gi
|
||||||
gi.require_version('Gtk', '3.0')
|
gi.require_version('Gtk', '3.0')
|
||||||
from gi.repository import Gtk
|
from gi.repository import Gtk
|
||||||
|
from gi.repository import GLib
|
||||||
|
from gi.repository import Gio
|
||||||
|
|
||||||
from xdg.DesktopEntry import DesktopEntry
|
from xdg.DesktopEntry import DesktopEntry
|
||||||
|
|
||||||
@@ -18,8 +20,9 @@ class CategoryListWidget(Gtk.ButtonBox):
|
|||||||
super(CategoryListWidget, self).__init__()
|
super(CategoryListWidget, self).__init__()
|
||||||
|
|
||||||
self.ctx = self.get_style_context()
|
self.ctx = self.get_style_context()
|
||||||
self.active_category: str = 'Accessories'
|
self.dir_watchers: [] = []
|
||||||
|
|
||||||
|
self.active_category: str = 'Accessories'
|
||||||
self.category_dict: {} = {
|
self.category_dict: {} = {
|
||||||
"Accessories": [],
|
"Accessories": [],
|
||||||
"Multimedia": [],
|
"Multimedia": [],
|
||||||
@@ -48,11 +51,10 @@ class CategoryListWidget(Gtk.ButtonBox):
|
|||||||
self.ctx.add_class("category-list-widget")
|
self.ctx.add_class("category-list-widget")
|
||||||
|
|
||||||
def _setup_signals(self):
|
def _setup_signals(self):
|
||||||
event_system.subscribe("refresh-active-category", self.refresh_active_category)
|
self._load_dir_watchers()
|
||||||
|
|
||||||
def _subscribe_to_events(self):
|
def _subscribe_to_events(self):
|
||||||
...
|
event_system.subscribe("refresh-active-category", self.refresh_active_category)
|
||||||
|
|
||||||
|
|
||||||
def _load_widgets(self):
|
def _load_widgets(self):
|
||||||
for category in self.category_dict.keys():
|
for category in self.category_dict.keys():
|
||||||
@@ -62,8 +64,45 @@ class CategoryListWidget(Gtk.ButtonBox):
|
|||||||
|
|
||||||
self.add(button)
|
self.add(button)
|
||||||
|
|
||||||
def set_active_category(self, button):
|
def _reset_dir_watchers(self):
|
||||||
self.active_category = button.get_label()
|
self._clear_dir_watchers()
|
||||||
|
self._load_dir_watchers()
|
||||||
|
|
||||||
|
def _load_dir_watchers(self):
|
||||||
|
for dpath in settings_manager.settings.config.application_dirs:
|
||||||
|
dir_watcher = Gio.File.new_for_path(dpath).monitor_directory(
|
||||||
|
Gio.FileMonitorFlags.WATCH_MOVES,
|
||||||
|
Gio.Cancellable()
|
||||||
|
)
|
||||||
|
|
||||||
|
watch_id = dir_watcher.connect(
|
||||||
|
"changed",
|
||||||
|
self._dir_watch_updates
|
||||||
|
)
|
||||||
|
|
||||||
|
dir_watcher.watch_id = watch_id
|
||||||
|
self.dir_watchers.append(dir_watcher)
|
||||||
|
|
||||||
|
def _clear_dir_watchers(self):
|
||||||
|
for watcher in self.dir_watchers:
|
||||||
|
watcher.cancel()
|
||||||
|
watcher.disconnect(watcher.watch_id)
|
||||||
|
watcher.run_dispose()
|
||||||
|
|
||||||
|
self.dir_watchers.clear()
|
||||||
|
|
||||||
|
def _dir_watch_updates(self, file_monitor, file, other_file = None, eve_type = None):
|
||||||
|
if eve_type in [Gio.FileMonitorEvent.CREATED, Gio.FileMonitorEvent.DELETED,
|
||||||
|
Gio.FileMonitorEvent.RENAMED, Gio.FileMonitorEvent.MOVED_IN,
|
||||||
|
Gio.FileMonitorEvent.MOVED_OUT]:
|
||||||
|
|
||||||
|
GLib.idle_add(self._reload_meu)
|
||||||
|
|
||||||
|
def _reload_meu(self):
|
||||||
|
for group in self.category_dict:
|
||||||
|
self.category_dict[group].clear()
|
||||||
|
|
||||||
|
self.fill_menu_objects()
|
||||||
event_system.emit(
|
event_system.emit(
|
||||||
"load-active-category",
|
"load-active-category",
|
||||||
(self.category_dict[ self.active_category ],)
|
(self.category_dict[ self.active_category ],)
|
||||||
@@ -121,6 +160,13 @@ class CategoryListWidget(Gtk.ButtonBox):
|
|||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
|
def set_active_category(self, button):
|
||||||
|
self.active_category = button.get_label()
|
||||||
|
event_system.emit(
|
||||||
|
"load-active-category",
|
||||||
|
(self.category_dict[ self.active_category ],)
|
||||||
|
)
|
||||||
|
|
||||||
def refresh_active_category(self):
|
def refresh_active_category(self):
|
||||||
event_system.emit(
|
event_system.emit(
|
||||||
"load-active-category",
|
"load-active-category",
|
||||||
|
|||||||
Reference in New Issue
Block a user