Replace inject_extensions_menu() with ExtensionMenuHelper

This commit is contained in:
Teemu Ikonen 2023-10-22 20:10:31 +03:00
parent aff0e7b301
commit 1942fc88c0
1 changed files with 12 additions and 35 deletions

View File

@ -84,7 +84,6 @@ class gPodder(BuilderWidget, dbus.service.Object):
self.db = self.core.db
self.model = self.core.model
self.options = options
self.extensions_menu = None
self.extensions_actions = []
self._search_podcasts = None
self._search_episodes = None
@ -210,7 +209,14 @@ class gPodder(BuilderWidget, dbus.service.Object):
# Set up the first instance of MygPoClient
self.mygpo_client = my.MygPoClient(self.config)
self.inject_extensions_menu()
# Extensions section in app menu and menubar Extras menu
extensions_menu = Gio.Menu()
self.application.menu_extras.append_section(_('Extensions'), extensions_menu)
self.extensions_menu_helper = ExtensionMenuHelper(self.gPodder,
extensions_menu, 'extensions.action_',
lambda fun: lambda action, param: fun())
self.extensions_menu_helper.replace_entries(
gpodder.user_extensions.on_create_menu())
gpodder.user_extensions.on_ui_initialized(self.model,
self.extensions_podcast_update_cb,
@ -428,37 +434,6 @@ class gPodder(BuilderWidget, dbus.service.Object):
self.bluetooth_episodes_action.set_enabled(self.bluetooth_available)
def inject_extensions_menu(self):
"""
Update Extras/Extensions menu.
Called at startup and when en/dis-abling extensions.
"""
def gen_callback(label, callback):
return lambda action, param: callback()
for a in self.extensions_actions:
self.gPodder.remove_action(a.get_property('name'))
self.extensions_actions = []
if self.extensions_menu is None:
# insert menu section at startup (hides when empty)
self.extensions_menu = Gio.Menu.new()
self.application.menu_extras.append_section(_('Extensions'), self.extensions_menu)
else:
self.extensions_menu.remove_all()
extension_entries = gpodder.user_extensions.on_create_menu()
if extension_entries:
# populate menu
for i, (label, callback) in enumerate(extension_entries):
action_id = 'extensions.action_%d' % i
action = Gio.SimpleAction.new(action_id)
action.connect('activate', gen_callback(label, callback))
self.extensions_actions.append(action)
self.gPodder.add_action(action)
itm = Gio.MenuItem.new(label, 'win.' + action_id)
self.extensions_menu.append_item(itm)
def on_resume_all_infobar_response(self, infobar, response_id):
if response_id == Gtk.ResponseType.OK:
selection = self.treeDownloads.get_selection()
@ -4122,7 +4097,9 @@ class gPodder(BuilderWidget, dbus.service.Object):
extension.on_ui_initialized(self.model,
self.extensions_podcast_update_cb,
self.extensions_episode_download_cb)
self.inject_extensions_menu()
self.extensions_menu_helper.replace_entries(
gpodder.user_extensions.on_create_menu())
def on_extension_disabled(self, extension):
self.inject_extensions_menu()
self.extensions_menu_helper.replace_entries(
gpodder.user_extensions.on_create_menu())