From 0d19fb9f8bac4c32825c24804a5607ef8909deb9 Mon Sep 17 00:00:00 2001 From: Soomin Lee <bubu@mikan.io> Date: Thu, 28 Nov 2019 16:11:50 +0100 Subject: [PATCH] ArtistsModel: Fix Unknown and Various artists addition and deletion Closes #764 --- .../MediaLibraryModel/ArtistModel.swift | 33 ++++++++++++++++++- 1 file changed, 32 insertions(+), 1 deletion(-) diff --git a/SharedSources/MediaLibraryModel/ArtistModel.swift b/SharedSources/MediaLibraryModel/ArtistModel.swift index 3b1b905d1..cc2df61f6 100644 --- a/SharedSources/MediaLibraryModel/ArtistModel.swift +++ b/SharedSources/MediaLibraryModel/ArtistModel.swift @@ -33,6 +33,33 @@ class ArtistModel: AudioCollectionModel { func append(_ item: VLCMLArtist) { files.append(item) } + + private func addNewArtists(_ artists: [VLCMLArtist]) { + let newArtists = artists.filter() { + for artist in files { + if artist.identifier() == $0.identifier() { + return false + } + } + return true + } + + for artist in newArtists { + if !files.contains(where: { $0.identifier() == artist.identifier() }) { + files.append(artist) + } + } + } + + private func filterGeneratedArtists() { + for (index, artist) in files.enumerated() { + if artist.identifier() == UnknownArtistID || artist.identifier() == VariousArtistID { + if artist.tracksCount() == 0 { + files.remove(at: index) + } + } + } + } } // MARK: - Sort @@ -62,9 +89,11 @@ extension ArtistModel: MediaLibraryObserver { func medialibrary(_ medialibrary: MediaLibraryService, didModifyArtistsWithIds artistsIds: [NSNumber]) { + + let uniqueArtistsIds = Array(Set(artistsIds)) var artists = [VLCMLArtist]() - artistsIds.forEach() { + uniqueArtistsIds.forEach() { guard let safeArtist = medialibrary.medialib.artist(withIdentifier: $0.int64Value) else { return @@ -73,6 +102,8 @@ extension ArtistModel: MediaLibraryObserver { } files = swapModels(with: artists) + addNewArtists(artists) + filterGeneratedArtists() updateView?() } -- GitLab