VLCPlaybackController+MediaLibrary.m 3.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  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 configureWithShowEpisode:(MLShowEpisode *)mediaObject];
  26. if (self.activePlaybackSession) {
  27. self.sessionWillRestart = YES;
  28. [self stopPlayback];
  29. } else {
  30. self.sessionWillRestart = NO;
  31. [self startPlayback];
  32. }
  33. }
  34. - (void)configureWithFile:(MLFile *)file
  35. {
  36. if (file.labels.count == 0) {
  37. [self configureMediaListWithFiles:@[file] indexToPlay:0];
  38. } else {
  39. MLLabel *folder = [file.labels anyObject];
  40. NSArray *files = [folder sortedFolderItems];
  41. int index = (int)[files indexOfObject:file];
  42. [self configureMediaListWithFiles:files indexToPlay:index];
  43. }
  44. }
  45. - (void)configureWithShowEpisode:(MLShowEpisode *)showEpisode
  46. {
  47. NSArray *episodes = [[showEpisode show] sortedEpisodes];
  48. NSMutableArray *files = [NSMutableArray arrayWithCapacity:episodes.count];
  49. for (MLShowEpisode *episode in episodes) {
  50. MLFile *file = episode.files.anyObject;
  51. if (files)
  52. [files addObject:file];
  53. }
  54. int index = (int)[episodes indexOfObject:showEpisode];
  55. [self configureMediaListWithFiles:files indexToPlay:index];
  56. }
  57. - (void)configureWithAlbumTrack:(MLAlbumTrack *)albumTrack
  58. {
  59. NSArray *tracks = [[albumTrack album] sortedTracks];
  60. NSMutableArray *files = [NSMutableArray arrayWithCapacity:tracks.count];
  61. for (MLAlbumTrack *track in tracks) {
  62. MLFile *file = track.files.anyObject;
  63. if (file)
  64. [files addObject:file];
  65. }
  66. int index = (int)[tracks indexOfObject:albumTrack];
  67. [self configureMediaListWithFiles:files indexToPlay:index];
  68. }
  69. - (void)configureMediaListWithFiles:(NSArray *)files indexToPlay:(int)index
  70. {
  71. VLCMediaList *list = [[VLCMediaList alloc] init];
  72. for (MLFile *file in files.reverseObjectEnumerator) {
  73. [list addMedia:[VLCMedia mediaWithURL:file.url]];
  74. }
  75. [self configureMediaList:list atIndex:index];
  76. }
  77. - (void)configureMediaList:(VLCMediaList *)list atIndex:(int)index
  78. {
  79. self.mediaList = list;
  80. self.itemInMediaListToBePlayedFirst = index;
  81. self.pathToExternalSubtitlesFile = nil;
  82. }
  83. @end