blob: 2839021e46669d10d9310d88345e88a59e8d9dd9 [file] [log] [blame]
Guido van Rossum73b715e1992-06-03 16:50:01 +00001# This file implements a class which forms an interface to the .cdplayerrc
2# file that is maintained by SGI's cdplayer program.
3#
4# Usage is as follows:
5#
6# import readcd
7# r = readcd.Readcd().init()
8# c = Cdplayer().init(r.gettrackinfo())
9#
10# Now you can use c.artist, c.title and c.track[trackno] (where trackno
11# starts at 1). When the CD is not recognized, all values will be the empty
12# string.
13# It is also possible to set the above mentioned variables to new values.
14# You can then use c.write() to write out the changed values to the
15# .cdplayerrc file.
16
17cdplayerrc = '.cdplayerrc'
18
19class Cdplayer():
20 def init(self, tracklist):
21 import string
22 self.artist = ''
23 self.title = ''
24 self.track = [None] + [''] * len(tracklist)
25 self.id = 'd' + string.zfill(len(tracklist), 2)
26 for track in tracklist:
27 start, length = track
28 self.id = self.id + string.zfill(length[0], 2) + \
29 string.zfill(length[1], 2)
30 try:
31 import posix
32 f = open(posix.environ['HOME'] + '/' + cdplayerrc, 'r')
33 except IOError:
34 return self
35 import regex
36 reg = regex.compile('^\\([^:]*\\):\t\\(.*\\)')
37 s = self.id + '.'
38 l = len(s)
39 while 1:
40 line = f.readline()
41 if line == '':
42 break
43 if line[:l] == s:
44 line = line[l:]
45 if reg.match(line) == -1:
46 print 'syntax error in ~/' + cdplayerrc
47 continue
48 name = line[reg.regs[1][0]:reg.regs[1][1]]
49 value = line[reg.regs[2][0]:reg.regs[2][1]]
50 if name == 'title':
51 self.title = value
52 elif name == 'artist':
53 self.artist = value
54 elif name[:5] == 'track':
55 trackno = string.atoi(name[6:])
56 self.track[trackno] = value
57 f.close()
58 return self
59
60 def write(self):
61 import posix
62 filename = posix.environ['HOME'] + '/' + cdplayerrc
63 try:
64 old = open(filename, 'r')
65 except IOError:
66 old = open('/dev/null', 'r')
67 new = open(filename + '.new', 'w')
68 s = self.id + '.'
69 l = len(s)
70 while 1:
71 line = old.readline()
72 if line == '':
73 break
74 if line[:l] <> s:
75 new.write(line)
76 new.write(self.id + '.title:\t' + self.title + '\n')
77 new.write(self.id + '.artist:\t' + self.artist + '\n')
78 for i in range(1, len(self.track)):
79 new.write(self.id + '.track.' + `i` + ':\t' + \
80 self.track[i] + '\n')
81 old.close()
82 new.close()
83 posix.rename(filename + '.new', filename)