From: Marcel van der Veldt Date: Wed, 18 May 2022 22:19:52 +0000 (+0200) Subject: Fix missing disc and track number in db (#324) X-Git-Url: https://git.kitaultman.com/?a=commitdiff_plain;h=947c2c65a04acae5459ad672f0fbdcbc3fbe811e;p=music-assistant-server.git Fix missing disc and track number in db (#324) --- diff --git a/music_assistant/controllers/music/albums.py b/music_assistant/controllers/music/albums.py index 5e7a5b06..a35d7076 100644 --- a/music_assistant/controllers/music/albums.py +++ b/music_assistant/controllers/music/albums.py @@ -5,7 +5,7 @@ import asyncio import itertools from typing import Dict, List, Optional -from music_assistant.helpers.compare import compare_album, compare_strings +from music_assistant.helpers.compare import compare_album, compare_artist from music_assistant.helpers.database import TABLE_ALBUMS from music_assistant.helpers.json import json_serializer from music_assistant.models.enums import EventType, ProviderType @@ -55,7 +55,10 @@ class AlbumsController(MediaControllerBase[Album]): # merge duplicates using a dict final_items: Dict[str, Track] = {} for track in tracks: - key = f"{track.disc_number}.{track.track_number}" + if track.disc_number is None or track.track_number is None: + key = f"{track.name}.{track.version}" + else: + key = f"{track.disc_number}.{track.track_number}" if key in final_items: final_items[key].provider_ids.update(track.provider_ids) else: @@ -72,15 +75,14 @@ class AlbumsController(MediaControllerBase[Album]): """Return all versions of an album we can find on all providers.""" album = await self.get(item_id, provider, provider_id) prov_types = {item.type for item in self.mass.music.providers} - search_query = f"{album.artist.name} {album.name}" return [ prov_item for prov_items in await asyncio.gather( - *[self.search(search_query, prov_type) for prov_type in prov_types] + *[self.search(album.name, prov_type) for prov_type in prov_types] ) for prov_item in prov_items if prov_item.sort_name == album.sort_name - and compare_strings(prov_item.artist.name, album.artist.name) + and compare_artist(prov_item.artist, album.artist) ] async def add(self, item: Album) -> Album: diff --git a/music_assistant/controllers/music/providers/filesystem.py b/music_assistant/controllers/music/providers/filesystem.py index d53d2a58..9deb0ddb 100644 --- a/music_assistant/controllers/music/providers/filesystem.py +++ b/music_assistant/controllers/music/providers/filesystem.py @@ -265,7 +265,7 @@ class FileSystemProvider(MusicProvider): if db_id is None: raise MediaNotFoundError(f"Album not found: {prov_album_id}") query = f"SELECT * FROM tracks WHERE album LIKE '%\"{db_id}\"%'" - query += f" AND provider_ids like '%\"{self.type.value}\"%'" + query += f" AND provider_ids LIKE '%\"{self.type.value}\"%'" return await self.mass.music.tracks.get_db_items(query) async def get_playlist_tracks(self, prov_playlist_id: str) -> List[Track]: diff --git a/music_assistant/controllers/music/tracks.py b/music_assistant/controllers/music/tracks.py index 50d24961..899b4953 100644 --- a/music_assistant/controllers/music/tracks.py +++ b/music_assistant/controllers/music/tracks.py @@ -213,6 +213,8 @@ class TracksController(MediaControllerBase[Track]): "metadata": json_serializer(metadata), "provider_ids": json_serializer(provider_ids), "isrc": track.isrc or cur_item.isrc, + "disc_number": track.disc_number or cur_item.disc_number, + "track_number": track.track_number or cur_item.track_number, }, db=_db, ) diff --git a/music_assistant/helpers/database.py b/music_assistant/helpers/database.py index 4721234c..3ace0931 100755 --- a/music_assistant/helpers/database.py +++ b/music_assistant/helpers/database.py @@ -10,7 +10,7 @@ if TYPE_CHECKING: from music_assistant.mass import MusicAssistant -SCHEMA_VERSION = 11 +SCHEMA_VERSION = 12 TABLE_PROV_MAPPINGS = "provider_mappings" TABLE_TRACK_LOUDNESS = "track_loudness" @@ -185,8 +185,8 @@ class Database: # always create db tables if they don't exist to prevent errors trying to access them later await self.__create_database_tables(db) - if prev_version < 10: - # refactored file provider, start clean just in case. + if prev_version < 12: + # fixed nasty bugs in file provider, start clean just in case. await db.execute(f"DROP TABLE IF EXISTS {TABLE_ARTISTS}") await db.execute(f"DROP TABLE IF EXISTS {TABLE_ALBUMS}") await db.execute(f"DROP TABLE IF EXISTS {TABLE_TRACKS}") @@ -198,12 +198,6 @@ class Database: # recreate missing tables await self.__create_database_tables(db) - if prev_version < 11: - # fix for duplicate thumbs creation - await db.execute(f"DROP TABLE IF EXISTS {TABLE_THUMBS}") - # recreate missing tables - await self.__create_database_tables(db) - # store current schema version await self.set_setting("version", str(SCHEMA_VERSION), db=db) @@ -277,6 +271,8 @@ class Database: artists json, album json, metadata json, + disc_number INTEGER NULL, + track_number INTEGER NULL, provider_ids json );""" ) diff --git a/music_assistant/models/media_items.py b/music_assistant/models/media_items.py index f095d2bb..ca8d224c 100755 --- a/music_assistant/models/media_items.py +++ b/music_assistant/models/media_items.py @@ -163,8 +163,6 @@ class MediaItem(DataClassDictMixin): "media_type", "uri", "album", - "disc_number", - "track_number", "position", ] }