curds: Give tracks their own sort_key() function
I'm about to give playlists a sort_key(), so clean up the existing function first Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
This commit is contained in:
parent
4d5a347cc0
commit
054b9d05c2
|
@ -173,13 +173,7 @@ class Playlist(node.PlaylistNode):
|
|||
return field in self.sort_order
|
||||
|
||||
def sort_key(self, track):
|
||||
ret = [ ]
|
||||
for field in self.sort_order:
|
||||
val = track[field]
|
||||
if isinstance(val, str):
|
||||
val = ''.join(filter(str.isalnum, val.lower()))
|
||||
ret.append(val)
|
||||
return ret
|
||||
return track.sort_key(self.sort_order)
|
||||
|
||||
def track_added(self, index):
|
||||
if self.visible == True:
|
||||
|
|
|
@ -365,7 +365,7 @@ class TestPlaylist(unittest.TestCase):
|
|||
def test_playlist_sort_key(self):
|
||||
track = self.add_tracks([1])[0]
|
||||
trackno = track["tracknumber"]
|
||||
artist = track["artist"].lower().replace(" ", "")
|
||||
artist = track["artist"].lower()
|
||||
|
||||
self.assertEqual(self.plist.sort_key(track), [ ])
|
||||
self.assertTrue( self.plist.sort("tracknumber"))
|
||||
|
|
|
@ -4,6 +4,7 @@ from . import notify
|
|||
import mutagen
|
||||
import os
|
||||
import re
|
||||
import unicodedata
|
||||
|
||||
discno_map = { "one" : "1", "two" : "2", "three" : "3", "four" : "4", "five" : "5" }
|
||||
tag_map = dict()
|
||||
|
@ -80,6 +81,20 @@ class Track(Tag):
|
|||
return None
|
||||
return Tag.lookup(t, "new-track")
|
||||
|
||||
def sort_key(self, fields):
|
||||
ret = [ ]
|
||||
for field in fields:
|
||||
val = self[field]
|
||||
if isinstance(val, str):
|
||||
decode = unicodedata.normalize("NFD", val)
|
||||
val = decode.encode("ascii", "ignore").decode("utf8")
|
||||
words = val.lower().split()
|
||||
words = [ ''.join(filter(str.isalnum, w)) for w in words ]
|
||||
words = [ w for w in words if w not in ["", "a", "the"]]
|
||||
val = ' '.join(words)
|
||||
ret.append(val)
|
||||
return ret
|
||||
|
||||
|
||||
def clear():
|
||||
tag_map.clear()
|
||||
|
|
|
@ -100,3 +100,15 @@ class TestTrackTag(unittest.TestCase):
|
|||
self.assertEqual(t["genre"], "Test")
|
||||
self.assertEqual(t["albumartist"], "Test Artist")
|
||||
self.assertIsNone(t["nokey"])
|
||||
|
||||
def test_track_sort_key(self):
|
||||
t = tags.Track.lookup(os.path.join(test_tracks, "01 - Test Track.ogg"))
|
||||
self.assertEqual(t.sort_key(["title"]), [ "test track" ])
|
||||
self.assertEqual(t.sort_key(["title", "tracknumber"]), [ "test track", 1 ])
|
||||
|
||||
t.title = "The Test - Track!"
|
||||
self.assertEqual(t.sort_key(["title"]), [ "test track" ])
|
||||
t.title = "A \"Test\" Track"
|
||||
self.assertEqual(t.sort_key(["title"]), [ "test track" ])
|
||||
t.title = "Test Träck 01"
|
||||
self.assertEqual(t.sort_key(["title"]), [ "test track 01" ])
|
||||
|
|
Loading…
Reference in New Issue
Block a user