瀏覽代碼

library: refactor item deletion to prevent code duplication and repeated library reloads while deleting multiple items

Felix Paul Kühne 11 年之前
父節點
當前提交
41ea1af5b3
共有 2 個文件被更改,包括 48 次插入45 次删除
  1. 1 1
      Sources/VLCPlaylistViewController.h
  2. 47 44
      Sources/VLCPlaylistViewController.m

+ 1 - 1
Sources/VLCPlaylistViewController.h

@@ -30,7 +30,7 @@ typedef enum {
 - (IBAction)leftButtonAction:(id)sender;
 - (IBAction)leftButtonAction:(id)sender;
 
 
 - (void)updateViewContents;
 - (void)updateViewContents;
-- (void)removeMediaObject:(MLFile *)mediaObject;
+- (void)removeMediaObject:(id)mediaObject;
 
 
 - (void)setLibraryMode:(VLCLibraryMode)mode;
 - (void)setLibraryMode:(VLCLibraryMode)mode;
 
 

+ 47 - 44
Sources/VLCPlaylistViewController.m

@@ -202,7 +202,51 @@
         [(VLCAppDelegate*)[UIApplication sharedApplication].delegate openMediaFromManagedObject:mediaObject];
         [(VLCAppDelegate*)[UIApplication sharedApplication].delegate openMediaFromManagedObject:mediaObject];
 }
 }
 
 
-- (void)removeMediaObject:(MLFile *)mediaObject
+- (void)removeMediaObject:(id)managedObject
+{
+        // delete all tracks from an album
+    if ([managedObject isKindOfClass:[MLAlbum class]]) {
+        MLAlbum *album = managedObject;
+        NSSet *iterAlbumTrack = [NSSet setWithSet:album.tracks];
+
+        for (MLAlbumTrack *track in iterAlbumTrack) {
+            NSSet *iterFiles = [NSSet setWithSet:track.files];
+
+            for (MLFile *file in iterFiles)
+                [self _deleteMediaObject:file];
+        }
+        // delete all episodes from a show
+    } else if ([managedObject isKindOfClass:[MLShow class]]) {
+        MLShow *show = managedObject;
+        NSSet *iterShowEpisodes = [NSSet setWithSet:show.episodes];
+
+        for (MLShowEpisode *episode in iterShowEpisodes) {
+            NSSet *iterFiles = [NSSet setWithSet:episode.files];
+
+            for (MLFile *file in iterFiles)
+                [self _deleteMediaObject:file];
+        }
+        // delete all files from an episode
+    } else if ([managedObject isKindOfClass:[MLShowEpisode class]]) {
+        MLShowEpisode *episode = managedObject;
+        NSSet *iterFiles = [NSSet setWithSet:episode.files];
+
+        for (MLFile *file in iterFiles)
+            [self _deleteMediaObject:file];
+        // delete all files from a track
+    } else if ([managedObject isKindOfClass:[MLAlbumTrack class]]) {
+        MLAlbumTrack *track = managedObject;
+        NSSet *iterFiles = [NSSet setWithSet:track.files];
+
+        for (MLFile *file in iterFiles)
+            [self _deleteMediaObject:file];
+    }
+
+    [[MLMediaLibrary sharedMediaLibrary] updateMediaDatabase];
+    [self updateViewContents];
+}
+
+- (void)_deleteMediaObject:(MLFile *)mediaObject
 {
 {
     NSFileManager *fileManager = [NSFileManager defaultManager];
     NSFileManager *fileManager = [NSFileManager defaultManager];
     NSString *folderLocation = [[[NSURL URLWithString:mediaObject.url] path] stringByDeletingLastPathComponent];
     NSString *folderLocation = [[[NSURL URLWithString:mediaObject.url] path] stringByDeletingLastPathComponent];
@@ -221,8 +265,6 @@
         currentIndex = [indexSet indexGreaterThanIndex:currentIndex];
         currentIndex = [indexSet indexGreaterThanIndex:currentIndex];
     }
     }
     [fileManager removeItemAtPath:[[NSURL URLWithString:mediaObject.url] path] error:nil];
     [fileManager removeItemAtPath:[[NSURL URLWithString:mediaObject.url] path] error:nil];
-    [[MLMediaLibrary sharedMediaLibrary] updateMediaDatabase];
-    [self updateViewContents];
 }
 }
 
 
 - (void)_displayEmptyLibraryViewIfNeeded
 - (void)_displayEmptyLibraryViewIfNeeded
@@ -355,47 +397,8 @@
 
 
 - (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
 - (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
 {
 {
-    if (editingStyle == UITableViewCellEditingStyleDelete) {
-        // delete all tracks from an album
-        id managedObject = _foundMedia[indexPath.row];
-        if ([managedObject isKindOfClass:[MLAlbum class]]) {
-            MLAlbum *album = managedObject;
-            NSSet *iterAlbumTrack = [NSSet setWithSet:album.tracks];
-
-            for (MLAlbumTrack *track in iterAlbumTrack) {
-                NSSet *iterFiles = [NSSet setWithSet:track.files];
-
-                for (MLFile *file in iterFiles)
-                    [self removeMediaObject:file];
-            }
-        // delete all episodes from a show
-        } else if ([managedObject isKindOfClass:[MLShow class]]) {
-            MLShow *show = managedObject;
-            NSSet *iterShowEpisodes = [NSSet setWithSet:show.episodes];
-
-            for (MLShowEpisode *episode in iterShowEpisodes) {
-                NSSet *iterFiles = [NSSet setWithSet:episode.files];
-
-                for (MLFile *file in iterFiles)
-                    [self removeMediaObject:file];
-            }
-        // delete all files from an episode
-        } else if ([managedObject isKindOfClass:[MLShowEpisode class]]) {
-            MLShowEpisode *episode = managedObject;
-            NSSet *iterFiles = [NSSet setWithSet:episode.files];
-
-            for (MLFile *file in iterFiles)
-                [self removeMediaObject:file];
-        // delete all files from a track
-        } else if ([managedObject isKindOfClass:[MLAlbumTrack class]]) {
-            MLAlbumTrack *track = managedObject;
-            NSSet *iterFiles = [NSSet setWithSet:track.files];
-
-            for (MLFile *file in iterFiles)
-                [self removeMediaObject:file];
-        } else
-            [self removeMediaObject: managedObject]; // this must be a plain file
-    }
+    if (editingStyle == UITableViewCellEditingStyleDelete)
+        [self removeMediaObject: _foundMedia[indexPath.row]];
 }
 }
 
 
 - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
 - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath