19
19
__category__ = 'interface'
20
20
__only_for__ = 'gtk'
22
AMAROK = (['amarok', '--play', '--append'],
23
'%s/%s' % (_('Enqueue in'), 'Amarok'))
24
VLC = (['vlc', '--started-from-file', '--playlist-enqueue'],
25
'%s/%s' % (_('Enqueue in'), 'VLC'))
23
def __init__(self, application, command):
24
self.title = '/'.join((_('Enqueue in'), application))
25
self.command = command
28
def is_installed(self):
29
return util.find_command(self.command[0]) is not None
31
def enqueue_episodes(self, episodes):
32
filenames = [episode.get_playback_url() for episode in episodes]
34
subprocess.Popen(self.command + filenames,
35
stdout=subprocess.PIPE, stderr=subprocess.PIPE)
37
for episode in episodes:
38
episode.playback_mark()
39
self.gpodder.update_episode_list_icons(selected=True)
43
# Amarok, http://amarok.kde.org/
44
Player('Amarok', ['amarok', '--play', '--append']),
46
# VLC, http://videolan.org/
47
Player('VLC', ['vlc', '--started-from-file', '--playlist-enqueue']),
49
# Totem, https://live.gnome.org/Totem
50
Player('Totem', ['totem', '--enqueue']),
28
53
class gPodderExtension:
29
54
def __init__(self, container):
30
55
self.container = container
33
self.amarok_available = self.check_mediaplayer(AMAROK[0][0])
34
self.vlc_available = self.check_mediaplayer(VLC[0][0])
36
def check_mediaplayer(self, cmd):
37
return not (util.find_command(cmd) == None)
39
def _enqueue_episodes_cmd(self, episodes, cmd):
40
filenames = [episode.get_playback_url() for episode in episodes]
42
vlc = subprocess.Popen(cmd + filenames,
43
stdout=subprocess.PIPE, stderr=subprocess.PIPE
46
def enqueue_episodes_amarok(self, episodes):
47
self._enqueue_episodes_cmd(episodes, AMAROK[0])
49
def enqueue_episodes_vlc(self, episodes):
50
self._enqueue_episodes_cmd(episodes, VLC[0])
57
# Only display media players that can be found at extension load time
58
self.players = filter(lambda player: player.is_installed(), PLAYERS)
60
def on_ui_object_available(self, name, ui_object):
61
if name == 'gpodder-gtk':
62
for p in self.players:
52
65
def on_episodes_context_menu(self, episodes):
53
if not [e for e in episodes if e.file_exists()]:
66
if not any(e.file_exists() for e in episodes):
58
if self.amarok_available:
59
menu_entries.append((AMAROK[1], self.enqueue_episodes_amarok))
61
if self.vlc_available:
62
menu_entries.append((VLC[1], self.enqueue_episodes_vlc))
69
return [(p.title, p.enqueue_episodes) for p in self.players]