1 """Defines :class:`PlaylistPlugin` several associated
2 :class:`hooke.plugin.Command`\s for handling :mod:`hooke.playlist`
6 from ..playlist import FilePlaylist
7 from ..plugin import Builtin, Command, Argument
10 class PlaylistPlugin (Builtin):
12 super(PlaylistPlugin, self).__init__(name='playlist')
15 return [NextCommand(), PreviousCommand(), JumpCommand(),
16 SaveCommand(), LoadCommand(),
17 AddCommand(), RemoveCommand(), FilterCommand()]
19 class NextCommand (Command):
20 """Move playlist to the next curve.
23 super(NextCommand, self).__init__(
26 Argument(name='playlist', type='playlist', optional=False,
28 :class:``hooke.plugin.playlist.Playlist`` to act on.
33 def _run(inqueue, outqueue, params):
34 params['playlist'].next()
36 class PreviousCommand (Command):
37 """Move playlist to the previous curve.
40 super(PreviousCommand, self).__init__(
41 name='previous curve',
43 Argument(name='playlist', type='playlist', optional=False,
45 :class:``hooke.plugin.playlist.Playlist`` to act on.
50 def _run(inqueue, outqueue, params):
51 params['playlist'].previous()
53 class JumpCommand (Command):
54 """Move playlist to a given curve.
57 super(JumpCommand, self).__init__(
60 Argument(name='playlist', type='playlist', optional=False,
62 :class:``hooke.plugin.playlist.Playlist`` to act on.
64 Argument(name='index', type='int', optional=False, help="""
65 Index of target curve.
70 def _run(inqueue, outqueue, params):
71 params['playlist'].jump(params['index'])
73 class SaveCommand (Command):
77 super(SaveCommand, self).__init__(
80 Argument(name='playlist', type='playlist', optional=False,
82 :class:``hooke.plugin.playlist.Playlist`` to act on.
84 Argument(name='output', type='file',
86 File name for the output playlist. Defaults to overwring the input
92 def _run(inqueue, outqueue, params):
93 params['playlist'].save(params['output'])
95 class LoadCommand (Command):
99 super(LoadCommand, self).__init__(
100 name='load playlist',
102 Argument(name='input', type='file', optional=False,
104 File name for the input playlist.
106 Argument(name='digests', type='digest', optional=False,
109 Digests for loading curves.
114 def _run(inqueue, outqueue, params):
115 p = FilePlaylist(drivers=params['drivers'], path=params['input'])
119 class AddCommand (Command):
120 """Add a curve to a playlist.
123 super(AddCommand, self).__init__(
124 name='add curve to playlist',
126 Argument(name='playlist', type='playlist', optional=False,
128 :class:``hooke.plugin.playlist.Playlist`` to act on.
130 Argument(name='input', type='file', optional=False,
132 File name for the input :class:`hooke.curve.Curve`.
134 Argument(name='info', type='dict', optional=True,
136 Additional information for the input :class:`hooke.curve.Curve`.
141 def _run(inqueue, outqueue, params):
142 params['playlist'].append_curve_by_path(params['input'],
145 class RemoveCommand (Command):
146 """Remove a curve from a playlist.
149 super(RemoveCommand, self).__init__(
150 name='remove curve from playlist',
152 Argument(name='playlist', type='playlist', optional=False,
154 :class:``hooke.plugin.playlist.Playlist`` to act on.
156 Argument(name='index', type='int', optional=False, help="""
157 Index of target curve.
162 def _run(inqueue, outqueue, params):
163 params['playlist'].pop(params['index'])
164 params['playlist'].jump(params._index)
166 class FilterCommand (Command):
167 """Create a subset playlist via a selection function.
170 super(FilterCommand, self).__init__(
171 name='filter playlist',
173 Argument(name='playlist', type='playlist', optional=False,
175 :class:``hooke.plugin.playlist.Playlist`` to act on.
177 Argument(name='filter', type='function', optional=False,
179 Function returning `True` for "good" curves.
184 def _run(inqueue, outqueue, params):
185 p = params['playlist'].filter(params['filter'])