VLCPlaybackController+MediaLibrary.m 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. /*****************************************************************************
  2. * VLCPlaybackController+MediaLibrary.m
  3. * VLC for iOS
  4. *****************************************************************************
  5. * Copyright (c) 2015 VideoLAN. All rights reserved.
  6. * $Id$
  7. *
  8. * Authors: Tobias Conradi <videolan # tobias-conradi.de>
  9. *
  10. * Refer to the COPYING file of the official project for license.
  11. *****************************************************************************/
  12. #import "VLCPlaybackController+MediaLibrary.h"
  13. #import <MediaLibraryKit/MediaLibraryKit.h>
  14. #import <CoreData/CoreData.h>
  15. @implementation VLCPlaybackController (MediaLibrary)
  16. - (void)playMediaLibraryObject:(NSManagedObject *)mediaObject
  17. {
  18. if ([mediaObject isKindOfClass:[MLFile class]]) {
  19. [self configureWithFile:(MLFile *)mediaObject];
  20. }
  21. else if ([mediaObject isKindOfClass:[MLAlbumTrack class]]) {
  22. [self configureWithAlbumTrack:(MLAlbumTrack *)mediaObject];
  23. }
  24. else if ([mediaObject isKindOfClass:[MLShowEpisode class]])
  25. [self configureWithSingleFile:[(MLShowEpisode*)mediaObject files].anyObject];
  26. [self startPlayback];
  27. }
  28. - (void)configureWithFile:(MLFile *)file
  29. {
  30. if (file.labels.count == 0) {
  31. [self configureWithSingleFile:file];
  32. } else {
  33. MLLabel *folder = [file.labels anyObject];
  34. NSArray *files = [folder sortedFolderItems];
  35. int index = (int)[files indexOfObject:file];
  36. [self configureMediaListWithFiles:files indexToPlay:index];
  37. }
  38. }
  39. - (void)configureWithSingleFile:(MLFile *)file
  40. {
  41. [file setUnread:@(NO)];
  42. self.fileFromMediaLibrary = file;
  43. }
  44. - (void)configureWithAlbumTrack:(MLAlbumTrack *)albumTrack
  45. {
  46. NSArray *tracks = [[albumTrack album] sortedTracks];
  47. NSMutableArray *files = [NSMutableArray arrayWithCapacity:tracks.count];
  48. for (MLAlbumTrack *track in tracks) {
  49. MLFile *file = track.files.anyObject;
  50. [files addObject:file];
  51. }
  52. int index = (int)[tracks indexOfObject:albumTrack];
  53. [self configureMediaListWithFiles:files indexToPlay:index];
  54. }
  55. - (void)configureMediaListWithFiles:(NSArray *)files indexToPlay:(int)index
  56. {
  57. VLCMediaList *list = [[VLCMediaList alloc] init];
  58. for (MLFile *file in files.reverseObjectEnumerator) {
  59. [list addMedia:[VLCMedia mediaWithURL:file.url]];
  60. }
  61. [self configureMediaList:list atIndex:index];
  62. }
  63. - (void)configureMediaList:(VLCMediaList *)list atIndex:(int)index
  64. {
  65. self.mediaList = list;
  66. self.itemInMediaListToBePlayedFirst = index;
  67. self.pathToExternalSubtitlesFile = nil;
  68. }
  69. @end