Mercurial > vixm
annotate vixm/ui.py @ 51:8396cc3816ee pure tip
On shutdown, make sure we tell the dbus clients that we're done
author | Josef "Jeff" Sipek <jeffpc@josefsipek.net> |
---|---|
date | Mon, 06 Nov 2006 06:16:19 -0500 |
parents | 2bf81d95246a |
children |
rev | line source |
---|---|
21
dfcf1a46fc56
Added GPLv2 file & copyright headers
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
20
diff
changeset
|
1 # ui.py - user interface |
dfcf1a46fc56
Added GPLv2 file & copyright headers
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
20
diff
changeset
|
2 # |
dfcf1a46fc56
Added GPLv2 file & copyright headers
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
20
diff
changeset
|
3 # Copyright (C) 2006 Josef "Jeff" Sipek <jeffpc@josefsipek.net> |
dfcf1a46fc56
Added GPLv2 file & copyright headers
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
20
diff
changeset
|
4 # |
dfcf1a46fc56
Added GPLv2 file & copyright headers
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
20
diff
changeset
|
5 # This program is free software; you can redistribute it and/or modify |
dfcf1a46fc56
Added GPLv2 file & copyright headers
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
20
diff
changeset
|
6 # it under the terms of the GNU General Public License version 2 as |
dfcf1a46fc56
Added GPLv2 file & copyright headers
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
20
diff
changeset
|
7 # published by the Free Software Foundation. |
3
dd00b69169c6
Created initial ui thread code, fixed up playlist code
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
8 |
45
2bf81d95246a
Move starting code into main.py
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
40
diff
changeset
|
9 import sys, re |
3
dd00b69169c6
Created initial ui thread code, fixed up playlist code
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
10 from threading import Thread |
dd00b69169c6
Created initial ui thread code, fixed up playlist code
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
11 |
45
2bf81d95246a
Move starting code into main.py
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
40
diff
changeset
|
12 import playlist, util, control |
3
dd00b69169c6
Created initial ui thread code, fixed up playlist code
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
13 |
dd00b69169c6
Created initial ui thread code, fixed up playlist code
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
14 class uiThread(Thread): |
dd00b69169c6
Created initial ui thread code, fixed up playlist code
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
15 """ This is the main ui thread class, it does all the magic |
dd00b69169c6
Created initial ui thread code, fixed up playlist code
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
16 necessary to have a vi-like interface """ |
30
860c891de6bb
Remove lots of xmms-related code & get ready to make the whole program a
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
25
diff
changeset
|
17 def __init__(self, play, lists): |
3
dd00b69169c6
Created initial ui thread code, fixed up playlist code
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
18 Thread.__init__(self) |
dd00b69169c6
Created initial ui thread code, fixed up playlist code
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
19 |
30
860c891de6bb
Remove lots of xmms-related code & get ready to make the whole program a
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
25
diff
changeset
|
20 self.play = play |
5
187453f856a7
Added a ex-like interface supporting a goto line syntax to enqueue a song
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
3
diff
changeset
|
21 self.lists = lists |
187453f856a7
Added a ex-like interface supporting a goto line syntax to enqueue a song
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
3
diff
changeset
|
22 |
7
f87b969fa973
Little cleanup; change of plans - try to make it more like ed first
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
6
diff
changeset
|
23 # commad list: |
f87b969fa973
Little cleanup; change of plans - try to make it more like ed first
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
6
diff
changeset
|
24 # quit 'q[!]' |
f87b969fa973
Little cleanup; change of plans - try to make it more like ed first
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
6
diff
changeset
|
25 # quit fails if there are list changes in |
f87b969fa973
Little cleanup; change of plans - try to make it more like ed first
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
6
diff
changeset
|
26 # memory that haven't been saved. The optional |
f87b969fa973
Little cleanup; change of plans - try to make it more like ed first
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
6
diff
changeset
|
27 # '!' forces the quit |
f87b969fa973
Little cleanup; change of plans - try to make it more like ed first
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
6
diff
changeset
|
28 # |
f87b969fa973
Little cleanup; change of plans - try to make it more like ed first
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
6
diff
changeset
|
29 # number '[range]n [playlistid]' |
f87b969fa973
Little cleanup; change of plans - try to make it more like ed first
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
6
diff
changeset
|
30 # prints playlist [playlistid] (default is |
f87b969fa973
Little cleanup; change of plans - try to make it more like ed first
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
6
diff
changeset
|
31 # LIST_PRIO) with each entry being numbered. |
f87b969fa973
Little cleanup; change of plans - try to make it more like ed first
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
6
diff
changeset
|
32 # If optional range is supplied, only the |
f87b969fa973
Little cleanup; change of plans - try to make it more like ed first
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
6
diff
changeset
|
33 # songs in that range are printed. The range |
f87b969fa973
Little cleanup; change of plans - try to make it more like ed first
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
6
diff
changeset
|
34 # string is standard ed-like line range (see |
f87b969fa973
Little cleanup; change of plans - try to make it more like ed first
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
6
diff
changeset
|
35 # below for details) |
f87b969fa973
Little cleanup; change of plans - try to make it more like ed first
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
6
diff
changeset
|
36 # |
f87b969fa973
Little cleanup; change of plans - try to make it more like ed first
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
6
diff
changeset
|
37 # list '[range]l [playlistid]' |
f87b969fa973
Little cleanup; change of plans - try to make it more like ed first
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
6
diff
changeset
|
38 # virtually identical to the number command |
f87b969fa973
Little cleanup; change of plans - try to make it more like ed first
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
6
diff
changeset
|
39 # above, however the lines are not numbered. |
f87b969fa973
Little cleanup; change of plans - try to make it more like ed first
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
6
diff
changeset
|
40 # The same rules apply to the range and |
f87b969fa973
Little cleanup; change of plans - try to make it more like ed first
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
6
diff
changeset
|
41 # playlistid arguments |
f87b969fa973
Little cleanup; change of plans - try to make it more like ed first
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
6
diff
changeset
|
42 # |
f87b969fa973
Little cleanup; change of plans - try to make it more like ed first
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
6
diff
changeset
|
43 # enqueue 'a songid' |
f87b969fa973
Little cleanup; change of plans - try to make it more like ed first
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
6
diff
changeset
|
44 # enqueue a song songid from LIST_DEFAULT onto |
f87b969fa973
Little cleanup; change of plans - try to make it more like ed first
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
6
diff
changeset
|
45 # LIST_PRIO. The enqueued song is added to the |
f87b969fa973
Little cleanup; change of plans - try to make it more like ed first
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
6
diff
changeset
|
46 # end of LIST_PRIO |
f87b969fa973
Little cleanup; change of plans - try to make it more like ed first
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
6
diff
changeset
|
47 # |
16
447b47ab396f
Implemented dequeue the proper way; Cleaned up stupidity in enqueue code
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
15
diff
changeset
|
48 # dequeue '[range]d' |
447b47ab396f
Implemented dequeue the proper way; Cleaned up stupidity in enqueue code
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
15
diff
changeset
|
49 # remove songs in range from LIST_PRIO. The |
447b47ab396f
Implemented dequeue the proper way; Cleaned up stupidity in enqueue code
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
15
diff
changeset
|
50 # range is in LIST_PRIO, NOT LIST_DEFAULT |
7
f87b969fa973
Little cleanup; change of plans - try to make it more like ed first
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
6
diff
changeset
|
51 # |
f87b969fa973
Little cleanup; change of plans - try to make it more like ed first
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
6
diff
changeset
|
52 # range: |
f87b969fa973
Little cleanup; change of plans - try to make it more like ed first
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
6
diff
changeset
|
53 # '' first entry; shortcut for '1' |
f87b969fa973
Little cleanup; change of plans - try to make it more like ed first
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
6
diff
changeset
|
54 # '%' entire list; shortcut for '1,$' |
f87b969fa973
Little cleanup; change of plans - try to make it more like ed first
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
6
diff
changeset
|
55 # '$' last entry |
f87b969fa973
Little cleanup; change of plans - try to make it more like ed first
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
6
diff
changeset
|
56 # 'n' entry on line n |
f87b969fa973
Little cleanup; change of plans - try to make it more like ed first
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
6
diff
changeset
|
57 # 'm,n' range of entries starting on line m and |
f87b969fa973
Little cleanup; change of plans - try to make it more like ed first
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
6
diff
changeset
|
58 # ending on line n. Both m and n are included |
f87b969fa973
Little cleanup; change of plans - try to make it more like ed first
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
6
diff
changeset
|
59 # in the list. m or n can both be an integer, |
f87b969fa973
Little cleanup; change of plans - try to make it more like ed first
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
6
diff
changeset
|
60 # '' or '$'. |
12
b5370c42288b
Code refactoring & implemented help command
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
11
diff
changeset
|
61 # |
8
79340745c952
Reimplemented enqueuing & quit properly, implemented list and number commands
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
7
diff
changeset
|
62 # command table format: |
79340745c952
Reimplemented enqueuing & quit properly, implemented list and number commands
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
7
diff
changeset
|
63 # "command regexp": |
12
b5370c42288b
Code refactoring & implemented help command
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
11
diff
changeset
|
64 # (function to call, range allowed, help str) |
b5370c42288b
Code refactoring & implemented help command
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
11
diff
changeset
|
65 self.cmdtable = { |
8
79340745c952
Reimplemented enqueuing & quit properly, implemented list and number commands
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
7
diff
changeset
|
66 "q([!]){,1}": |
13
2ecc611d198f
Added more helpful strings for the help strings
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
12
diff
changeset
|
67 (control.cmd_quit, |
20
f39963e96ca1
Rework of the help string code
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
19
diff
changeset
|
68 False), |
f39963e96ca1
Rework of the help string code
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
19
diff
changeset
|
69 "n( *([0-9]+)){,1}": |
13
2ecc611d198f
Added more helpful strings for the help strings
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
12
diff
changeset
|
70 (control.cmd_number, |
20
f39963e96ca1
Rework of the help string code
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
19
diff
changeset
|
71 True), |
f39963e96ca1
Rework of the help string code
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
19
diff
changeset
|
72 "l( *([0-9]+)){,1}": |
13
2ecc611d198f
Added more helpful strings for the help strings
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
12
diff
changeset
|
73 (control.cmd_list, |
20
f39963e96ca1
Rework of the help string code
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
19
diff
changeset
|
74 True), |
f39963e96ca1
Rework of the help string code
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
19
diff
changeset
|
75 "a *([0-9]+)": |
13
2ecc611d198f
Added more helpful strings for the help strings
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
12
diff
changeset
|
76 (control.cmd_enqueue, |
20
f39963e96ca1
Rework of the help string code
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
19
diff
changeset
|
77 False), |
16
447b47ab396f
Implemented dequeue the proper way; Cleaned up stupidity in enqueue code
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
15
diff
changeset
|
78 "d": |
13
2ecc611d198f
Added more helpful strings for the help strings
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
12
diff
changeset
|
79 (control.cmd_dequeue, |
20
f39963e96ca1
Rework of the help string code
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
19
diff
changeset
|
80 True), |
9
eaa800169f5b
Hooked up the playlists to control xmms!
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
8
diff
changeset
|
81 "h": |
13
2ecc611d198f
Added more helpful strings for the help strings
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
12
diff
changeset
|
82 (control.cmd_help, |
20
f39963e96ca1
Rework of the help string code
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
19
diff
changeset
|
83 False), |
17
1c769ae67af4
Implemented the zxcvb xmms controls
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
16
diff
changeset
|
84 # the following commands are there do allow some, |
34
8028f2addb00
Destroy all traces of xmms
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
32
diff
changeset
|
85 # more direct control over which songs we play |
17
1c769ae67af4
Implemented the zxcvb xmms controls
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
16
diff
changeset
|
86 "z": |
1c769ae67af4
Implemented the zxcvb xmms controls
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
16
diff
changeset
|
87 (control.cmd_prev, |
20
f39963e96ca1
Rework of the help string code
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
19
diff
changeset
|
88 False), |
17
1c769ae67af4
Implemented the zxcvb xmms controls
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
16
diff
changeset
|
89 "x": |
1c769ae67af4
Implemented the zxcvb xmms controls
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
16
diff
changeset
|
90 (control.cmd_play, |
20
f39963e96ca1
Rework of the help string code
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
19
diff
changeset
|
91 False), |
17
1c769ae67af4
Implemented the zxcvb xmms controls
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
16
diff
changeset
|
92 "c": |
1c769ae67af4
Implemented the zxcvb xmms controls
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
16
diff
changeset
|
93 (control.cmd_pause, |
20
f39963e96ca1
Rework of the help string code
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
19
diff
changeset
|
94 False), |
17
1c769ae67af4
Implemented the zxcvb xmms controls
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
16
diff
changeset
|
95 "v": |
1c769ae67af4
Implemented the zxcvb xmms controls
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
16
diff
changeset
|
96 (control.cmd_stop, |
20
f39963e96ca1
Rework of the help string code
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
19
diff
changeset
|
97 False), |
17
1c769ae67af4
Implemented the zxcvb xmms controls
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
16
diff
changeset
|
98 "b": |
1c769ae67af4
Implemented the zxcvb xmms controls
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
16
diff
changeset
|
99 (control.cmd_next, |
20
f39963e96ca1
Rework of the help string code
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
19
diff
changeset
|
100 False), |
f39963e96ca1
Rework of the help string code
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
19
diff
changeset
|
101 # the following commands are there to make the |
f39963e96ca1
Rework of the help string code
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
19
diff
changeset
|
102 # experience more like ed/ex/vi/vim |
19
a3385f616b53
Implemented the run shell command command
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
17
diff
changeset
|
103 "!(.*)": |
a3385f616b53
Implemented the run shell command command
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
17
diff
changeset
|
104 (control.cmd_shell, |
20
f39963e96ca1
Rework of the help string code
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
19
diff
changeset
|
105 False), |
23
2efd6bbb1694
Implemented location command ('=')
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
21
diff
changeset
|
106 "=": |
2efd6bbb1694
Implemented location command ('=')
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
21
diff
changeset
|
107 (control.cmd_location, |
2efd6bbb1694
Implemented location command ('=')
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
21
diff
changeset
|
108 False), |
8
79340745c952
Reimplemented enqueuing & quit properly, implemented list and number commands
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
7
diff
changeset
|
109 } |
79340745c952
Reimplemented enqueuing & quit properly, implemented list and number commands
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
7
diff
changeset
|
110 |
12
b5370c42288b
Code refactoring & implemented help command
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
11
diff
changeset
|
111 def __cmd(self, txt): |
25
f77d09bc7dec
Empty command does nothing
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
23
diff
changeset
|
112 if not txt: |
f77d09bc7dec
Empty command does nothing
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
23
diff
changeset
|
113 return |
f77d09bc7dec
Empty command does nothing
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
23
diff
changeset
|
114 |
12
b5370c42288b
Code refactoring & implemented help command
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
11
diff
changeset
|
115 range_str = "(%|\\$|(\\$|[0-9]+){,1}(,(\\$|[0-9]+)){,1}){,1}" |
8
79340745c952
Reimplemented enqueuing & quit properly, implemented list and number commands
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
7
diff
changeset
|
116 |
12
b5370c42288b
Code refactoring & implemented help command
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
11
diff
changeset
|
117 cmdtable = self.cmdtable |
8
79340745c952
Reimplemented enqueuing & quit properly, implemented list and number commands
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
7
diff
changeset
|
118 |
79340745c952
Reimplemented enqueuing & quit properly, implemented list and number commands
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
7
diff
changeset
|
119 for c in cmdtable: |
79340745c952
Reimplemented enqueuing & quit properly, implemented list and number commands
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
7
diff
changeset
|
120 rstr = "^" |
79340745c952
Reimplemented enqueuing & quit properly, implemented list and number commands
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
7
diff
changeset
|
121 rstr += (cmdtable[c][1] and range_str or "") |
79340745c952
Reimplemented enqueuing & quit properly, implemented list and number commands
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
7
diff
changeset
|
122 rstr += c |
79340745c952
Reimplemented enqueuing & quit properly, implemented list and number commands
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
7
diff
changeset
|
123 rstr += "$" |
79340745c952
Reimplemented enqueuing & quit properly, implemented list and number commands
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
7
diff
changeset
|
124 |
79340745c952
Reimplemented enqueuing & quit properly, implemented list and number commands
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
7
diff
changeset
|
125 m = re.search(rstr, txt) |
79340745c952
Reimplemented enqueuing & quit properly, implemented list and number commands
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
7
diff
changeset
|
126 if not m: |
79340745c952
Reimplemented enqueuing & quit properly, implemented list and number commands
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
7
diff
changeset
|
127 continue |
79340745c952
Reimplemented enqueuing & quit properly, implemented list and number commands
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
7
diff
changeset
|
128 |
79340745c952
Reimplemented enqueuing & quit properly, implemented list and number commands
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
7
diff
changeset
|
129 gr = m.groups() |
79340745c952
Reimplemented enqueuing & quit properly, implemented list and number commands
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
7
diff
changeset
|
130 |
79340745c952
Reimplemented enqueuing & quit properly, implemented list and number commands
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
7
diff
changeset
|
131 start = end = -1 |
79340745c952
Reimplemented enqueuing & quit properly, implemented list and number commands
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
7
diff
changeset
|
132 if cmdtable[c][1]: |
79340745c952
Reimplemented enqueuing & quit properly, implemented list and number commands
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
7
diff
changeset
|
133 # parse range info |
79340745c952
Reimplemented enqueuing & quit properly, implemented list and number commands
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
7
diff
changeset
|
134 |
79340745c952
Reimplemented enqueuing & quit properly, implemented list and number commands
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
7
diff
changeset
|
135 if gr[3]: |
79340745c952
Reimplemented enqueuing & quit properly, implemented list and number commands
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
7
diff
changeset
|
136 # we got a 'm,n' |
79340745c952
Reimplemented enqueuing & quit properly, implemented list and number commands
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
7
diff
changeset
|
137 start = (gr[1] or '') |
79340745c952
Reimplemented enqueuing & quit properly, implemented list and number commands
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
7
diff
changeset
|
138 end = gr[3] |
79340745c952
Reimplemented enqueuing & quit properly, implemented list and number commands
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
7
diff
changeset
|
139 elif gr[1]: |
79340745c952
Reimplemented enqueuing & quit properly, implemented list and number commands
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
7
diff
changeset
|
140 # we got a 'n' |
79340745c952
Reimplemented enqueuing & quit properly, implemented list and number commands
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
7
diff
changeset
|
141 start = gr[1] |
79340745c952
Reimplemented enqueuing & quit properly, implemented list and number commands
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
7
diff
changeset
|
142 end = gr[1] |
79340745c952
Reimplemented enqueuing & quit properly, implemented list and number commands
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
7
diff
changeset
|
143 elif gr[0]: |
79340745c952
Reimplemented enqueuing & quit properly, implemented list and number commands
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
7
diff
changeset
|
144 # we got a '$' or '%' |
79340745c952
Reimplemented enqueuing & quit properly, implemented list and number commands
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
7
diff
changeset
|
145 start = (gr[0] == '%' and '1' or '$') |
79340745c952
Reimplemented enqueuing & quit properly, implemented list and number commands
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
7
diff
changeset
|
146 end = '$' |
79340745c952
Reimplemented enqueuing & quit properly, implemented list and number commands
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
7
diff
changeset
|
147 else: |
79340745c952
Reimplemented enqueuing & quit properly, implemented list and number commands
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
7
diff
changeset
|
148 # no range specified |
79340745c952
Reimplemented enqueuing & quit properly, implemented list and number commands
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
7
diff
changeset
|
149 start = '1' |
79340745c952
Reimplemented enqueuing & quit properly, implemented list and number commands
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
7
diff
changeset
|
150 end = '1' |
79340745c952
Reimplemented enqueuing & quit properly, implemented list and number commands
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
7
diff
changeset
|
151 |
12
b5370c42288b
Code refactoring & implemented help command
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
11
diff
changeset
|
152 start = util.special2int(start) |
b5370c42288b
Code refactoring & implemented help command
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
11
diff
changeset
|
153 end = util.special2int(end) |
8
79340745c952
Reimplemented enqueuing & quit properly, implemented list and number commands
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
7
diff
changeset
|
154 |
79340745c952
Reimplemented enqueuing & quit properly, implemented list and number commands
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
7
diff
changeset
|
155 gr = list(gr) |
79340745c952
Reimplemented enqueuing & quit properly, implemented list and number commands
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
7
diff
changeset
|
156 gr.pop(0) |
79340745c952
Reimplemented enqueuing & quit properly, implemented list and number commands
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
7
diff
changeset
|
157 gr.pop(0) |
79340745c952
Reimplemented enqueuing & quit properly, implemented list and number commands
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
7
diff
changeset
|
158 gr.pop(0) |
79340745c952
Reimplemented enqueuing & quit properly, implemented list and number commands
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
7
diff
changeset
|
159 gr.pop(0) |
12
b5370c42288b
Code refactoring & implemented help command
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
11
diff
changeset
|
160 |
b5370c42288b
Code refactoring & implemented help command
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
11
diff
changeset
|
161 gr = list(gr) |
b5370c42288b
Code refactoring & implemented help command
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
11
diff
changeset
|
162 gr.append(self.cmdtable) |
8
79340745c952
Reimplemented enqueuing & quit properly, implemented list and number commands
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
7
diff
changeset
|
163 |
79340745c952
Reimplemented enqueuing & quit properly, implemented list and number commands
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
7
diff
changeset
|
164 try: |
79340745c952
Reimplemented enqueuing & quit properly, implemented list and number commands
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
7
diff
changeset
|
165 cmdtable[c][0](self, start, end, gr) |
79340745c952
Reimplemented enqueuing & quit properly, implemented list and number commands
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
7
diff
changeset
|
166 except ValueError: |
79340745c952
Reimplemented enqueuing & quit properly, implemented list and number commands
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
7
diff
changeset
|
167 print "Invalid argument/value" |
79340745c952
Reimplemented enqueuing & quit properly, implemented list and number commands
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
7
diff
changeset
|
168 return |
79340745c952
Reimplemented enqueuing & quit properly, implemented list and number commands
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
7
diff
changeset
|
169 |
79340745c952
Reimplemented enqueuing & quit properly, implemented list and number commands
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
7
diff
changeset
|
170 print "Invalid command \"%s\"" % (txt,) |
5
187453f856a7
Added a ex-like interface supporting a goto line syntax to enqueue a song
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
3
diff
changeset
|
171 |
15
ae3451bedeb6
Implemented playlist searching
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
13
diff
changeset
|
172 def search(self, lid, regexp): |
ae3451bedeb6
Implemented playlist searching
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
13
diff
changeset
|
173 print "Seaching list %d for '%s':" % (lid, regexp) |
ae3451bedeb6
Implemented playlist searching
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
13
diff
changeset
|
174 for song in self.lists[lid].search(regexp): |
ae3451bedeb6
Implemented playlist searching
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
13
diff
changeset
|
175 idx = self.lists[lid].index(song)+1 |
ae3451bedeb6
Implemented playlist searching
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
13
diff
changeset
|
176 print "%d. %s" % (idx, str(song)) |
ae3451bedeb6
Implemented playlist searching
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
13
diff
changeset
|
177 |
3
dd00b69169c6
Created initial ui thread code, fixed up playlist code
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
178 def run(self): |
30
860c891de6bb
Remove lots of xmms-related code & get ready to make the whole program a
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
25
diff
changeset
|
179 while not self.play.shutdown: |
5
187453f856a7
Added a ex-like interface supporting a goto line syntax to enqueue a song
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
3
diff
changeset
|
180 tmp = sys.stdin.readline().strip() |
187453f856a7
Added a ex-like interface supporting a goto line syntax to enqueue a song
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
3
diff
changeset
|
181 |
7
f87b969fa973
Little cleanup; change of plans - try to make it more like ed first
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
6
diff
changeset
|
182 if tmp.startswith("/"): |
f87b969fa973
Little cleanup; change of plans - try to make it more like ed first
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
6
diff
changeset
|
183 # '/ABC' - searching |
15
ae3451bedeb6
Implemented playlist searching
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
13
diff
changeset
|
184 self.search(playlist.LIST_PRIO, tmp[1:]) |
ae3451bedeb6
Implemented playlist searching
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
13
diff
changeset
|
185 self.search(playlist.LIST_DEFAULT, tmp[1:]) |
7
f87b969fa973
Little cleanup; change of plans - try to make it more like ed first
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
6
diff
changeset
|
186 else: |
8
79340745c952
Reimplemented enqueuing & quit properly, implemented list and number commands
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
7
diff
changeset
|
187 # 'ABC' - commands |
79340745c952
Reimplemented enqueuing & quit properly, implemented list and number commands
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
7
diff
changeset
|
188 self.__cmd(tmp) |
7
f87b969fa973
Little cleanup; change of plans - try to make it more like ed first
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
6
diff
changeset
|
189 |