# Copyright 2021 (c) Anna Schumaker. # # Table: playlist_states # +-----------+--------+------+---------+------+ # | plstateid | random | loop | current | sort | # +-----------+--------+------+---------+------+ from gi.repository import GObject from . import sql from . import table DefaultSort = [ "artists.sort ASC", "albums.release ASC", "albums.sort ASC", "discs.number ASC", "tracks.number ASC", "tracks.trackid ASC" ] class PlaylistState(GObject.GObject): def __init__(self, row): GObject.GObject.__init__(self) self._plstateid = row["plstateid"] self._random = row["random"] self._loop = row["loop"] self._current = row["current"] self._sort = row["sort"] @GObject.Property def rowid(self): return self._plstateid @GObject.Property(type=bool,default=False) def random(self): return self._random @random.setter def random(self, newval): self._random = self.update("random", newval) @GObject.Property(type=bool,default=False) def loop(self): return self._loop @loop.setter def loop(self, newval): self._loop = self.update("loop", newval) @GObject.Property(type=int) def current(self): return self._current @current.setter def current(self, newval): self._current = self.update("current", newval) @GObject.Property(type=GObject.TYPE_PYOBJECT) def sort(self): return self._sort.split(",") @sort.setter 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=?", [ newval, self.rowid ]) sql.commit() return newval class PlaylistStateTable(table.Table): def __init__(self): table.Table.__init__(self, "playlist_states") def do_create(self): sql.execute("CREATE TABLE IF NOT EXISTS playlist_states " "(plstateid INTEGER PRIMARY KEY, " " random INTEGER DEFAULT 0, " " loop INTEGER DEFAULT 0, " " current INTEGER DEFAULT -1, " " sort TEXT)") def do_factory(self, row): return PlaylistState(row) def do_insert(self, random=False, loop=False, sort=DefaultSort): return sql.execute("INSERT INTO playlist_states (random, loop, sort) " "VALUES (?, ?, ?)", (random, loop, ",".join(sort))) Table = PlaylistStateTable()