1414# You can then use c.write() to write out the changed values to the
1515# .cdplayerrc file.
1616
17- import string , posix
17+ import string , posix , os
1818
1919_cddbrc = '.cddb'
2020_DB_ID_NTRACKS = 5
@@ -56,45 +56,15 @@ def tochash(toc):
5656
5757class Cddb :
5858 def __init__ (self , tracklist ):
59- if posix .environ .has_key ('CDDB_PATH' ):
60- path = posix .environ ['CDDB_PATH' ]
59+ if os .environ .has_key ('CDDB_PATH' ):
60+ path = os .environ ['CDDB_PATH' ]
6161 cddb_path = string .splitfields (path , ',' )
6262 else :
63- home = posix .environ ['HOME' ]
63+ home = os .environ ['HOME' ]
6464 cddb_path = [home + '/' + _cddbrc ]
65- self .artist = ''
66- self .title = ''
67- if type (tracklist ) == type ('' ):
68- t = []
69- for i in range (2 , len (tracklist ), 4 ):
70- t .append ((None , \
71- (string .atoi (tracklist [i :i + 2 ]), \
72- string .atoi (tracklist [i + 2 :i + 4 ]))))
73- tracklist = t
74- ntracks = len (tracklist )
75- self .track = [None ] + ['' ] * ntracks
76- self .id = _dbid ((ntracks >> 4 ) & 0xF ) + _dbid (ntracks & 0xF )
77- if ntracks <= _DB_ID_NTRACKS :
78- nidtracks = ntracks
79- else :
80- nidtracks = _DB_ID_NTRACKS - 1
81- min = 0
82- sec = 0
83- for track in tracklist :
84- start , length = track
85- min = min + length [0 ]
86- sec = sec + length [1 ]
87- min = min + sec / 60
88- sec = sec % 60
89- self .id = self .id + _dbid (min ) + _dbid (sec )
90- for i in range (nidtracks ):
91- start , length = tracklist [i ]
92- self .id = self .id + _dbid (length [0 ]) + _dbid (length [1 ])
93- self .toc = string .zfill (ntracks , 2 )
94- for track in tracklist :
95- start , length = track
96- self .toc = self .toc + string .zfill (length [0 ], 2 ) + \
97- string .zfill (length [1 ], 2 )
65+
66+ self ._get_id (tracklist )
67+
9868 for dir in cddb_path :
9969 file = dir + '/' + self .id + '.rdb'
10070 try :
@@ -103,6 +73,10 @@ def __init__(self, tracklist):
10373 break
10474 except IOError :
10575 pass
76+ ntracks = string .atoi (self .id [:2 ], 16 )
77+ self .artist = ''
78+ self .title = ''
79+ self .track = [None ] + ['' ] * ntracks
10680 if not hasattr (self , 'file' ):
10781 return
10882 import regex
@@ -123,6 +97,8 @@ def __init__(self, tracklist):
12397 elif name2 == 'title' :
12498 self .title = value
12599 elif name2 == 'toc' :
100+ if not self .toc :
101+ self .toc = value
126102 if self .toc != value :
127103 print 'toc\' s don\' t match'
128104 elif name1 [:5 ] == 'track' :
@@ -142,7 +118,7 @@ def __init__(self, tracklist):
142118 track = self .track [i ]
143119 # if track title starts with `,', use initial part
144120 # of previous track's title
145- if track [0 ] == ',' :
121+ if track and track [0 ] == ',' :
146122 try :
147123 off = string .index (self .track [i - 1 ],
148124 ',' )
@@ -152,12 +128,51 @@ def __init__(self, tracklist):
152128 self .track [i ] = self .track [i - 1 ][:off ] \
153129 + track
154130
131+ def _get_id (self , tracklist ):
132+ # fill in self.id and self.toc.
133+ # if the argument is a string ending in .rdb, the part
134+ # upto the suffix is taken as the id.
135+ if type (tracklist ) == type ('' ):
136+ if tracklist [- 4 :] == '.rdb' :
137+ self .id = tracklist [:- 4 ]
138+ self .toc = ''
139+ return
140+ t = []
141+ for i in range (2 , len (tracklist ), 4 ):
142+ t .append ((None , \
143+ (string .atoi (tracklist [i :i + 2 ]), \
144+ string .atoi (tracklist [i + 2 :i + 4 ]))))
145+ tracklist = t
146+ ntracks = len (tracklist )
147+ self .id = _dbid ((ntracks >> 4 ) & 0xF ) + _dbid (ntracks & 0xF )
148+ if ntracks <= _DB_ID_NTRACKS :
149+ nidtracks = ntracks
150+ else :
151+ nidtracks = _DB_ID_NTRACKS - 1
152+ min = 0
153+ sec = 0
154+ for track in tracklist :
155+ start , length = track
156+ min = min + length [0 ]
157+ sec = sec + length [1 ]
158+ min = min + sec / 60
159+ sec = sec % 60
160+ self .id = self .id + _dbid (min ) + _dbid (sec )
161+ for i in range (nidtracks ):
162+ start , length = tracklist [i ]
163+ self .id = self .id + _dbid (length [0 ]) + _dbid (length [1 ])
164+ self .toc = string .zfill (ntracks , 2 )
165+ for track in tracklist :
166+ start , length = track
167+ self .toc = self .toc + string .zfill (length [0 ], 2 ) + \
168+ string .zfill (length [1 ], 2 )
169+
155170 def write (self ):
156171 import posixpath
157- if posix .environ .has_key ('CDDB_WRITE_DIR' ):
158- dir = posix .environ ['CDDB_WRITE_DIR' ]
172+ if os .environ .has_key ('CDDB_WRITE_DIR' ):
173+ dir = os .environ ['CDDB_WRITE_DIR' ]
159174 else :
160- dir = posix .environ ['HOME' ] + '/' + _cddbrc
175+ dir = os .environ ['HOME' ] + '/' + _cddbrc
161176 file = dir + '/' + self .id + '.rdb'
162177 if posixpath .exists (file ):
163178 # make backup copy
0 commit comments