aboutsummaryrefslogtreecommitdiff
path: root/themes/base16-grayscale-light.rasi
AgeCommit message (Expand)Author
2018-09-30Update template formattingJordi Pakey-Rodriguez
2018-03-01Update themes with base16-builderJordi Pakey-Rodriguez
2017-12-07Support Rofi 1.4.x (#5)Andrea Scarpino
n10' href='#n10'>10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115
from common import utils
from db.db_manager import DbManager


class Artist:
    def __init__(self, id=None, **kwargs):
        if id is not None:
            db = DbManager()
            for row in db.execute("""SELECT * FROM artist WHERE id = ?""",
                                  (id,)):
                setattr(self, "id", id)
                setattr(self, "name", row[1])
                setattr(self, "sortname", row[2])
                setattr(self, "musicbrainz_artistid", row[3])
        else:
            for (key, value) in kwargs.items():
                setattr(self, key, value)

    def delete(self):
        db = DbManager()

        for album in self.albums:
            album.delete()

        delete_sql = "DELETE FROM artist WHERE id = ?"
        db.execute(delete_sql, (self.id,))

        delete_track_rel_sql = "DELETE FROM artist_track WHERE artist_id = ?"
        db.execute(delete_track_rel_sql, (self.id,))

        delete_album_rel_sql = "DELETE FROM album_artist WHERE artist_id = ?"
        db.execute(delete_album_rel_sql, (self.id,))

        db.commit()

        return True

    @property
    def tracks(self):
        from models.track import Track

        if not hasattr(self, "_tracks"):
            setattr(self, "_tracks", [])

            db = DbManager()

            for row in db.execute("""SELECT track.* FROM track
                                  INNER JOIN artist_track ON track.id =
                                  artist_track.track_id WHERE artist_id = ?
                                  ORDER BY name ASC""", (self.id,)):

                track = Track(id=row[0], tracknumber=row[1], name=row[2],
                              grouping=row[3], filename=row[4])
                self._tracks.append(track)

        return self._tracks

    @property
    def albums(self):
        from models.album import Album

        if not hasattr(self, "_albums"):
            setattr(self, "_albums", [])

            db = DbManager()

            for row in db.execute("""SELECT album.* FROM album
                                  INNER JOIN album_artist ON album.id =
                                  album_artist.album_id WHERE artist_id = ?
                                  ORDER BY date ASC""", (self.id,)):
                album = Album(id=row[0], name=row[1], date=row[2])
                self._albums.append(album)

        return self._albums

    def save(self):
        dirty_attributes = {}

        # check if the internal dict has been modified
        for (attr, value) in self.__dict__.items():
            if self.__data[attr] != getattr(self, attr):
                dirty_attributes[attr] = value

        if len(dirty_attributes) > 0:
            db = DbManager()

            set_clause = utils.update_clause_from_dict(dirty_attributes)

            dirty_attributes[id] = self.id
            
            sql = " ".join(("UPDATE artist"), set_clause, "WHERE id = :id")
            db.execute(sql, dirty_attributes)
            db.commit()

    def search(**search_params):
        artists = []

        db = DbManager()

        where_clause = utils.make_where_clause(search_params)

        result = []
        if where_clause:
            statement = " ".join(("SELECT * FROM artist", where_clause))
            result = db.execute(statement, search_params)
        else:
            result = db.execute("SELECT * FROM artist")

        for row in result:
            artists.append(
                Artist(id=row[0], name=row[1], sortname=row[2],
                       musicbrainz_artistid=row[3])
            )

        return artists