# Copyright 2021 (c) Anna Schumaker. # # Table: libraries # +-----------+-----------+---------+------+ # | libraryid | plstateid | enabled | path | # +-----------+-----------+---------+------+ import pathlib from gi.repository import GObject from . import commit from . import execute from . import objects from . import state from . import track class Library(objects.Row): def __lt__(self, rhs): return self.path < rhs.path def __gt__(self, rhs): return self.path > rhs.path def __str__(self): return str(self.path) def do_get_column(self, column): return execute(f"SELECT {column} FROM libraries " "WHERE libraryid=?", [ self.rowid ]) def tracks(self): cursor = execute(f"SELECT trackid FROM tracks " "WHERE libraryid=?", [ self.rowid ]) return [ track.Track(row["trackid"]) for row in cursor.fetchall() ] @GObject.Property def playlist_state(self): return state.PlaylistState(self.get_column("plstateid")) @GObject.Property def path(self): return pathlib.Path(self.get_column("path")) @GObject.Property(type=bool,default=False) def enabled(self): return bool(self.get_column("enabled")) @enabled.setter def enabled(self, newval): execute("UPDATE libraries " "SET enabled=? " "WHERE libraryid=?", [ newval, self.rowid ]) commit() class LibraryTable(objects.Table): def __init__(self): objects.Table.__init__(self, "libraries", Library) def do_create(self): execute("CREATE TABLE IF NOT EXISTS libraries " "(libraryid INTEGER PRIMARY KEY, " " plstateid INTEGER NOT NULL, " " enabled INTEGER DEFAULT 1, " " path TEXT UNIQUE, " " FOREIGN KEY (plstateid) REFERENCES playlist_states(plstateid))") def do_insert(self, path): plstate = state.Table.insert(random=False, loop=False) return execute("INSERT INTO libraries (plstateid, path) " "VALUES (?, ?)", [ int(plstate), str(path) ]) def do_delete(self, library): for t in library.tracks(): track.Table.delete(t) state.Table.delete(library.playlist_state) return execute("DELETE FROM libraries WHERE libraryid=?", [ int(library) ]) def do_get(self, rowid): return execute("SELECT libraryid FROM libraries " "WHERE libraryid=?", [ rowid ]) def do_get_all(self): return execute("SELECT libraryid FROM libraries") def do_lookup(self, path): return execute("SELECT libraryid FROM libraries " "WHERE path=?", [ str(path) ]) Table = LibraryTable()