# Copyright 2021 (c) Anna Schumaker. # # Table: albums # +---------+----------+-----------+------+------+ # | albumid | artistid | plstateid | name | sort | # +---------+----------+-----------+------+------+ from gi.repository import GObject from . import disc from . import playlist from . import sql class Album(playlist.ParentPlaylist): def __init__(self, row): playlist.ParentPlaylist.__init__(self, row, "media-optical-cd-audio") self._name = row["name"] self._release = row["release"] @GObject.Property def name(self): return self._name @GObject.Property def release(self): return self._release def delete(self): Table.delete(self) def find_disc(self, number, subtitle): return self.find_child(number, subtitle) def get_child_table(self): return disc.Table def lookup_child(self, number, subtitle): return disc.Table.lookup(self, number) class AlbumTable(playlist.ChildModel): def __init__(self): playlist.ChildModel.__init__(self, "albums", "artistid", "sort") def do_create(self): sql.execute("CREATE TABLE IF NOT EXISTS albums " "(albumid INTEGER PRIMARY KEY, " " artistid INTEGER, " " plstateid INTEGER NOT NULL, " " release DATE NOT NULL, " " name TEXT, " " sort TEXT, " " FOREIGN KEY(artistid) REFERENCES artists(artistid), " " FOREIGN KEY(plstateid) REFERENCES playlist_states(plstateid), " " UNIQUE(artistid, release, name))") def do_factory(self, row): return Album(row) def do_insert(self, plstate, artist, name, release): return sql.execute("INSERT INTO albums (artistid, plstateid, release, name, sort) " "VALUES (?, ?, ?, ?, ?)", [ artist.rowid, plstate.rowid, release, name, name.casefold() ]) def do_lookup(self, artist, name, release): return sql.execute("SELECT * FROM albums " "WHERE (artistid=? AND name=? AND release=?)", [ artist.rowid, name, release ]) Table = AlbumTable()