From: Marcel van der Veldt Date: Sun, 8 May 2022 09:38:57 +0000 (+0200) Subject: Add count helper functions (#291) X-Git-Url: https://git.kitaultman.com/?a=commitdiff_plain;h=0f31a06fb99dd8c496a5872d61816cfcfbed09ec;p=music-assistant-server.git Add count helper functions (#291) --- diff --git a/examples/full.py b/examples/full.py index ef9e1dc6..72a6f5ff 100644 --- a/examples/full.py +++ b/examples/full.py @@ -153,14 +153,14 @@ async def main(): for prov in providers: await mass.music.register_provider(prov) # get some data - artists = await mass.music.artists.library() - print(f"Got {len(artists)} artists in library") - albums = await mass.music.albums.library() - print(f"Got {len(albums)} albums in library") - tracks = await mass.music.tracks.library() - print(f"Got {len(tracks)} tracks in library") - radios = await mass.music.radio.library() - print(f"Got {len(radios)} radio stations in library") + artists = await mass.music.artists.count() + print(f"Got {artists} artists in library") + albums = await mass.music.albums.count() + print(f"Got {albums} albums in library") + tracks = await mass.music.tracks.count() + print(f"Got {tracks} tracks in library") + radios = await mass.music.radio.count() + print(f"Got {radios} radio stations in library") playlists = await mass.music.playlists.library() print(f"Got {len(playlists)} playlists in library") # register a player diff --git a/music_assistant/helpers/database.py b/music_assistant/helpers/database.py index 205b8d7e..b2066cb8 100755 --- a/music_assistant/helpers/database.py +++ b/music_assistant/helpers/database.py @@ -66,6 +66,21 @@ class Database: TABLE_SETTINGS, {"key": key, "value": value} ) + async def get_count( + self, + table: str, + match: dict = None, + db: Optional[Db] = None, + ) -> List[Mapping]: + """Get row count for given table/query.""" + async with self.get_db(db) as _db: + sql_query = f"SELECT count() FROM {table}" + if match is not None: + sql_query += " WHERE " + " AND ".join((f"{x} = :{x}" for x in match)) + if res := await _db.fetch_one(sql_query, match): + return res["count()"] + return 0 + async def get_rows( self, table: str, diff --git a/music_assistant/models/media_controller.py b/music_assistant/models/media_controller.py index 9a911510..007cd7be 100644 --- a/music_assistant/models/media_controller.py +++ b/music_assistant/models/media_controller.py @@ -42,6 +42,10 @@ class MediaControllerBase(Generic[ItemCls], metaclass=ABCMeta): for db_row in await self.mass.database.get_rows(self.db_table, match) ] + async def count(self) -> int: + """Return number of in-library items for this MediaType.""" + return await self.mass.database.get_count(self.db_table, {"in_library": 1}) + async def get( self, provider_item_id: str,