# Copyright 2021 (c) Anna Schumaker. # # Table: discs # +--------+---------+--------+----------+ # | discid | albumid | number | subtitle | # +--------+---------+--------+----------+ from gi.repository import GObject from . import album from . import execute from . import objects from . import state class Disc(objects.Row): def __gt__(self, rhs): return self.number > rhs.number def __lt__(self, rhs): return self.number < rhs.number def __str__(self): if self.subtitle: return f"{str(self.album)}: {self.subtitle}" return f"{str(self.album)}" def do_get_column(self, column): return execute(f"SELECT {column} FROM discs " "WHERE discid=?", [ self.rowid ]) @GObject.Property def album(self): return album.Album(self.get_column("albumid")) @GObject.Property def number(self): return self.get_column("number") @GObject.Property def playlist_state(self): return state.PlaylistState(self.get_column("plstateid")) @GObject.Property def subtitle(self): return self.get_column("subtitle") class DiscTable(objects.Table): def __init__(self): objects.Table.__init__(self, "discs", Disc) def do_create(self): execute("CREATE TABLE IF NOT EXISTS discs " "(discid INTEGER PRIMARY KEY, " " albumid INTEGER, " " plstateid INTEGER NOT NULL, " " number INTEGER, " " subtitle TEXT, " " FOREIGN KEY(albumid) REFERENCES albums(albumid), " " FOREIGN KEY(plstateid) REFERENCES playlist_states(plstateid), " " UNIQUE(albumid, number))") def do_insert(self, album, number, subtitle): subtitle = subtitle if subtitle and len(subtitle) > 0 else None plstate = state.Table.insert(random=False, loop=False) return execute("INSERT INTO discs (albumid, plstateid, number, subtitle) " "VALUES (?, ?, ?, ?)", [ int(album), int(plstate), number, subtitle ]) def do_delete(self, disc): state.Table.delete(disc.playlist_state) return execute("DELETE FROM discs WHERE discid=?", [ int(disc) ]) def do_get(self, rowid): return execute("SELECT discid FROM discs " "WHERE discid=?", [ rowid ]) def do_lookup(self, album, number, subtitle=None): return execute("SELECT discid FROM discs " "WHERE (albumid=? AND number=?)", [ int(album), number ]) Table = DiscTable()