db: Add tracks.trackid ASC as a fallback sort option

This keeps us from ever completely clearing the sort field in the
playlist state, since that would lead to an incomplete SQL query error.

Fixes: #38 (PlaylistStates should not allow completely clearing sort)
Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
This commit is contained in:
Anna Schumaker 2021-11-10 13:53:22 -05:00
parent d8dbba0960
commit f82e299736
3 changed files with 12 additions and 5 deletions

View File

@ -9,7 +9,7 @@ from . import sql
from . import table
DefaultSort = [ "artists.sort ASC", "albums.sort ASC", "years.year ASC",
"discs.number ASC", "tracks.number ASC" ]
"discs.number ASC", "tracks.number ASC", "tracks.trackid ASC" ]
class PlaylistState(GObject.GObject):
def __init__(self, row):
@ -45,7 +45,10 @@ class PlaylistState(GObject.GObject):
def sort(self): return self._sort.split(",")
@sort.setter
def sort(self, newval): self._sort = self.update("sort", ",".join(newval))
def sort(self, newval):
if "tracks.trackid ASC" not in newval:
newval.append("tracks.trackid ASC")
self._sort = self.update("sort", ",".join(newval))
def update(self, column, newval):
sql.execute(f"UPDATE playlist_states SET {column}=? WHERE plstateid=?",

View File

@ -63,8 +63,10 @@ class TestPlaylist(unittest.TestCase):
plist.connect("refreshed", self.on_refresh)
self.assertEqual(plist.get_property("sort"), plist.plist_state.sort)
plist.set_property("sort", [ "rowid ASC" ])
self.assertEqual(plist.get_property("sort"), [ "rowid ASC" ])
self.assertEqual(plist.plist_state.get_property("sort"), [ "rowid ASC" ])
self.assertEqual(plist.get_property("sort"),
[ "rowid ASC", "tracks.trackid ASC" ])
self.assertEqual(plist.plist_state.get_property("sort"),
[ "rowid ASC", "tracks.trackid ASC" ])
self.assertTrue(self.refreshed)

View File

@ -43,7 +43,9 @@ class TestPlaylistState(unittest.TestCase):
self.assertEqual(state.sort, db.state.DefaultSort)
state.sort = [ "test", "sort" ]
self.assertEqual(state._sort, "test,sort" )
self.assertEqual(state._sort, "test,sort,tracks.trackid ASC" )
state.sort = [ ]
self.assertEqual(state._sort, "tracks.trackid ASC" )
class TestPlaylistStateTable(unittest.TestCase):