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
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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