emmental/db/album.py

65 lines
2.2 KiB
Python

# 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()