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