65 lines
2.2 KiB
Python
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()
|