1 """Defines :class:`PlaylistPlugin` several associated
2 :class:`hooke.plugin.Command`\s.
5 from ..playlist import FilePlaylist
6 from ..plugin import Builtin, Command, Argument
9 class PlaylistPlugin (Builtin):
11 super(PlaylistPlugin, self).__init__(name='playlist')
14 return [NextCommand(), PreviousCommand(), JumpCommand(),
15 SaveCommand(), LoadCommand(),
16 AddCommand(), RemoveCommand(), FilterCommand()]
18 class NextCommand (Command):
19 """Move playlist to the next curve.
22 super(NextCommand, self).__init__(
25 Argument(name='playlist', type='playlist', optional=False,
27 :class:``hooke.plugin.playlist.Playlist`` to act on.
32 def _run(inqueue, outqueue, params):
33 params['playlist'].next()
35 class PreviousCommand (Command):
36 """Move playlist to the previous curve.
39 super(PreviousCommand, self).__init__(
40 name='previous curve',
42 Argument(name='playlist', type='playlist', optional=False,
44 :class:``hooke.plugin.playlist.Playlist`` to act on.
49 def _run(inqueue, outqueue, params):
50 params['playlist'].previous()
52 class JumpCommand (Command):
53 """Move playlist to a given curve.
56 super(JumpCommand, self).__init__(
59 Argument(name='playlist', type='playlist', optional=False,
61 :class:``hooke.plugin.playlist.Playlist`` to act on.
63 Argument(name='index', type='int', optional=False, help="""
64 Index of target curve.
69 def _run(inqueue, outqueue, params):
70 params['playlist'].jump(params['index'])
72 class SaveCommand (Command):
76 super(SaveCommand, self).__init__(
79 Argument(name='playlist', type='playlist', optional=False,
81 :class:``hooke.plugin.playlist.Playlist`` to act on.
83 Argument(name='output', type='file',
85 File name for the output playlist. Defaults to overwring the input
91 def _run(inqueue, outqueue, params):
92 params['playlist'].save(params['output'])
94 class LoadCommand (Command):
98 super(LoadCommand, self).__init__(
101 Argument(name='input', type='file', optional=False,
103 File name for the input playlist.
105 Argument(name='digests', type='digest', optional=False,
108 Digests for loading curves.
113 def _run(inqueue, outqueue, params):
114 p = FilePlaylist(drivers=params['drivers'], path=params['input'])
118 class AddCommand (Command):
119 """Add a curve to a playlist.
122 super(AddCommand, self).__init__(
123 name='add curve to playlist',
125 Argument(name='playlist', type='playlist', optional=False,
127 :class:``hooke.plugin.playlist.Playlist`` to act on.
129 Argument(name='input', type='file', optional=False,
131 File name for the input :class:`hooke.curve.Curve`.
133 Argument(name='info', type='dict', optional=True,
135 Additional information for the input :class:`hooke.curve.Curve`.
140 def _run(inqueue, outqueue, params):
141 params['playlist'].append_curve_by_path(params['input'],
144 class RemoveCommand (Command):
145 """Remove a curve from a playlist.
148 super(RemoveCommand, self).__init__(
149 name='remove curve from playlist',
151 Argument(name='playlist', type='playlist', optional=False,
153 :class:``hooke.plugin.playlist.Playlist`` to act on.
155 Argument(name='index', type='int', optional=False, help="""
156 Index of target curve.
161 def _run(inqueue, outqueue, params):
162 params['playlist'].pop(params['index'])
163 params['playlist'].jump(params._index)
165 class FilterCommand (Command):
166 """Create a subset playlist via a selection function.
169 super(FilterCommand, self).__init__(
170 name='filter playlist',
172 Argument(name='playlist', type='playlist', optional=False,
174 :class:``hooke.plugin.playlist.Playlist`` to act on.
176 Argument(name='filter', type='function', optional=False,
178 Function returning `True` for "good" curves.
183 def _run(inqueue, outqueue, params):
184 p = params['playlist'].filter(params['filter'])