annotate vixm/ui.py @ 42:bc6db55448e1 pure

statistics engine
author Josef "Jeff" Sipek <jeffpc@josefsipek.net>
date Sun, 05 Nov 2006 19:25:30 -0500
parents 06b5a7db3d19
children 2bf81d95246a
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:
40
06b5a7db3d19 Some cleanup, got to next song implemented
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents: 35
diff changeset
47 play.play_next(lists)
9
eaa800169f5b Hooked up the playlists to control xmms!
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents: 8
diff changeset
48
eaa800169f5b Hooked up the playlists to control xmms!
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents: 8
diff changeset
49 # sleep
eaa800169f5b Hooked up the playlists to control xmms!
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents: 8
diff changeset
50 time.sleep(0.5)
3
dd00b69169c6 Created initial ui thread code, fixed up playlist code
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
diff changeset
51
dd00b69169c6 Created initial ui thread code, fixed up playlist code
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
diff changeset
52 class uiThread(Thread):
dd00b69169c6 Created initial ui thread code, fixed up playlist code
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
diff changeset
53 """ 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
54 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
55 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
56 Thread.__init__(self)
dd00b69169c6 Created initial ui thread code, fixed up playlist code
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
diff changeset
57
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
58 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
59 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
60
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
61 # 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
62 # 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
63 # 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
64 # 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
65 # '!' 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
66 #
f87b969fa973 Little cleanup; change of plans - try to make it more like ed first
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents: 6
diff changeset
67 # 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
68 # 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
69 # 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
70 # 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
71 # 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
72 # 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
73 # 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
74 #
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 # 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
76 # 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
77 # 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
78 # 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
79 # 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
80 #
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 # 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
82 # 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
83 # 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
84 # 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
85 #
16
447b47ab396f Implemented dequeue the proper way; Cleaned up stupidity in enqueue code
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents: 15
diff changeset
86 # 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
87 # 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
88 # 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
89 #
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 # 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
91 # '' 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
92 # '%' 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
93 # '$' 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
94 # '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
95 # '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
96 # 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
97 # 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
98 # '' or '$'.
12
b5370c42288b Code refactoring & implemented help command
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents: 11
diff changeset
99 #
8
79340745c952 Reimplemented enqueuing & quit properly, implemented list and number commands
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents: 7
diff changeset
100 # command table format:
79340745c952 Reimplemented enqueuing & quit properly, implemented list and number commands
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents: 7
diff changeset
101 # "command regexp":
12
b5370c42288b Code refactoring & implemented help command
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents: 11
diff changeset
102 # (function to call, range allowed, help str)
b5370c42288b Code refactoring & implemented help command
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents: 11
diff changeset
103 self.cmdtable = {
8
79340745c952 Reimplemented enqueuing & quit properly, implemented list and number commands
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents: 7
diff changeset
104 "q([!]){,1}":
13
2ecc611d198f Added more helpful strings for the help strings
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents: 12
diff changeset
105 (control.cmd_quit,
20
f39963e96ca1 Rework of the help string code
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents: 19
diff changeset
106 False),
f39963e96ca1 Rework of the help string code
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents: 19
diff changeset
107 "n( *([0-9]+)){,1}":
13
2ecc611d198f Added more helpful strings for the help strings
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents: 12
diff changeset
108 (control.cmd_number,
20
f39963e96ca1 Rework of the help string code
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents: 19
diff changeset
109 True),
f39963e96ca1 Rework of the help string code
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents: 19
diff changeset
110 "l( *([0-9]+)){,1}":
13
2ecc611d198f Added more helpful strings for the help strings
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents: 12
diff changeset
111 (control.cmd_list,
20
f39963e96ca1 Rework of the help string code
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents: 19
diff changeset
112 True),
f39963e96ca1 Rework of the help string code
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents: 19
diff changeset
113 "a *([0-9]+)":
13
2ecc611d198f Added more helpful strings for the help strings
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents: 12
diff changeset
114 (control.cmd_enqueue,
20
f39963e96ca1 Rework of the help string code
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents: 19
diff changeset
115 False),
16
447b47ab396f Implemented dequeue the proper way; Cleaned up stupidity in enqueue code
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents: 15
diff changeset
116 "d":
13
2ecc611d198f Added more helpful strings for the help strings
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents: 12
diff changeset
117 (control.cmd_dequeue,
20
f39963e96ca1 Rework of the help string code
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents: 19
diff changeset
118 True),
9
eaa800169f5b Hooked up the playlists to control xmms!
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents: 8
diff changeset
119 "h":
13
2ecc611d198f Added more helpful strings for the help strings
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents: 12
diff changeset
120 (control.cmd_help,
20
f39963e96ca1 Rework of the help string code
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents: 19
diff changeset
121 False),
17
1c769ae67af4 Implemented the zxcvb xmms controls
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents: 16
diff changeset
122 # 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
123 # 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
124 "z":
1c769ae67af4 Implemented the zxcvb xmms controls
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents: 16
diff changeset
125 (control.cmd_prev,
20
f39963e96ca1 Rework of the help string code
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents: 19
diff changeset
126 False),
17
1c769ae67af4 Implemented the zxcvb xmms controls
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents: 16
diff changeset
127 "x":
1c769ae67af4 Implemented the zxcvb xmms controls
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents: 16
diff changeset
128 (control.cmd_play,
20
f39963e96ca1 Rework of the help string code
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents: 19
diff changeset
129 False),
17
1c769ae67af4 Implemented the zxcvb xmms controls
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents: 16
diff changeset
130 "c":
1c769ae67af4 Implemented the zxcvb xmms controls
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents: 16
diff changeset
131 (control.cmd_pause,
20
f39963e96ca1 Rework of the help string code
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents: 19
diff changeset
132 False),
17
1c769ae67af4 Implemented the zxcvb xmms controls
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents: 16
diff changeset
133 "v":
1c769ae67af4 Implemented the zxcvb xmms controls
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents: 16
diff changeset
134 (control.cmd_stop,
20
f39963e96ca1 Rework of the help string code
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents: 19
diff changeset
135 False),
17
1c769ae67af4 Implemented the zxcvb xmms controls
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents: 16
diff changeset
136 "b":
1c769ae67af4 Implemented the zxcvb xmms controls
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents: 16
diff changeset
137 (control.cmd_next,
20
f39963e96ca1 Rework of the help string code
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents: 19
diff changeset
138 False),
f39963e96ca1 Rework of the help string code
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents: 19
diff changeset
139 # 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
140 # 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
141 "!(.*)":
a3385f616b53 Implemented the run shell command command
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents: 17
diff changeset
142 (control.cmd_shell,
20
f39963e96ca1 Rework of the help string code
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents: 19
diff changeset
143 False),
23
2efd6bbb1694 Implemented location command ('=')
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents: 21
diff changeset
144 "=":
2efd6bbb1694 Implemented location command ('=')
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents: 21
diff changeset
145 (control.cmd_location,
2efd6bbb1694 Implemented location command ('=')
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents: 21
diff changeset
146 False),
8
79340745c952 Reimplemented enqueuing & quit properly, implemented list and number commands
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents: 7
diff changeset
147 }
79340745c952 Reimplemented enqueuing & quit properly, implemented list and number commands
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents: 7
diff changeset
148
12
b5370c42288b Code refactoring & implemented help command
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents: 11
diff changeset
149 def __cmd(self, txt):
25
f77d09bc7dec Empty command does nothing
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents: 23
diff changeset
150 if not txt:
f77d09bc7dec Empty command does nothing
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents: 23
diff changeset
151 return
f77d09bc7dec Empty command does nothing
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents: 23
diff changeset
152
12
b5370c42288b Code refactoring & implemented help command
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents: 11
diff changeset
153 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
154
12
b5370c42288b Code refactoring & implemented help command
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents: 11
diff changeset
155 cmdtable = self.cmdtable
8
79340745c952 Reimplemented enqueuing & quit properly, implemented list and number commands
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents: 7
diff changeset
156
79340745c952 Reimplemented enqueuing & quit properly, implemented list and number commands
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents: 7
diff changeset
157 for c in cmdtable:
79340745c952 Reimplemented enqueuing & quit properly, implemented list and number commands
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents: 7
diff changeset
158 rstr = "^"
79340745c952 Reimplemented enqueuing & quit properly, implemented list and number commands
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents: 7
diff changeset
159 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
160 rstr += c
79340745c952 Reimplemented enqueuing & quit properly, implemented list and number commands
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents: 7
diff changeset
161 rstr += "$"
79340745c952 Reimplemented enqueuing & quit properly, implemented list and number commands
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents: 7
diff changeset
162
79340745c952 Reimplemented enqueuing & quit properly, implemented list and number commands
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents: 7
diff changeset
163 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
164 if not m:
79340745c952 Reimplemented enqueuing & quit properly, implemented list and number commands
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents: 7
diff changeset
165 continue
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 gr = m.groups()
79340745c952 Reimplemented enqueuing & quit properly, implemented list and number commands
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents: 7
diff changeset
168
79340745c952 Reimplemented enqueuing & quit properly, implemented list and number commands
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents: 7
diff changeset
169 start = end = -1
79340745c952 Reimplemented enqueuing & quit properly, implemented list and number commands
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents: 7
diff changeset
170 if cmdtable[c][1]:
79340745c952 Reimplemented enqueuing & quit properly, implemented list and number commands
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents: 7
diff changeset
171 # parse range info
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 if gr[3]:
79340745c952 Reimplemented enqueuing & quit properly, implemented list and number commands
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents: 7
diff changeset
174 # 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
175 start = (gr[1] or '')
79340745c952 Reimplemented enqueuing & quit properly, implemented list and number commands
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents: 7
diff changeset
176 end = gr[3]
79340745c952 Reimplemented enqueuing & quit properly, implemented list and number commands
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents: 7
diff changeset
177 elif gr[1]:
79340745c952 Reimplemented enqueuing & quit properly, implemented list and number commands
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents: 7
diff changeset
178 # we got a 'n'
79340745c952 Reimplemented enqueuing & quit properly, implemented list and number commands
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents: 7
diff changeset
179 start = gr[1]
79340745c952 Reimplemented enqueuing & quit properly, implemented list and number commands
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents: 7
diff changeset
180 end = gr[1]
79340745c952 Reimplemented enqueuing & quit properly, implemented list and number commands
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents: 7
diff changeset
181 elif gr[0]:
79340745c952 Reimplemented enqueuing & quit properly, implemented list and number commands
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents: 7
diff changeset
182 # we got a '$' or '%'
79340745c952 Reimplemented enqueuing & quit properly, implemented list and number commands
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents: 7
diff changeset
183 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
184 end = '$'
79340745c952 Reimplemented enqueuing & quit properly, implemented list and number commands
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents: 7
diff changeset
185 else:
79340745c952 Reimplemented enqueuing & quit properly, implemented list and number commands
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents: 7
diff changeset
186 # no range specified
79340745c952 Reimplemented enqueuing & quit properly, implemented list and number commands
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents: 7
diff changeset
187 start = '1'
79340745c952 Reimplemented enqueuing & quit properly, implemented list and number commands
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents: 7
diff changeset
188 end = '1'
79340745c952 Reimplemented enqueuing & quit properly, implemented list and number commands
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents: 7
diff changeset
189
12
b5370c42288b Code refactoring & implemented help command
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents: 11
diff changeset
190 start = util.special2int(start)
b5370c42288b Code refactoring & implemented help command
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents: 11
diff changeset
191 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
192
79340745c952 Reimplemented enqueuing & quit properly, implemented list and number commands
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents: 7
diff changeset
193 gr = list(gr)
79340745c952 Reimplemented enqueuing & quit properly, implemented list and number commands
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents: 7
diff changeset
194 gr.pop(0)
79340745c952 Reimplemented enqueuing & quit properly, implemented list and number commands
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents: 7
diff changeset
195 gr.pop(0)
79340745c952 Reimplemented enqueuing & quit properly, implemented list and number commands
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents: 7
diff changeset
196 gr.pop(0)
79340745c952 Reimplemented enqueuing & quit properly, implemented list and number commands
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents: 7
diff changeset
197 gr.pop(0)
12
b5370c42288b Code refactoring & implemented help command
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents: 11
diff changeset
198
b5370c42288b Code refactoring & implemented help command
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents: 11
diff changeset
199 gr = list(gr)
b5370c42288b Code refactoring & implemented help command
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents: 11
diff changeset
200 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
201
79340745c952 Reimplemented enqueuing & quit properly, implemented list and number commands
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents: 7
diff changeset
202 try:
79340745c952 Reimplemented enqueuing & quit properly, implemented list and number commands
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents: 7
diff changeset
203 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
204 except ValueError:
79340745c952 Reimplemented enqueuing & quit properly, implemented list and number commands
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents: 7
diff changeset
205 print "Invalid argument/value"
79340745c952 Reimplemented enqueuing & quit properly, implemented list and number commands
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents: 7
diff changeset
206 return
79340745c952 Reimplemented enqueuing & quit properly, implemented list and number commands
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents: 7
diff changeset
207
79340745c952 Reimplemented enqueuing & quit properly, implemented list and number commands
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents: 7
diff changeset
208 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
209
15
ae3451bedeb6 Implemented playlist searching
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents: 13
diff changeset
210 def search(self, lid, regexp):
ae3451bedeb6 Implemented playlist searching
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents: 13
diff changeset
211 print "Seaching list %d for '%s':" % (lid, regexp)
ae3451bedeb6 Implemented playlist searching
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents: 13
diff changeset
212 for song in self.lists[lid].search(regexp):
ae3451bedeb6 Implemented playlist searching
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents: 13
diff changeset
213 idx = self.lists[lid].index(song)+1
ae3451bedeb6 Implemented playlist searching
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents: 13
diff changeset
214 print "%d. %s" % (idx, str(song))
ae3451bedeb6 Implemented playlist searching
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents: 13
diff changeset
215
3
dd00b69169c6 Created initial ui thread code, fixed up playlist code
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
diff changeset
216 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
217 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
218 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
219
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
220 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
221 # '/ABC' - searching
15
ae3451bedeb6 Implemented playlist searching
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents: 13
diff changeset
222 self.search(playlist.LIST_PRIO, tmp[1:])
ae3451bedeb6 Implemented playlist searching
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents: 13
diff changeset
223 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
224 else:
8
79340745c952 Reimplemented enqueuing & quit properly, implemented list and number commands
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents: 7
diff changeset
225 # 'ABC' - commands
79340745c952 Reimplemented enqueuing & quit properly, implemented list and number commands
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents: 7
diff changeset
226 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
227