def tracks_in_order(trackdata): fids = [x[5] for x in trackdata] fids = sort.sorted_list(fids) for (tracknum,artist,sortartist,title,dur,fname,artistid,trkid),fid in zip(trackdata,fids): if fname != fid: return False return True
def tracks_in_order(trackdata): fids = [x[5] for x in trackdata] fids = sort.sorted_list(fids) for (tracknum, artist, sortartist, title, dur, fname, artistid, trkid), fid in zip(trackdata, fids): if fname != fid: return False return True
def testNonCommonPrefix(self): """ A non-common prefix gives up """ start = ["Hello 02 foo", "There 01 bar"] expected = ["Hello 02 foo", "There 01 bar"] self.assertEqual(sort.sorted_list(start), expected)
def testNumberSpace(self): """ A number, a space, then text """ start = ["1 track", "3 trackthree", "2 tracktwo", "10 track10"] expected = ["1 track", "2 tracktwo", "3 trackthree", "10 track10"] self.assertEqual(sort.sorted_list(start), expected)
def testNoNumber(self): """ A something with no numbers gives up """ start = ["Hello 02 foo", "NoNumbersHere"] expected = ["Hello 02 foo", "NoNumbersHere"] self.assertEqual(sort.sorted_list(start), expected)
def testNumberInName(self): """ Stupid artists who put numbers in their name """ start = ["2Pac - 02 - track2", "2Pac - 01 - track1"] expected = ["2Pac - 01 - track1", "2Pac - 02 - track2"] self.assertEqual(sort.sorted_list(start), expected)
def testLeadingZeroNonLeadingMix(self): """ Mix of nice numbers and normal numbers """ start = ["12 twelve", "3 three", "02 two"] expected = ["02 two", "3 three", "12 twelve"] self.assertEqual(sort.sorted_list(start), expected)
def testDirectoryWithCommonNumber(self): """ Part of a directory with a common year in it """ start = ["/artist 2005 album/Artist 3 - Something", "/artist 2005 album/Artist 12 - Else", "/artist 2005 album/Artist 1 - One"] expected = ["/artist 2005 album/Artist 1 - One", "/artist 2005 album/Artist 3 - Something", "/artist 2005 album/Artist 12 - Else"] self.assertEqual(sort.sorted_list(start), expected)
def testCommonTextThenLeadingZeroNumber(self): """ Common text then a (nice) number """ start = ["Artist 03 - Something", "Artist 12 - Else", "Artist 01 - One"] expected = ["Artist 01 - One", "Artist 03 - Something", "Artist 12 - Else"] self.assertEqual(sort.sorted_list(start), expected)
def testLeadingZero(self): """ Nicely done already """ start = ["02 - ArtistTrack", "04 - ArtistTrack", "03 - ArtistTrack", "01 - ArtistTrack"] expected = ["01 - ArtistTrack", "02 - ArtistTrack", "03 - ArtistTrack", "04 - ArtistTrack"] self.assertEqual(sort.sorted_list(start), expected)
def testFlacNaming(self): """ syntax used by ripcd/2flac """ start = ["track01", "track03", "track02", "track10"] expected = ["track01", "track02", "track03", "track10"] self.assertEqual(sort.sorted_list(start), expected)
def testDash(self): """ A number, a dash, then text """ start = ["1-track", "3-trackthree", "2-tracktwo", "10-track10"] expected = ["1-track", "2-tracktwo", "3-trackthree", "10-track10"] self.assertEqual(sort.sorted_list(start), expected)
def testNumberDotSpace(self): """ A number, a dot, then text """ start = ["1. track", "3. trackthree", "2. tracktwo", "10. track10"] expected = ["1. track", "2. tracktwo", "3. trackthree", "10. track10"] self.assertEqual(sort.sorted_list(start), expected)
def verify_track(release, possible_releases, impossible_releases, trackinfo, fileid, track): # Step One: Has this file already been found on this release? releaseid = release.id if releaseid in possible_releases and fileid in possible_releases[releaseid].values(): util.update_progress("Already found on this release:" + fileid ) return False # Step Two: Check for the right number of tracks if len(release.tracks) != len(trackinfo): # Ignore release -- wrong number of tracks util.update_progress(release.title.encode("ascii","ignore")[:40]+": wrong number of tracks (%d not %d)" % (len(release.tracks),len(trackinfo))) impossible_releases.append(releaseid) return False # Step Three: Have we found a file for this track on this release? tracknum = lookups.track_number(release.tracks, track) if releaseid in possible_releases and tracknum in possible_releases[releaseid]: util.update_progress("Already found a file for track %02d: %s" % (tracknum,possible_releases[releaseid][tracknum])) return False # Step Four: (optionally) Check that track 'n' maps to file 'n'. if FORCE_ORDER: found_tracknumber=lookups.track_number(release.tracks, track) file_ids = trackinfo.keys() file_ids = sort.sorted_list(file_ids) if found_tracknumber != file_ids.index(fileid)+1: util.update_progress(release.title[:40]+": track at wrong position") return False # Step Five: Make sure if there is another mapping on this album # that we don't accept this one. if trackinfo[fileid].getPUID() in get_puids_for_release(releaseid): if trackinfo[fileid].getPUID() not in lookups.get_track_by_id(track.id).puids: print "Track exists elsewhere on this release" print "",fileid print "",track.title for ntrackind,ntrack in enumerate(release.tracks): ntrack = lookups.get_track_by_id(ntrack.id) if trackinfo[fileid].getPUID() in ntrack.puids: print " should be:",ntrack.title return False # Step Six: Make sure the song is within 10% of the length of the # track we expect it to be. track = lookups.get_track_by_id(track.id) if track.getDuration() is not None: dur_ratio = track.getDuration() * 1.0 / trackinfo[fileid].getDuration() if dur_ratio < .9 or dur_ratio > 1.1: print "Track lengths differ" print " (%s) %s" % ( duration_to_string(trackinfo[fileid].getDuration()), trackinfo[fileid].getFilename(), ) print " (%s) %s" % ( duration_to_string(track.getDuration()), track.title, ) return False # Well, after passing through that gauntlet, we might consider this track! return True
def verify_track(release, possible_releases, impossible_releases, trackinfo, fileid, track): # Step One: Has this file already been found on this release? releaseid = release.id if releaseid in possible_releases and fileid in possible_releases[ releaseid].values(): util.update_progress("Already found on this release:" + fileid) return False # Step Two: Check for the right number of tracks if len(release.tracks) != len(trackinfo): # Ignore release -- wrong number of tracks util.update_progress( release.title.encode("ascii", "ignore")[:40] + ": wrong number of tracks (%d not %d)" % (len(release.tracks), len(trackinfo))) impossible_releases.append(releaseid) return False # Step Three: Have we found a file for this track on this release? tracknum = lookups.track_number(release.tracks, track) if releaseid in possible_releases and tracknum in possible_releases[ releaseid]: util.update_progress( "Already found a file for track %02d: %s" % (tracknum, possible_releases[releaseid][tracknum])) return False # Step Four: (optionally) Check that track 'n' maps to file 'n'. if FORCE_ORDER: found_tracknumber = lookups.track_number(release.tracks, track) file_ids = trackinfo.keys() file_ids = sort.sorted_list(file_ids) if found_tracknumber != file_ids.index(fileid) + 1: util.update_progress(release.title[:40] + ": track at wrong position") return False # Step Five: Make sure if there is another mapping on this album # that we don't accept this one. if trackinfo[fileid].getPUID() in get_puids_for_release(releaseid): if trackinfo[fileid].getPUID() not in lookups.get_track_by_id( track.id).puids: print "Track exists elsewhere on this release" print "", fileid print "", track.title for ntrackind, ntrack in enumerate(release.tracks): ntrack = lookups.get_track_by_id(ntrack.id) if trackinfo[fileid].getPUID() in ntrack.puids: print " should be:", ntrack.title return False # Step Six: Make sure the song is within 10% of the length of the # track we expect it to be. track = lookups.get_track_by_id(track.id) if track.getDuration() is not None and trackinfo[fileid].getDuration(): dur_ratio = track.getDuration() * 1.0 / trackinfo[fileid].getDuration() if dur_ratio < .9 or dur_ratio > 1.1: print "Track lengths differ" print " (%s) %s" % ( duration_to_string(trackinfo[fileid].getDuration()), trackinfo[fileid].getFilename(), ) print " (%s) %s" % ( duration_to_string(track.getDuration()), track.title, ) return False # Well, after passing through that gauntlet, we might consider this track! return True