瀏覽代碼

MediaLibrary: Handle force rescan safely

Make sure that we remove all cached medialibrary object on force rescan
Soomin Lee 5 年之前
父節點
當前提交
a9b5613a71

+ 4 - 0
SharedSources/MediaLibraryModel/AlbumModel.swift

@@ -98,6 +98,10 @@ extension AlbumModel: MediaLibraryObserver {
         }
         updateView?()
     }
+
+    func medialibraryDidStartRescan() {
+        files.removeAll()
+    }
 }
 
 extension VLCMLAlbum: MediaCollectionModel {

+ 3 - 0
SharedSources/MediaLibraryModel/ArtistModel.swift

@@ -83,6 +83,9 @@ extension ArtistModel: MediaLibraryObserver {
         updateView?()
     }
 
+    func medialibraryDidStartRescan() {
+        files.removeAll()
+    }
 }
 
 extension VLCMLArtist: MediaCollectionModel {

+ 4 - 0
SharedSources/MediaLibraryModel/CollectionModel.swift

@@ -93,5 +93,9 @@ extension CollectionModel: MediaLibraryObserver {
         files = mediaCollection.files() ?? []
         updateView?()
     }
+
+    func medialibraryDidStartRescan() {
+        files.removeAll()
+    }
 }
 

+ 3 - 0
SharedSources/MediaLibraryModel/GenreModel.swift

@@ -65,6 +65,9 @@ extension GenreModel: MediaLibraryObserver {
         updateView?()
     }
 
+    func medialibraryDidStartRescan() {
+        files.removeAll()
+    }
 }
 
 // MARK: - Sort

+ 4 - 0
SharedSources/MediaLibraryModel/PlaylistModel.swift

@@ -111,6 +111,10 @@ extension PlaylistModel: MediaLibraryObserver {
         }
         updateView?()
     }
+
+    func medialibraryDidStartRescan() {
+        files.removeAll()
+    }
 }
 
 // MARK: - Helpers

+ 4 - 0
SharedSources/MediaLibraryModel/ShowEpisodeModel.swift

@@ -53,4 +53,8 @@ extension ShowEpisodeModel: MediaLibraryObserver {
         showEpisodes.forEach({ append($0) })
         updateView?()
     }
+
+    func medialibraryDidStartRescan() {
+        files.removeAll()
+    }
 }

+ 4 - 0
SharedSources/MediaLibraryModel/TrackModel.swift

@@ -69,4 +69,8 @@ extension TrackModel: MediaLibraryObserver {
         }
         updateView?()
     }
+
+    func medialibraryDidStartRescan() {
+        files.removeAll()
+    }
 }

+ 4 - 0
SharedSources/MediaLibraryModel/VideoModel.swift

@@ -78,4 +78,8 @@ extension VideoModel: MediaLibraryObserver {
         }
         updateView?()
     }
+
+    func medialibraryDidStartRescan() {
+        files.removeAll()
+    }
 }

+ 13 - 0
SharedSources/MediaLibraryService.swift

@@ -92,6 +92,9 @@ extension NSNotification {
 
     @objc optional func medialibrary(_ medialibrary: MediaLibraryService,
                                      didDeletePlaylistsWithIds playlistsIds: [NSNumber])
+
+    // Force Rescan
+    @objc func medialibraryDidStartRescan()
 }
 
 // MARK: -
@@ -677,3 +680,13 @@ extension MediaLibraryService {
         return false
     }
 }
+
+// MARK: - VLCMLMediaLibraryDelegate - Force rescan
+
+extension MediaLibraryService {
+    func medialibraryDidStartRescan(_ medialibrary: VLCMediaLibrary) {
+        for observer in observers {
+            observer.value.observer?.medialibraryDidStartRescan()
+        }
+    }
+}