Added watchdogs for *.application folders to refresh app groups

This commit is contained in:
2025-11-30 00:07:08 -06:00
parent d2d266adda
commit 8664eb877b

View File

@@ -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",