Mercurial > vixm
annotate vixm/ui.py @ 35:a7d370f326df master
Implement song playing
author | Josef "Jeff" Sipek <jeffpc@josefsipek.net> |
---|---|
date | Fri, 03 Nov 2006 23:49:29 -0500 |
parents | 8028f2addb00 |
children | 06b5a7db3d19 |
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 |
8
79340745c952
Reimplemented enqueuing & quit properly, implemented list and number commands
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
7
diff
changeset
|
9 import time, 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 |
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
|
12 import playlist, song, util, control, player |
3
dd00b69169c6
Created initial ui thread code, fixed up playlist code
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
13 |
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
|
14 def run(filename): |
3
dd00b69169c6
Created initial ui thread code, fixed up playlist code
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
15 """ this is where we start execution """ |
dd00b69169c6
Created initial ui thread code, fixed up playlist code
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
16 |
dd00b69169c6
Created initial ui thread code, fixed up playlist code
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
17 # first, let's create the two playlists |
dd00b69169c6
Created initial ui thread code, fixed up playlist code
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
18 print "Creating playlists..." |
dd00b69169c6
Created initial ui thread code, fixed up playlist code
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
19 lists = {} |
dd00b69169c6
Created initial ui thread code, fixed up playlist code
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
20 lists[playlist.LIST_PRIO] = playlist.playlist() |
dd00b69169c6
Created initial ui thread code, fixed up playlist code
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
21 lists[playlist.LIST_DEFAULT] = playlist.playlist(allowrandom=True) |
dd00b69169c6
Created initial ui thread code, fixed up playlist code
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
22 |
dd00b69169c6
Created initial ui thread code, fixed up playlist code
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
23 # read in the info for all the songs in XMMS's playlist |
dd00b69169c6
Created initial ui thread code, fixed up playlist code
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
24 print "Loading songs from XMMS's playlist..." |
dd00b69169c6
Created initial ui thread code, fixed up playlist code
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
25 songs = [] |
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
|
26 idx = 0 |
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
|
27 for l in open(filename, "r").readlines(): |
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
|
28 if l[0] == "#": |
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
|
29 continue |
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
|
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
|
31 s = song.song(l[:-1], idx) |
3
dd00b69169c6
Created initial ui thread code, fixed up playlist code
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
32 lists[playlist.LIST_DEFAULT].enqueue(s) |
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
|
33 |
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
|
34 idx += 1 |
3
dd00b69169c6
Created initial ui thread code, fixed up playlist code
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
35 |
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
|
36 print "Instanciating player thread..." |
35
a7d370f326df
Implement song playing
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
34
diff
changeset
|
37 play = player.playerThread() |
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
|
38 play.start() |
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
|
39 |
3
dd00b69169c6
Created initial ui thread code, fixed up playlist code
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
40 print "Instanciating ui thread..." |
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
|
41 ui = uiThread(play, lists) |
3
dd00b69169c6
Created initial ui thread code, fixed up playlist code
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
42 ui.start() |
dd00b69169c6
Created initial ui thread code, fixed up playlist code
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
43 |
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
|
44 while not play.shutdown: |
9
eaa800169f5b
Hooked up the playlists to control xmms!
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
8
diff
changeset
|
45 # check which song we are playing now |
32
f97eb9f0c207
Add random song selection for default queue
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
30
diff
changeset
|
46 if not play.playing: |
11
50584a5c300e
Fixed up code to make more sense
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
9
diff
changeset
|
47 try: |
50584a5c300e
Fixed up code to make more sense
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
9
diff
changeset
|
48 # pop song off the PRIO queue |
50584a5c300e
Fixed up code to make more sense
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
9
diff
changeset
|
49 next = lists[playlist.LIST_PRIO].pop() |
50584a5c300e
Fixed up code to make more sense
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
9
diff
changeset
|
50 except IndexError: |
50584a5c300e
Fixed up code to make more sense
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
9
diff
changeset
|
51 # no song to pop |
32
f97eb9f0c207
Add random song selection for default queue
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
30
diff
changeset
|
52 next = lists[playlist.LIST_DEFAULT].next() |
11
50584a5c300e
Fixed up code to make more sense
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
9
diff
changeset
|
53 pass |
50584a5c300e
Fixed up code to make more sense
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
9
diff
changeset
|
54 except ValueError: |
50584a5c300e
Fixed up code to make more sense
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
9
diff
changeset
|
55 print "WTF is going on?!" |
9
eaa800169f5b
Hooked up the playlists to control xmms!
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
8
diff
changeset
|
56 |
32
f97eb9f0c207
Add random song selection for default queue
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
30
diff
changeset
|
57 play.play(next) |
9
eaa800169f5b
Hooked up the playlists to control xmms!
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
8
diff
changeset
|
58 |
eaa800169f5b
Hooked up the playlists to control xmms!
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
8
diff
changeset
|
59 # sleep |
eaa800169f5b
Hooked up the playlists to control xmms!
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
8
diff
changeset
|
60 time.sleep(0.5) |
3
dd00b69169c6
Created initial ui thread code, fixed up playlist code
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
61 |
dd00b69169c6
Created initial ui thread code, fixed up playlist code
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
62 class uiThread(Thread): |
dd00b69169c6
Created initial ui thread code, fixed up playlist code
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
63 """ 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
|
64 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
|
65 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
|
66 Thread.__init__(self) |
dd00b69169c6
Created initial ui thread code, fixed up playlist code
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
67 |
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
|
68 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
|
69 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
|
70 |
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
|
71 # 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
|
72 # 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
|
73 # 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
|
74 # 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
|
75 # '!' 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
|
76 # |
f87b969fa973
Little cleanup; change of plans - try to make it more like ed first
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
6
diff
changeset
|
77 # 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
|
78 # 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
|
79 # 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
|
80 # 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
|
81 # 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
|
82 # 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
|
83 # 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
|
84 # |
f87b969fa973
Little cleanup; change of plans - try to make it more like ed first
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
6
diff
changeset
|
85 # 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
|
86 # 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
|
87 # 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
|
88 # 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
|
89 # 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
|
90 # |
f87b969fa973
Little cleanup; change of plans - try to make it more like ed first
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
6
diff
changeset
|
91 # 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
|
92 # 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
|
93 # 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
|
94 # 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
|
95 # |
16
447b47ab396f
Implemented dequeue the proper way; Cleaned up stupidity in enqueue code
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
15
diff
changeset
|
96 # 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
|
97 # 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
|
98 # 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
|
99 # |
f87b969fa973
Little cleanup; change of plans - try to make it more like ed first
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
6
diff
changeset
|
100 # 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
|
101 # '' 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
|
102 # '%' 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
|
103 # '$' 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
|
104 # '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
|
105 # '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
|
106 # 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
|
107 # 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
|
108 # '' or '$'. |
12
b5370c42288b
Code refactoring & implemented help command
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
11
diff
changeset
|
109 # |
8
79340745c952
Reimplemented enqueuing & quit properly, implemented list and number commands
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
7
diff
changeset
|
110 # command table format: |
79340745c952
Reimplemented enqueuing & quit properly, implemented list and number commands
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
7
diff
changeset
|
111 # "command regexp": |
12
b5370c42288b
Code refactoring & implemented help command
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
11
diff
changeset
|
112 # (function to call, range allowed, help str) |
b5370c42288b
Code refactoring & implemented help command
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
11
diff
changeset
|
113 self.cmdtable = { |
8
79340745c952
Reimplemented enqueuing & quit properly, implemented list and number commands
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
7
diff
changeset
|
114 "q([!]){,1}": |
13
2ecc611d198f
Added more helpful strings for the help strings
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
12
diff
changeset
|
115 (control.cmd_quit, |
20
f39963e96ca1
Rework of the help string code
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
19
diff
changeset
|
116 False), |
f39963e96ca1
Rework of the help string code
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
19
diff
changeset
|
117 "n( *([0-9]+)){,1}": |
13
2ecc611d198f
Added more helpful strings for the help strings
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
12
diff
changeset
|
118 (control.cmd_number, |
20
f39963e96ca1
Rework of the help string code
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
19
diff
changeset
|
119 True), |
f39963e96ca1
Rework of the help string code
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
19
diff
changeset
|
120 "l( *([0-9]+)){,1}": |
13
2ecc611d198f
Added more helpful strings for the help strings
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
12
diff
changeset
|
121 (control.cmd_list, |
20
f39963e96ca1
Rework of the help string code
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
19
diff
changeset
|
122 True), |
f39963e96ca1
Rework of the help string code
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
19
diff
changeset
|
123 "a *([0-9]+)": |
13
2ecc611d198f
Added more helpful strings for the help strings
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
12
diff
changeset
|
124 (control.cmd_enqueue, |
20
f39963e96ca1
Rework of the help string code
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
19
diff
changeset
|
125 False), |
16
447b47ab396f
Implemented dequeue the proper way; Cleaned up stupidity in enqueue code
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
15
diff
changeset
|
126 "d": |
13
2ecc611d198f
Added more helpful strings for the help strings
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
12
diff
changeset
|
127 (control.cmd_dequeue, |
20
f39963e96ca1
Rework of the help string code
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
19
diff
changeset
|
128 True), |
9
eaa800169f5b
Hooked up the playlists to control xmms!
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
8
diff
changeset
|
129 "h": |
13
2ecc611d198f
Added more helpful strings for the help strings
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
12
diff
changeset
|
130 (control.cmd_help, |
20
f39963e96ca1
Rework of the help string code
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
19
diff
changeset
|
131 False), |
17
1c769ae67af4
Implemented the zxcvb xmms controls
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
16
diff
changeset
|
132 # 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
|
133 # 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
|
134 "z": |
1c769ae67af4
Implemented the zxcvb xmms controls
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
16
diff
changeset
|
135 (control.cmd_prev, |
20
f39963e96ca1
Rework of the help string code
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
19
diff
changeset
|
136 False), |
17
1c769ae67af4
Implemented the zxcvb xmms controls
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
16
diff
changeset
|
137 "x": |
1c769ae67af4
Implemented the zxcvb xmms controls
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
16
diff
changeset
|
138 (control.cmd_play, |
20
f39963e96ca1
Rework of the help string code
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
19
diff
changeset
|
139 False), |
17
1c769ae67af4
Implemented the zxcvb xmms controls
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
16
diff
changeset
|
140 "c": |
1c769ae67af4
Implemented the zxcvb xmms controls
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
16
diff
changeset
|
141 (control.cmd_pause, |
20
f39963e96ca1
Rework of the help string code
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
19
diff
changeset
|
142 False), |
17
1c769ae67af4
Implemented the zxcvb xmms controls
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
16
diff
changeset
|
143 "v": |
1c769ae67af4
Implemented the zxcvb xmms controls
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
16
diff
changeset
|
144 (control.cmd_stop, |
20
f39963e96ca1
Rework of the help string code
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
19
diff
changeset
|
145 False), |
17
1c769ae67af4
Implemented the zxcvb xmms controls
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
16
diff
changeset
|
146 "b": |
1c769ae67af4
Implemented the zxcvb xmms controls
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
16
diff
changeset
|
147 (control.cmd_next, |
20
f39963e96ca1
Rework of the help string code
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
19
diff
changeset
|
148 False), |
f39963e96ca1
Rework of the help string code
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
19
diff
changeset
|
149 # 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
|
150 # 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
|
151 "!(.*)": |
a3385f616b53
Implemented the run shell command command
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
17
diff
changeset
|
152 (control.cmd_shell, |
20
f39963e96ca1
Rework of the help string code
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
19
diff
changeset
|
153 False), |
23
2efd6bbb1694
Implemented location command ('=')
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
21
diff
changeset
|
154 "=": |
2efd6bbb1694
Implemented location command ('=')
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
21
diff
changeset
|
155 (control.cmd_location, |
2efd6bbb1694
Implemented location command ('=')
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
21
diff
changeset
|
156 False), |
8
79340745c952
Reimplemented enqueuing & quit properly, implemented list and number commands
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
7
diff
changeset
|
157 } |
79340745c952
Reimplemented enqueuing & quit properly, implemented list and number commands
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
7
diff
changeset
|
158 |
12
b5370c42288b
Code refactoring & implemented help command
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
11
diff
changeset
|
159 def __cmd(self, txt): |
25
f77d09bc7dec
Empty command does nothing
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
23
diff
changeset
|
160 if not txt: |
f77d09bc7dec
Empty command does nothing
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
23
diff
changeset
|
161 return |
f77d09bc7dec
Empty command does nothing
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
23
diff
changeset
|
162 |
12
b5370c42288b
Code refactoring & implemented help command
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
11
diff
changeset
|
163 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
|
164 |
12
b5370c42288b
Code refactoring & implemented help command
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
11
diff
changeset
|
165 cmdtable = self.cmdtable |
8
79340745c952
Reimplemented enqueuing & quit properly, implemented list and number commands
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
7
diff
changeset
|
166 |
79340745c952
Reimplemented enqueuing & quit properly, implemented list and number commands
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
7
diff
changeset
|
167 for c in cmdtable: |
79340745c952
Reimplemented enqueuing & quit properly, implemented list and number commands
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
7
diff
changeset
|
168 rstr = "^" |
79340745c952
Reimplemented enqueuing & quit properly, implemented list and number commands
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
7
diff
changeset
|
169 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
|
170 rstr += c |
79340745c952
Reimplemented enqueuing & quit properly, implemented list and number commands
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
7
diff
changeset
|
171 rstr += "$" |
79340745c952
Reimplemented enqueuing & quit properly, implemented list and number commands
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
7
diff
changeset
|
172 |
79340745c952
Reimplemented enqueuing & quit properly, implemented list and number commands
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
7
diff
changeset
|
173 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
|
174 if not m: |
79340745c952
Reimplemented enqueuing & quit properly, implemented list and number commands
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
7
diff
changeset
|
175 continue |
79340745c952
Reimplemented enqueuing & quit properly, implemented list and number commands
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
7
diff
changeset
|
176 |
79340745c952
Reimplemented enqueuing & quit properly, implemented list and number commands
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
7
diff
changeset
|
177 gr = m.groups() |
79340745c952
Reimplemented enqueuing & quit properly, implemented list and number commands
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
7
diff
changeset
|
178 |
79340745c952
Reimplemented enqueuing & quit properly, implemented list and number commands
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
7
diff
changeset
|
179 start = end = -1 |
79340745c952
Reimplemented enqueuing & quit properly, implemented list and number commands
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
7
diff
changeset
|
180 if cmdtable[c][1]: |
79340745c952
Reimplemented enqueuing & quit properly, implemented list and number commands
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
7
diff
changeset
|
181 # parse range info |
79340745c952
Reimplemented enqueuing & quit properly, implemented list and number commands
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
7
diff
changeset
|
182 |
79340745c952
Reimplemented enqueuing & quit properly, implemented list and number commands
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
7
diff
changeset
|
183 if gr[3]: |
79340745c952
Reimplemented enqueuing & quit properly, implemented list and number commands
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
7
diff
changeset
|
184 # 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
|
185 start = (gr[1] or '') |
79340745c952
Reimplemented enqueuing & quit properly, implemented list and number commands
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
7
diff
changeset
|
186 end = gr[3] |
79340745c952
Reimplemented enqueuing & quit properly, implemented list and number commands
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
7
diff
changeset
|
187 elif gr[1]: |
79340745c952
Reimplemented enqueuing & quit properly, implemented list and number commands
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
7
diff
changeset
|
188 # we got a 'n' |
79340745c952
Reimplemented enqueuing & quit properly, implemented list and number commands
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
7
diff
changeset
|
189 start = gr[1] |
79340745c952
Reimplemented enqueuing & quit properly, implemented list and number commands
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
7
diff
changeset
|
190 end = gr[1] |
79340745c952
Reimplemented enqueuing & quit properly, implemented list and number commands
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
7
diff
changeset
|
191 elif gr[0]: |
79340745c952
Reimplemented enqueuing & quit properly, implemented list and number commands
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
7
diff
changeset
|
192 # we got a '$' or '%' |
79340745c952
Reimplemented enqueuing & quit properly, implemented list and number commands
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
7
diff
changeset
|
193 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
|
194 end = '$' |
79340745c952
Reimplemented enqueuing & quit properly, implemented list and number commands
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
7
diff
changeset
|
195 else: |
79340745c952
Reimplemented enqueuing & quit properly, implemented list and number commands
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
7
diff
changeset
|
196 # no range specified |
79340745c952
Reimplemented enqueuing & quit properly, implemented list and number commands
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
7
diff
changeset
|
197 start = '1' |
79340745c952
Reimplemented enqueuing & quit properly, implemented list and number commands
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
7
diff
changeset
|
198 end = '1' |
79340745c952
Reimplemented enqueuing & quit properly, implemented list and number commands
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
7
diff
changeset
|
199 |
12
b5370c42288b
Code refactoring & implemented help command
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
11
diff
changeset
|
200 start = util.special2int(start) |
b5370c42288b
Code refactoring & implemented help command
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
11
diff
changeset
|
201 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
|
202 |
79340745c952
Reimplemented enqueuing & quit properly, implemented list and number commands
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
7
diff
changeset
|
203 gr = list(gr) |
79340745c952
Reimplemented enqueuing & quit properly, implemented list and number commands
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
7
diff
changeset
|
204 gr.pop(0) |
79340745c952
Reimplemented enqueuing & quit properly, implemented list and number commands
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
7
diff
changeset
|
205 gr.pop(0) |
79340745c952
Reimplemented enqueuing & quit properly, implemented list and number commands
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
7
diff
changeset
|
206 gr.pop(0) |
79340745c952
Reimplemented enqueuing & quit properly, implemented list and number commands
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
7
diff
changeset
|
207 gr.pop(0) |
12
b5370c42288b
Code refactoring & implemented help command
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
11
diff
changeset
|
208 |
b5370c42288b
Code refactoring & implemented help command
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
11
diff
changeset
|
209 gr = list(gr) |
b5370c42288b
Code refactoring & implemented help command
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
11
diff
changeset
|
210 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
|
211 |
79340745c952
Reimplemented enqueuing & quit properly, implemented list and number commands
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
7
diff
changeset
|
212 try: |
79340745c952
Reimplemented enqueuing & quit properly, implemented list and number commands
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
7
diff
changeset
|
213 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
|
214 except ValueError: |
79340745c952
Reimplemented enqueuing & quit properly, implemented list and number commands
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
7
diff
changeset
|
215 print "Invalid argument/value" |
79340745c952
Reimplemented enqueuing & quit properly, implemented list and number commands
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
7
diff
changeset
|
216 return |
79340745c952
Reimplemented enqueuing & quit properly, implemented list and number commands
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
7
diff
changeset
|
217 |
79340745c952
Reimplemented enqueuing & quit properly, implemented list and number commands
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
7
diff
changeset
|
218 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
|
219 |
15
ae3451bedeb6
Implemented playlist searching
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
13
diff
changeset
|
220 def search(self, lid, regexp): |
ae3451bedeb6
Implemented playlist searching
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
13
diff
changeset
|
221 print "Seaching list %d for '%s':" % (lid, regexp) |
ae3451bedeb6
Implemented playlist searching
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
13
diff
changeset
|
222 for song in self.lists[lid].search(regexp): |
ae3451bedeb6
Implemented playlist searching
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
13
diff
changeset
|
223 idx = self.lists[lid].index(song)+1 |
ae3451bedeb6
Implemented playlist searching
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
13
diff
changeset
|
224 print "%d. %s" % (idx, str(song)) |
ae3451bedeb6
Implemented playlist searching
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
13
diff
changeset
|
225 |
3
dd00b69169c6
Created initial ui thread code, fixed up playlist code
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
226 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
|
227 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
|
228 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
|
229 |
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
|
230 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
|
231 # '/ABC' - searching |
15
ae3451bedeb6
Implemented playlist searching
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
13
diff
changeset
|
232 self.search(playlist.LIST_PRIO, tmp[1:]) |
ae3451bedeb6
Implemented playlist searching
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
13
diff
changeset
|
233 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
|
234 else: |
8
79340745c952
Reimplemented enqueuing & quit properly, implemented list and number commands
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
7
diff
changeset
|
235 # 'ABC' - commands |
79340745c952
Reimplemented enqueuing & quit properly, implemented list and number commands
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
7
diff
changeset
|
236 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
|
237 |