| | 182 | |
|---|
| | 183 | def _update_metadata_cddb(self, disc_id, cddb_info): |
|---|
| | 184 | num_tracks = disc_id[1] |
|---|
| | 185 | artist, album = cddb_info['DTITLE'].split(' / ') |
|---|
| | 186 | year = cddb_info['DYEAR'] |
|---|
| | 187 | for i in range(num_tracks): |
|---|
| | 188 | # FIXME: Turn into unicode, cddb protocol v6 uses utf-8 instead of |
|---|
| | 189 | # iso-8859-1 |
|---|
| | 190 | src = self._playlist[i] |
|---|
| | 191 | src.meta_data.artist = artist |
|---|
| | 192 | src.meta_data.album = album |
|---|
| | 193 | if year: |
|---|
| | 194 | src.meta_data.year = int(year) |
|---|
| | 195 | src.meta_data.title = cddb_info['TTITLE%d' % i] |
|---|
| | 196 | self._update_source_row(src) |
|---|
| | 197 | |
|---|
| | 198 | import threading, CDDB |
|---|
| | 199 | class CDDBThread(threading.Thread): |
|---|
| | 200 | def __init__(self, disc_id, cb): |
|---|
| | 201 | threading.Thread.__init__(self) |
|---|
| | 202 | self._disc_id = disc_id |
|---|
| | 203 | self._cb = cb |
|---|
| | 204 | |
|---|
| | 205 | def run(self): |
|---|
| | 206 | (status, info) = CDDB.query(self._disc_id, |
|---|
| | 207 | client_name=mesk.info.APP_NAME, |
|---|
| | 208 | client_version=mesk.info.APP_VERSION) |
|---|
| | 209 | if status in [200, 210, 211]: |
|---|
| | 210 | if status in [210, 211]: |
|---|
| | 211 | info = info[0] |
|---|
| | 212 | else: |
|---|
| | 213 | mesk.log.verbose('Unable to fetch CDDB info, status=%d' % status) |
|---|
| | 214 | |
|---|
| | 215 | (status, info) = CDDB.read(info['category'], info['disc_id']) |
|---|
| | 216 | if status != 210: |
|---|
| | 217 | mesk.log.verbose('Unable to fetch CDDB info, status=%d' % status) |
|---|
| | 218 | return |
|---|
| | 219 | |
|---|
| | 220 | gobject.idle_add(self._cb, self._disc_id, info) |
|---|