VLCPlaybackController+MediaLibrary.m 3.3 KB

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