Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
Add smart grouping of extension context menu
Context menues from extensions were grouped by string parsing.
If "/" is in the string the string before the seperator is used as
root menu entry and the string after the seperator is used as
sub-menu entry
  • Loading branch information
brot committed Dec 22, 2012
1 parent 12fd714 commit 7e142cc
Show file tree
Hide file tree
Showing 3 changed files with 32 additions and 18 deletions.
13 changes: 7 additions & 6 deletions share/gpodder/extensions/enqueue_in_mediaplayer.py
Expand Up @@ -19,9 +19,10 @@
__category__ = 'interface'
__only_for__ = 'gtk'

AMAROK = (['amarok', '--play', '--append'], 'Enqueue in Amarok')
AMAROK = (['amarok', '--play', '--append'],
'%s/%s' % (_('Enqueue in'), 'Amarok'))
VLC = (['vlc', '--started-from-file', '--playlist-enqueue'],
'Enqueue in VLC')
'%s/%s' % (_('Enqueue in'), 'VLC'))


class gPodderExtension:
Expand All @@ -42,10 +43,10 @@ def _enqueue_episodes_cmd(self, episodes, cmd):
stdout=subprocess.PIPE, stderr=subprocess.PIPE
)

def _enqueue_episodes_amarok(self, episodes):
def enqueue_episodes_amarok(self, episodes):
self._enqueue_episodes_cmd(episodes, AMAROK[0])

def _enqueue_episodes_vlc(self, episodes):
def enqueue_episodes_vlc(self, episodes):
self._enqueue_episodes_cmd(episodes, VLC[0])

def on_episodes_context_menu(self, episodes):
Expand All @@ -55,9 +56,9 @@ def on_episodes_context_menu(self, episodes):
menu_entries = []

if self.amarok_available:
menu_entries.append((AMAROK[1], self._enqueue_episodes_amarok))
menu_entries.append((AMAROK[1], self.enqueue_episodes_amarok))

if self.vlc_available:
menu_entries.append((VLC[1], self._enqueue_episodes_vlc))
menu_entries.append((VLC[1], self.enqueue_episodes_vlc))

return menu_entries
6 changes: 3 additions & 3 deletions share/gpodder/extensions/normalize_audio.py
Expand Up @@ -61,7 +61,7 @@ def on_episodes_context_menu(self, episodes):
if 'audio/ogg' not in mimetypes and 'audio/mpeg' not in mimetypes:
return None

return [(self.container.metadata.title, self._convert_episodes)]
return [(self.container.metadata.title, self.convert_episodes)]

def _convert_episode(self, episode):
if episode.file_type() != 'audio':
Expand All @@ -82,11 +82,11 @@ def _convert_episode(self, episode):
if p.returncode == 0:
logger.info('normalize-audio processing successful.')
gpodder.user_extensions.on_notification_show(_('File normalized'),
episode)
episode.title)
else:
logger.warn('normalize-audio failed: %s / %s', stdout, stderr)

def _convert_episodes(self, episodes):
def convert_episodes(self, episodes):
for episode in episodes:
self._convert_episode(episode)

31 changes: 22 additions & 9 deletions src/gpodder/gtkui/main.py
Expand Up @@ -1652,6 +1652,13 @@ def convert_and_send_thread(episode):

util.run_in_background(lambda: convert_and_send_thread(episodes_to_copy))

def _add_sub_menu(self, menu, label):
root_item = gtk.MenuItem(label)
menu.append(root_item)
sub_menu = gtk.Menu()
root_item.set_submenu(sub_menu)
return sub_menu

def treeview_available_show_context_menu(self, treeview, event=None):
model, paths = self.treeview_handle_context_menu_click(treeview, event)
if not paths:
Expand Down Expand Up @@ -1706,18 +1713,26 @@ def treeview_available_show_context_menu(self, treeview, event=None):
result = gpodder.user_extensions.on_episodes_context_menu(episodes)
if result:
menu.append(gtk.SeparatorMenuItem())
submenus = {}
for label, callback in result:
item = gtk.MenuItem(label)
item.connect('activate', lambda item, callback:
callback(episodes), callback)
menu.append(item)
key, sep, titel = label.rpartition('/')
item = gtk.ImageMenuItem(titel)
item.connect('button-press-event',
lambda w, ee, callback: callback(episodes), callback)
if key:
if key not in submenus:
sub_menu = self._add_sub_menu(menu, key)
submenus[key] = sub_menu
else:
sub_menu = submenus[key]
sub_menu.append(item)
else:
menu.append(item)

# Ok, this probably makes sense to only display for downloaded files
if downloaded:
menu.append(gtk.SeparatorMenuItem())
share_item = gtk.MenuItem(_('Send to'))
menu.append(share_item)
share_menu = gtk.Menu()
share_menu = self._add_sub_menu(menu, _('Send to'))

item = gtk.ImageMenuItem(_('Local folder'))
item.set_image(gtk.image_new_from_stock(gtk.STOCK_DIRECTORY, gtk.ICON_SIZE_MENU))
Expand All @@ -1729,8 +1744,6 @@ def treeview_available_show_context_menu(self, treeview, event=None):
item.connect('button-press-event', lambda w, ee: self.copy_episodes_bluetooth(episodes))
share_menu.append(item)

share_item.set_submenu(share_menu)

menu.append(gtk.SeparatorMenuItem())

item = gtk.CheckMenuItem(_('New'))
Expand Down

0 comments on commit 7e142cc

Please sign in to comment.