def importMP3s(mp3_list, file_name): ''' load an xml file into an MP3File list ''' tag_reader = findxml.XMLReader(xmlFile=file_name) mp3_nodes = tag_reader.getTheseNodes('mp3') tmp_sort = [] for node in mp3_nodes: orig_artist = findxml.safeChildGet(node, 'originalartist').strip() clean_artist = findxml.safeChildGet(node, 'cleanartist').strip() orig_track = findxml.safeChildGet(node, 'originaltrack').strip() clean_track = findxml.safeChildGet(node, 'cleantrack').strip() orig_album = findxml.safeChildGet(node, 'originalalbum').strip() clean_album = findxml.safeChildGet(node, 'cleanalbum').strip() orig_tracknum = findxml.safeChildGet(node, 'originaltracknum').strip() clean_tracknum = findxml.safeChildGet(node, 'cleantracknum').strip() path = findxml.safeChildGet(node, 'path').strip() artist = clean_artist if clean_artist else orig_artist track = clean_track if clean_track else orig_track album = clean_album if clean_album else orig_album tracknum = clean_tracknum if clean_tracknum else orig_tracknum mylog.INFO('orig_artist: \'%s\' clean_artist: \'%s\' track: %s album: %s tracknum: %s' % (orig_artist, clean_artist, track, album, tracknum)) orig_mp3 = Track(_artist=artist, _name=track, _album=album, _track_num=tracknum, _path=path) mp3_list.append(MP3File(orig_track=orig_mp3.copy(), my_path=path)) tag_reader.close()
def FindMusic(my_dir, callback, only_artist_str=''): '''Given a directory, will populate a list with all the *.mp3 files found in that directory (recursively) and read their current tag info. Usually the first step in any use case. my_dir -> directory to search for *.mp3 callback -> a function pointer funct(str) used to return status info only_artist_str -> optional tag to only find artists matching this string returns -> mp3_list, a list of MP3File objects ''' mp3_list = [] fileio.MP3Finder(my_dir, mp3_list, callback) new_mp3_list = [] for mp3_file in mp3_list: fn = mp3_file.orig_track.path is_dup = mp3_file.is_dup callback('processing: %s' % fn) # load up the id3 tags from the mp3s in our xml list try: id3_reader = fileio.Id3tool(fn) orig_mp3 = Track(_artist=id3_reader.readTag('artist'), _name=id3_reader.readTag('title'), _album=id3_reader.readTag('album'), _track_num=id3_reader.readTag('tracknumber'), _path=fn) if only_artist_str: srch = strtool.sanitizeTrackStr(only_artist_str) artist = strtool.sanitizeTrackStr(mp3_obj.orig_track.artist) if not re.search(srch, artist, re.IGNORECASE): mylog.DBG1(6,'skipping artist %s for match %s' % (srch, artist)) continue new_mp3_list.append(MP3File(orig_track=orig_mp3.copy(), my_path=fn, is_dup_flag=is_dup)) except: mylog.ERR('ID3 read failed on \'%s\'\n' % fn) new_mp3_list.append(MP3File(my_path=fn, is_dup_flag=is_dup)) del mp3_list return new_mp3_list