Commit ce80f390 authored by Tobias's avatar Tobias Committed by Felix Paul Kühne

move playlist array logic from VLCPlaylistInterfaceController to...

move playlist array logic from VLCPlaylistInterfaceController to MLMediaLibrary category which eventually can be uses by both the iOS and Watch App
parent 1b2bf10b
/*****************************************************************************
* MLMediaLibrary+playlist.h
* VLC for iOS
*****************************************************************************
* Copyright (c) 2015 VideoLAN. All rights reserved.
* $Id$
*
* Authors: Tobias Conradi <videolan # tobias-conradi.de>
* Carola Nitz <caro # videolan.org>
* Felix Paul Kühne <fkuehne # videolan.org>
*
* Refer to the COPYING file of the official project for license.
*****************************************************************************/
#import <MediaLibraryKit/MLMediaLibrary.h>
typedef NS_ENUM(NSUInteger, VLCLibraryMode) {
VLCLibraryModeNone = 0,
VLCLibraryModeAllFiles,
VLCLibraryModeAllAlbums,
VLCLibraryModeAllSeries,
};
@interface MLMediaLibrary (playlist)
- (NSArray *)playlistArrayForGroupObject:(id)groupObject;
- (NSArray *)playlistArrayForLibraryMode:(VLCLibraryMode)libraryMode;
@end
/*****************************************************************************
* MLMediaLibrary+playlist.m
* VLC for iOS
*****************************************************************************
* Copyright (c) 2015 VideoLAN. All rights reserved.
* $Id$
*
* Authors: Tobias Conradi <videolan # tobias-conradi.de>
* Carola Nitz <caro # videolan.org>
* Felix Paul Kühne <fkuehne # videolan.org>
*
* Refer to the COPYING file of the official project for license.
*****************************************************************************/
#import "MLMediaLibrary+playlist.h"
#import <UIKit/UIKit.h>
#import <MediaLibraryKit/MediaLibraryKit.h>
@implementation MLMediaLibrary (playlist)
- (NSArray *)playlistArrayForGroupObject:(id)groupObject
{
if([groupObject isKindOfClass:[MLLabel class]]) {
return [(MLLabel *)groupObject sortedFolderItems];
} else if ([groupObject isKindOfClass:[MLAlbum class]]) {
return [(MLAlbum *)groupObject sortedTracks];
} else if ([groupObject isKindOfClass:[MLShow class]]){
return [(MLShow *)groupObject sortedEpisodes];
} else {
NSAssert(NO, @"this shouldn't have happened check the grouObjects type");
return nil;
}
}
//TODO: this code could use refactoring to be more readable
- (NSArray *)playlistArrayForLibraryMode:(VLCLibraryMode)libraryMode
{
NSMutableArray *objects = [NSMutableArray array];
/* add all albums */
if (libraryMode != VLCLibraryModeAllSeries) {
NSArray *rawAlbums = [MLAlbum allAlbums];
for (MLAlbum *album in rawAlbums) {
if (album.name.length > 0 && album.tracks.count > 1)
[objects addObject:album];
}
}
if (libraryMode == VLCLibraryModeAllAlbums) {
return objects;
}
/* add all shows */
NSArray *rawShows = [MLShow allShows];
for (MLShow *show in rawShows) {
if (show.name.length > 0 && show.episodes.count > 1)
[objects addObject:show];
}
if (libraryMode == VLCLibraryModeAllSeries) {
return objects;
}
/* add all folders*/
NSArray *allFolders = [MLLabel allLabels];
for (MLLabel *folder in allFolders)
[objects addObject:folder];
/* add all remaining files */
NSArray *allFiles = [MLFile allFiles];
for (MLFile *file in allFiles) {
if (file.labels.count > 0) continue;
if (!file.isShowEpisode && !file.isAlbumTrack)
[objects addObject:file];
else if (file.isShowEpisode) {
if (file.showEpisode.show.episodes.count < 2)
[objects addObject:file];
/* older MediaLibraryKit versions don't send a show name in a popular
* corner case. hence, we need to work-around here and force a reload
* afterwards as this could lead to the 'all my shows are gone'
* syndrome (see #10435, #10464, #10432 et al) */
if (file.showEpisode.show.name.length == 0) {
file.showEpisode.show.name = NSLocalizedString(@"UNTITLED_SHOW", nil);
}
} else if (file.isAlbumTrack) {
if (file.albumTrack.album.tracks.count < 2)
[objects addObject:file];
}
}
return objects;
}
@end
...@@ -20,18 +20,12 @@ ...@@ -20,18 +20,12 @@
#import "VLCNotificationRelay.h" #import "VLCNotificationRelay.h"
#import "VLCWatchTableController.h" #import "VLCWatchTableController.h"
#import "NSManagedObjectContext+refreshAll.h" #import "NSManagedObjectContext+refreshAll.h"
#import "MLMediaLibrary+playlist.h"
static NSString *const rowType = @"mediaRow"; static NSString *const rowType = @"mediaRow";
static NSString *const VLCDBUpdateNotification = @"VLCUpdateDataBase"; static NSString *const VLCDBUpdateNotification = @"VLCUpdateDataBase";
static NSString *const VLCDBUpdateNotificationRemote = @"org.videolan.ios-app.dbupdate"; static NSString *const VLCDBUpdateNotificationRemote = @"org.videolan.ios-app.dbupdate";
typedef enum {
VLCLibraryModeAllFiles = 0,
VLCLibraryModeAllAlbums = 1,
VLCLibraryModeAllSeries = 2,
VLCLibraryModeInGroup = 3
} VLCLibraryMode;
@interface VLCPlaylistInterfaceController() @interface VLCPlaylistInterfaceController()
{ {
CGRect _thumbnailSize; CGRect _thumbnailSize;
...@@ -62,7 +56,7 @@ typedef enum { ...@@ -62,7 +56,7 @@ typedef enum {
} else { } else {
self.groupObject = context; self.groupObject = context;
self.title = [self.groupObject name]; self.title = [self.groupObject name];
self.libraryMode = VLCLibraryModeInGroup; self.libraryMode = VLCLibraryModeNone;
} }
[self addNowPlayingMenu]; [self addNowPlayingMenu];
...@@ -140,77 +134,6 @@ typedef enum { ...@@ -140,77 +134,6 @@ typedef enum {
self.tableController.objects = [self mediaArray]; self.tableController.objects = [self mediaArray];
} }
//TODO: this code could use refactoring to be more readable
- (NSMutableArray *)mediaArray {
if (_libraryMode == VLCLibraryModeInGroup) {
id groupObject = self.groupObject;
if([groupObject isKindOfClass:[MLLabel class]]) {
return [NSMutableArray arrayWithArray:[(MLLabel *)groupObject sortedFolderItems]];
} else if ([groupObject isKindOfClass:[MLAlbum class]]) {
return [NSMutableArray arrayWithArray:[(MLAlbum *)groupObject sortedTracks]];
} else if ([groupObject isKindOfClass:[MLShow class]]){
return [NSMutableArray arrayWithArray:[(MLShow *)groupObject sortedEpisodes]];
} else {
NSAssert(NO, @"this shouldn't have happened check the grouObjects type");
}
}
NSMutableArray *objects = [NSMutableArray array];
/* add all albums */
if (_libraryMode != VLCLibraryModeAllSeries) {
NSArray *rawAlbums = [MLAlbum allAlbums];
for (MLAlbum *album in rawAlbums) {
if (album.name.length > 0 && album.tracks.count > 1)
[objects addObject:album];
}
}
if (_libraryMode == VLCLibraryModeAllAlbums) {
return objects;
}
/* add all shows */
NSArray *rawShows = [MLShow allShows];
for (MLShow *show in rawShows) {
if (show.name.length > 0 && show.episodes.count > 1)
[objects addObject:show];
}
if (_libraryMode == VLCLibraryModeAllSeries) {
return objects;
}
/* add all folders*/
NSArray *allFolders = [MLLabel allLabels];
for (MLLabel *folder in allFolders)
[objects addObject:folder];
/* add all remaining files */
NSArray *allFiles = [MLFile allFiles];
for (MLFile *file in allFiles) {
if (file.labels.count > 0) continue;
if (!file.isShowEpisode && !file.isAlbumTrack)
[objects addObject:file];
else if (file.isShowEpisode) {
if (file.showEpisode.show.episodes.count < 2)
[objects addObject:file];
/* older MediaLibraryKit versions don't send a show name in a popular
* corner case. hence, we need to work-around here and force a reload
* afterwards as this could lead to the 'all my shows are gone'
* syndrome (see #10435, #10464, #10432 et al) */
if (file.showEpisode.show.name.length == 0) {
file.showEpisode.show.name = NSLocalizedString(@"UNTITLED_SHOW", nil);
}
} else if (file.isAlbumTrack) {
if (file.albumTrack.album.tracks.count < 2)
[objects addObject:file];
}
}
return objects;
}
- (void)setLibraryMode:(VLCLibraryMode)libraryMode - (void)setLibraryMode:(VLCLibraryMode)libraryMode
{ {
...@@ -219,4 +142,14 @@ typedef enum { ...@@ -219,4 +142,14 @@ typedef enum {
_libraryMode = libraryMode; _libraryMode = libraryMode;
} }
- (NSArray *)mediaArray
{
id groupObject = self.groupObject;
if (groupObject) {
return [[MLMediaLibrary sharedMediaLibrary] playlistArrayForGroupObject:groupObject];
} else {
return [[MLMediaLibrary sharedMediaLibrary] playlistArrayForLibraryMode:self.libraryMode];
}
}
@end @end
...@@ -552,6 +552,8 @@ ...@@ -552,6 +552,8 @@
DD02C30E1ACAF4A50026EFEE /* VLCRowController.m in Sources */ = {isa = PBXBuildFile; fileRef = DD02C30D1ACAF4A50026EFEE /* VLCRowController.m */; }; DD02C30E1ACAF4A50026EFEE /* VLCRowController.m in Sources */ = {isa = PBXBuildFile; fileRef = DD02C30D1ACAF4A50026EFEE /* VLCRowController.m */; };
DD1542121ACFF76400AFD4EC /* VLCWatchTableController.m in Sources */ = {isa = PBXBuildFile; fileRef = DD1542111ACFF76400AFD4EC /* VLCWatchTableController.m */; }; DD1542121ACFF76400AFD4EC /* VLCWatchTableController.m in Sources */ = {isa = PBXBuildFile; fileRef = DD1542111ACFF76400AFD4EC /* VLCWatchTableController.m */; };
DD6FA7B01ACD641C006DEB2E /* VLCNowPlayingInterfaceController.m in Sources */ = {isa = PBXBuildFile; fileRef = DD6FA7AF1ACD641C006DEB2E /* VLCNowPlayingInterfaceController.m */; }; DD6FA7B01ACD641C006DEB2E /* VLCNowPlayingInterfaceController.m in Sources */ = {isa = PBXBuildFile; fileRef = DD6FA7AF1ACD641C006DEB2E /* VLCNowPlayingInterfaceController.m */; };
DD7110F01AF38B2B00854776 /* MLMediaLibrary+playlist.m in Sources */ = {isa = PBXBuildFile; fileRef = DD7110EF1AF38B2B00854776 /* MLMediaLibrary+playlist.m */; };
DD7110F11AF38B2B00854776 /* MLMediaLibrary+playlist.m in Sources */ = {isa = PBXBuildFile; fileRef = DD7110EF1AF38B2B00854776 /* MLMediaLibrary+playlist.m */; };
DD7635D61AF262D100240CB8 /* NSManagedObjectContext+refreshAll.m in Sources */ = {isa = PBXBuildFile; fileRef = DD7635D51AF262D100240CB8 /* NSManagedObjectContext+refreshAll.m */; }; DD7635D61AF262D100240CB8 /* NSManagedObjectContext+refreshAll.m in Sources */ = {isa = PBXBuildFile; fileRef = DD7635D51AF262D100240CB8 /* NSManagedObjectContext+refreshAll.m */; };
DDACEB561ADAD11300735484 /* WKInterfaceObject+VLCProgress.m in Sources */ = {isa = PBXBuildFile; fileRef = DDACEB551ADAD11300735484 /* WKInterfaceObject+VLCProgress.m */; }; DDACEB561ADAD11300735484 /* WKInterfaceObject+VLCProgress.m in Sources */ = {isa = PBXBuildFile; fileRef = DDACEB551ADAD11300735484 /* WKInterfaceObject+VLCProgress.m */; };
DDC10BE41AEE8EA700890DC3 /* VLCTimeNavigationTitleView.m in Sources */ = {isa = PBXBuildFile; fileRef = DDC10BE31AEE8EA700890DC3 /* VLCTimeNavigationTitleView.m */; }; DDC10BE41AEE8EA700890DC3 /* VLCTimeNavigationTitleView.m in Sources */ = {isa = PBXBuildFile; fileRef = DDC10BE31AEE8EA700890DC3 /* VLCTimeNavigationTitleView.m */; };
...@@ -1618,6 +1620,8 @@ ...@@ -1618,6 +1620,8 @@
DD1542111ACFF76400AFD4EC /* VLCWatchTableController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = VLCWatchTableController.m; sourceTree = "<group>"; }; DD1542111ACFF76400AFD4EC /* VLCWatchTableController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = VLCWatchTableController.m; sourceTree = "<group>"; };
DD6FA7AE1ACD641C006DEB2E /* VLCNowPlayingInterfaceController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = VLCNowPlayingInterfaceController.h; sourceTree = "<group>"; }; DD6FA7AE1ACD641C006DEB2E /* VLCNowPlayingInterfaceController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = VLCNowPlayingInterfaceController.h; sourceTree = "<group>"; };
DD6FA7AF1ACD641C006DEB2E /* VLCNowPlayingInterfaceController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = VLCNowPlayingInterfaceController.m; sourceTree = "<group>"; }; DD6FA7AF1ACD641C006DEB2E /* VLCNowPlayingInterfaceController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = VLCNowPlayingInterfaceController.m; sourceTree = "<group>"; };
DD7110EE1AF38B2B00854776 /* MLMediaLibrary+playlist.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "MLMediaLibrary+playlist.h"; sourceTree = "<group>"; };
DD7110EF1AF38B2B00854776 /* MLMediaLibrary+playlist.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "MLMediaLibrary+playlist.m"; sourceTree = "<group>"; };
DD7635D41AF262D100240CB8 /* NSManagedObjectContext+refreshAll.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSManagedObjectContext+refreshAll.h"; sourceTree = "<group>"; }; DD7635D41AF262D100240CB8 /* NSManagedObjectContext+refreshAll.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSManagedObjectContext+refreshAll.h"; sourceTree = "<group>"; };
DD7635D51AF262D100240CB8 /* NSManagedObjectContext+refreshAll.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSManagedObjectContext+refreshAll.m"; sourceTree = "<group>"; }; DD7635D51AF262D100240CB8 /* NSManagedObjectContext+refreshAll.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSManagedObjectContext+refreshAll.m"; sourceTree = "<group>"; };
DDACEB541ADAD11300735484 /* WKInterfaceObject+VLCProgress.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "WKInterfaceObject+VLCProgress.h"; sourceTree = "<group>"; }; DDACEB541ADAD11300735484 /* WKInterfaceObject+VLCProgress.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "WKInterfaceObject+VLCProgress.h"; sourceTree = "<group>"; };
...@@ -2468,6 +2472,7 @@ ...@@ -2468,6 +2472,7 @@
A7924697170F0ED20036AAF2 /* Resources */, A7924697170F0ED20036AAF2 /* Resources */,
7D94FCE516DE7D1000F2623B /* Supporting Files */, 7D94FCE516DE7D1000F2623B /* Supporting Files */,
CC1BBC441704936500A20CBF /* External VLC Libraries */, CC1BBC441704936500A20CBF /* External VLC Libraries */,
DD7110ED1AF38AFD00854776 /* SharedSources */,
4173AEA11ABF1B850004101D /* VLC for iOS WatchKit Extension */, 4173AEA11ABF1B850004101D /* VLC for iOS WatchKit Extension */,
4173AEAF1ABF1B850004101D /* VLC for iOS WatchKit App */, 4173AEAF1ABF1B850004101D /* VLC for iOS WatchKit App */,
7D94FCDD16DE7D1000F2623B /* Frameworks */, 7D94FCDD16DE7D1000F2623B /* Frameworks */,
...@@ -3010,6 +3015,15 @@ ...@@ -3010,6 +3015,15 @@
name = "External VLC Libraries"; name = "External VLC Libraries";
sourceTree = "<group>"; sourceTree = "<group>";
}; };
DD7110ED1AF38AFD00854776 /* SharedSources */ = {
isa = PBXGroup;
children = (
DD7110EE1AF38B2B00854776 /* MLMediaLibrary+playlist.h */,
DD7110EF1AF38B2B00854776 /* MLMediaLibrary+playlist.m */,
);
path = SharedSources;
sourceTree = "<group>";
};
E0C04F921A25B41C0080331A /* Document Picker */ = { E0C04F921A25B41C0080331A /* Document Picker */ = {
isa = PBXGroup; isa = PBXGroup;
children = ( children = (
...@@ -3638,6 +3652,7 @@ ...@@ -3638,6 +3652,7 @@
DDF157B11ACB162700AAFBC6 /* MediaLibrary.xcdatamodeld in Sources */, DDF157B11ACB162700AAFBC6 /* MediaLibrary.xcdatamodeld in Sources */,
DDE490731ACE964200B1B5E3 /* VLCBaseInterfaceController.m in Sources */, DDE490731ACE964200B1B5E3 /* VLCBaseInterfaceController.m in Sources */,
DDE4906C1ACDB63F00B1B5E3 /* VLCNotificationRelay.m in Sources */, DDE4906C1ACDB63F00B1B5E3 /* VLCNotificationRelay.m in Sources */,
DD7110F11AF38B2B00854776 /* MLMediaLibrary+playlist.m in Sources */,
DD1542121ACFF76400AFD4EC /* VLCWatchTableController.m in Sources */, DD1542121ACFF76400AFD4EC /* VLCWatchTableController.m in Sources */,
DD02C30E1ACAF4A50026EFEE /* VLCRowController.m in Sources */, DD02C30E1ACAF4A50026EFEE /* VLCRowController.m in Sources */,
DD7635D61AF262D100240CB8 /* NSManagedObjectContext+refreshAll.m in Sources */, DD7635D61AF262D100240CB8 /* NSManagedObjectContext+refreshAll.m in Sources */,
...@@ -3696,6 +3711,7 @@ ...@@ -3696,6 +3711,7 @@
7DC19ADF1868C7BB00810BF7 /* VLCFirstStepsViewController.m in Sources */, 7DC19ADF1868C7BB00810BF7 /* VLCFirstStepsViewController.m in Sources */,
7DE56C1A1AD93F9100E8CA00 /* VLCPlaybackController.m in Sources */, 7DE56C1A1AD93F9100E8CA00 /* VLCPlaybackController.m in Sources */,
7DC72D6317B7ED24008A26D0 /* WhiteRaccoon.m in Sources */, 7DC72D6317B7ED24008A26D0 /* WhiteRaccoon.m in Sources */,
DD7110F01AF38B2B00854776 /* MLMediaLibrary+playlist.m in Sources */,
7D5CAA891A4AD763003F2CBC /* VLCTrackSelectorTableViewCell.m in Sources */, 7D5CAA891A4AD763003F2CBC /* VLCTrackSelectorTableViewCell.m in Sources */,
7D63C19018774B1700BD5256 /* VLCFirstStepsSecondPageViewController.m in Sources */, 7D63C19018774B1700BD5256 /* VLCFirstStepsSecondPageViewController.m in Sources */,
8F91EC79195CEC7900F5BCBA /* VLCOpenInActivity.m in Sources */, 8F91EC79195CEC7900F5BCBA /* VLCOpenInActivity.m in Sources */,
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment