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
Exemple #3
0
	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)
Exemple #4
0
	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)
Exemple #5
0
	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)
Exemple #6
0
	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)
Exemple #7
0
	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)
Exemple #8
0
	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)
Exemple #9
0
	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)
Exemple #10
0
	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)
Exemple #11
0
	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)
Exemple #12
0
	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)
Exemple #13
0
	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
Exemple #15
0
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