# Copyright 2021 (c) Anna Schumaker. # # Table: genres # +---------+-----------+------+------+ # | genreid | plstateid | name | sort | # +---------+-----------+------+------+ # # Index: genre_index # +-----------------+ # | name -> genreid | # +-----------------+ from gi.repository import GObject from . import playlist from . import track from . import sql class Genre(playlist.MappedPlaylist): def __init__(self, row): playlist.MappedPlaylist.__init__(self, row, "emblem-generic", "genre_map") self._name = row["name"] def delete(self): self.clear() Table.delete(self) @GObject.Property def name(self): return self._name class GenreTable(playlist.Model): def __init__(self): playlist.Model.__init__(self, "genres", "sort") def do_create(self): sql.execute("CREATE TABLE IF NOT EXISTS genres " "(genreid INTEGER PRIMARY KEY, " " plstateid INTEGER NOT NULL, " " name TEXT UNIQUE, " " sort TEXT, " " FOREIGN KEY(plstateid) REFERENCES playlist_states(plstateid))") sql.execute("CREATE TABLE IF NOT EXISTS genre_map " "(genreid INTEGER, " " trackid INTEGER, " " FOREIGN KEY(genreid) REFERENCES genres(genreid), " " FOREIGN KEY(trackid) REFERENCES tracks(trackid), " " UNIQUE(genreid, trackid))") def do_drop(self): sql.execute("DROP TABLE genres") sql.execute("DROP TABLE genre_map") def do_factory(self, row): return Genre(row) def do_insert(self, plstate, name): return sql.execute("INSERT INTO genres (plstateid, name, sort) " "VALUES (?, ?, ?)", [ plstate.rowid, name, name.casefold() ]) def do_lookup(self, name): return sql.execute("SELECT * FROM genres WHERE name=?", [ name ]) Table = GenreTable()