| # This file implements a class which forms an interface to the .cdplayerrc |
| # file that is maintained by SGI's cdplayer program. |
| # |
| # Usage is as follows: |
| # |
| # import readcd |
| # r = readcd.Readcd() |
| # c = Cdplayer(r.gettrackinfo()) |
| # |
| # Now you can use c.artist, c.title and c.track[trackno] (where trackno |
| # starts at 1). When the CD is not recognized, all values will be the empty |
| # string. |
| # It is also possible to set the above mentioned variables to new values. |
| # You can then use c.write() to write out the changed values to the |
| # .cdplayerrc file. |
| |
| cdplayerrc = '.cdplayerrc' |
| |
| class Cdplayer: |
| def __init__(self, tracklist): |
| import string |
| self.artist = '' |
| self.title = '' |
| if type(tracklist) == type(''): |
| t = [] |
| for i in range(2, len(tracklist), 4): |
| t.append((None, \ |
| (string.atoi(tracklist[i:i+2]), \ |
| string.atoi(tracklist[i+2:i+4])))) |
| tracklist = t |
| self.track = [None] + [''] * len(tracklist) |
| self.id = 'd' + string.zfill(len(tracklist), 2) |
| for track in tracklist: |
| start, length = track |
| self.id = self.id + string.zfill(length[0], 2) + \ |
| string.zfill(length[1], 2) |
| try: |
| import posix |
| f = open(posix.environ['HOME'] + '/' + cdplayerrc, 'r') |
| except IOError: |
| return |
| import re |
| reg = re.compile(r'^([^:]*):\t(.*)') |
| s = self.id + '.' |
| l = len(s) |
| while 1: |
| line = f.readline() |
| if line == '': |
| break |
| if line[:l] == s: |
| line = line[l:] |
| match = reg.match(line) |
| if not match: |
| print 'syntax error in ~/' + cdplayerrc |
| continue |
| name, valye = match.group(1, 2) |
| if name == 'title': |
| self.title = value |
| elif name == 'artist': |
| self.artist = value |
| elif name[:5] == 'track': |
| trackno = string.atoi(name[6:]) |
| self.track[trackno] = value |
| f.close() |
| |
| def write(self): |
| import posix |
| filename = posix.environ['HOME'] + '/' + cdplayerrc |
| try: |
| old = open(filename, 'r') |
| except IOError: |
| old = open('/dev/null', 'r') |
| new = open(filename + '.new', 'w') |
| s = self.id + '.' |
| l = len(s) |
| while 1: |
| line = old.readline() |
| if line == '': |
| break |
| if line[:l] <> s: |
| new.write(line) |
| new.write(self.id + '.title:\t' + self.title + '\n') |
| new.write(self.id + '.artist:\t' + self.artist + '\n') |
| for i in range(1, len(self.track)): |
| new.write(self.id + '.track.' + `i` + ':\t' + \ |
| self.track[i] + '\n') |
| old.close() |
| new.close() |
| posix.rename(filename + '.new', filename) |