VLCPlaybackController+MediaLibrary.m 3.2 KB

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