Test commit
[couchpytato.git] / playlist.py
blob66f5ad1588b41a45c1e8fb13ce122096b1852060
1 import os, sys, random, cfg
3 class Playlist:
4 def __init__(self):
5 sound = __import__(cfg.cf['sound'])
6 self.tracks = []
7 self.pos = 0
8 self.out = sound.Music()
9 self.playlistfile = os.path.join(sys.path[0], '.lastplayed.lst')
11 def isplaying(self):
12 return self.out.isplaying()
14 def play(self):
15 if self.tracks:
16 if self.out.play(self.tracks[self.pos]):
17 self.save()
18 else:
19 if len(self.tracks) != 1:
20 self.tracks.remove(self.tracks[self.pos])
21 self.play()
22 else:
23 self.stop()
25 def pause(self):
26 if self.isplaying:
27 self.out.pause()
29 def playpause(self):
30 if self.out.paused:
31 self.out.play()
32 else:
33 self.out.pause()
34 return self.out.paused
36 def time(self):
37 if self.out.time():
38 return self.out.time()
39 else:
40 return ' '
42 def track(self, split=False, frompos=0):
43 txt = None
44 if len(self.tracks)>0:
45 if self.pos+frompos > len(self.tracks)-1:
46 frompos = frompos -len(self.tracks)
47 txt = self.tracks[self.pos+frompos]
48 if split:
49 trash, txt = os.path.split(txt)
50 txt, trash = os.path.splitext(txt)
51 return txt
53 def stop(self):
54 self.tracks = []
55 self.pos = 0
56 if self.out.isplaying():
57 self.out.playing = False
58 self.out.stop()
59 if os.path.isfile(self.playlistfile):
60 try:
61 os.unlink(self.playlistfile)
62 except OSError:
63 pass
65 def next(self):
66 if self.tracks:
67 if self.pos == len(self.tracks) - 1:
68 self.pos = 0
69 else:
70 self.pos = self.pos + 1
71 self.play()
73 def prev(self):
74 if self.tracks:
75 if self.pos == 0:
76 self.pos = len(self.tracks) - 1
77 else:
78 self.pos = self.pos - 1
79 self.play()
81 def add(self, name):
82 self.tracks.append(name)
84 def add_dir(self, name, filetypes, selected=None, keep=False):
85 old_tracks = self.tracks
86 if keep == False:
87 self.tracks = []
88 self.pos = 0
89 inp = os.listdir(name)
90 for line in inp:
91 (shortname, ext) = os.path.splitext(line)
92 for lin in filetypes:
93 if ext[1:] == lin:
94 self.tracks.append(os.path.join(name, line))
95 break
96 self.tracks.sort(key=str.lower)
97 if self.tracks != [] and keep == False:
98 if selected:
99 self.pos=selected
100 if self.out.isplaying():
101 self.out.stop()
102 self.play()
103 else:
104 self.tracks = old_tracks
106 def super_add(self, name, filetypes, keep=False):
107 old_tracks = self.tracks
108 if keep == False:
109 self.tracks = []
110 self.pos = 0
111 sadd = Superadd(name, filetypes)
112 if sadd.files != [] and keep == False:
113 self.tracks = sadd.files
114 if self.out.isplaying():
115 self.out.stop()
116 self.play()
117 else:
118 self.tracks = old_tracks
120 def shuffle(self):
121 if self.tracks:
122 self.out.stop()
123 random.shuffle(self.tracks)
124 self.pos = 0
125 self.play()
127 def save(self):
128 if self.tracks:
129 out_file = open(self.playlistfile,'w')
130 out_file.write(str(self.pos) + '\n')
131 for file in self.tracks:
132 try:
133 out_file.write(file + '\n')
134 except:
135 pass
136 out_file.close()
138 def load(self, file=None):
139 if file == None:
140 file = self.playlistfile
141 if os.path.isfile(file):
142 in_file = open(file,'r')
143 self.tracks = []
144 self.pos = 0
145 i = 0
146 for line in in_file:
147 if i == 0 and file == self.playlistfile:
148 self.pos = int(line)
149 elif line[1] != '#':
150 if os.path.isfile(line[:-1]):
151 self.tracks.append(str(line[:-1]))
152 i += 1
153 if self.tracks:
154 self.play()
156 class Superadd:
157 def __init__(self, path, ft=None):
158 self.files = []
159 try:
160 self.searchdir(path, ft)
161 except:
162 pass
163 def searchdir(self, path, ft=None):
164 for line in os.listdir(path):
165 if os.path.isdir(os.path.join(path,line)):
166 self.searchdir(os.path.join(path,line), ft)
167 else:
168 if ft:
169 for ext in ft:
170 (shortname, ex) = os.path.splitext(line)
171 if ex[1:] == ext:
172 self.files.append(os.path.join(path,line))
173 else:
174 self.files.append(os.path.join(path,line))
175 return self.files.sort(key=str.lower)
177 PLAYLIST = Playlist()