VLCMediaDataSource.swift 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134
  1. /*****************************************************************************
  2. * VLCMediaDataSource.swift
  3. * VLC for iOS
  4. *****************************************************************************
  5. * Copyright (c) 2017 VideoLAN. All rights reserved.
  6. * $Id$
  7. *
  8. * Authors: Carola Nitz <caro # videolan.org>
  9. *
  10. * Refer to the COPYING file of the official project for license.
  11. *****************************************************************************/
  12. import Foundation
  13. @objc class VLCMediaDataSource: NSObject {
  14. override init() {
  15. super.init()
  16. }
  17. }
  18. //Todo: Move discoverer code here
  19. // Todo: implement the remove
  20. // - (void)removeMediaObjectFromFolder:(NSManagedObject *)managedObject
  21. // {
  22. // NSAssert(([managedObject isKindOfClass:[MLFile class]] && ((MLFile *)managedObject).labels.count > 0), @"All media in a folder should be of type MLFile and it should be in a folder");
  23. //
  24. // if (![managedObject isKindOfClass:[MLFile class]]) return;
  25. //
  26. // MLFile *mediaFile = (MLFile *)managedObject;
  27. // [self rearrangeFolderTrackNumbersForRemovedItem:mediaFile];
  28. // mediaFile.labels = nil;
  29. // mediaFile.folderTrackNumber = nil;
  30. // }
  31. //
  32. // - (void)removeMediaObject:(NSManagedObject *)managedObject
  33. // {
  34. // if ([managedObject isKindOfClass:[MLAlbum class]]) {
  35. // MLAlbum *album = (MLAlbum *)managedObject;
  36. // NSSet *iterAlbumTrack = [NSSet setWithSet:album.tracks];
  37. //
  38. // for (MLAlbumTrack *track in iterAlbumTrack) {
  39. // NSSet *iterFiles = [NSSet setWithSet:track.files];
  40. //
  41. // for (MLFile *file in iterFiles)
  42. // [self _deleteMediaObject:file];
  43. // }
  44. // [[MLMediaLibrary sharedMediaLibrary] removeObject: album];
  45. // // delete all episodes from a show
  46. // } else if ([managedObject isKindOfClass:[MLShow class]]) {
  47. // MLShow *show = (MLShow *)managedObject;
  48. // NSSet *iterShowEpisodes = [NSSet setWithSet:show.episodes];
  49. //
  50. // for (MLShowEpisode *episode in iterShowEpisodes) {
  51. // NSSet *iterFiles = [NSSet setWithSet:episode.files];
  52. //
  53. // for (MLFile *file in iterFiles)
  54. // [self _deleteMediaObject:file];
  55. // }
  56. // [[MLMediaLibrary sharedMediaLibrary] removeObject: show];
  57. // // delete all files from an episode
  58. // } else if ([managedObject isKindOfClass:[MLShowEpisode class]]) {
  59. // MLShowEpisode *episode = (MLShowEpisode *)managedObject;
  60. // NSSet *iterFiles = [NSSet setWithSet:episode.files];
  61. //
  62. // for (MLFile *file in iterFiles)
  63. // [self _deleteMediaObject:file];
  64. // // delete all files from a track
  65. // [[MLMediaLibrary sharedMediaLibrary] removeObject: episode];
  66. // } else if ([managedObject isKindOfClass:[MLAlbumTrack class]]) {
  67. // MLAlbumTrack *track = (MLAlbumTrack *)managedObject;
  68. // NSSet *iterFiles = [NSSet setWithSet:track.files];
  69. //
  70. // for (MLFile *file in iterFiles)
  71. // [self _deleteMediaObject:file];
  72. // } else if ([managedObject isKindOfClass:[MLLabel class]]) {
  73. // MLLabel *folder = (MLLabel *)managedObject;
  74. // NSSet *iterFiles = [NSSet setWithSet:folder.files];
  75. // [folder removeFiles:folder.files];
  76. // for (MLFile *file in iterFiles)
  77. // [self _deleteMediaObject:file];
  78. // [[MLMediaLibrary sharedMediaLibrary] removeObject:folder];
  79. // }
  80. // else
  81. // [self _deleteMediaObject:(MLFile *)managedObject];
  82. // }
  83. //
  84. // - (void)_deleteMediaObject:(MLFile *)mediaObject
  85. // {
  86. // [self rearrangeFolderTrackNumbersForRemovedItem:mediaObject];
  87. //
  88. // /* stop playback if needed */
  89. // VLCPlaybackController *vpc = [VLCPlaybackController sharedInstance];
  90. // VLCMedia *media = [vpc currentlyPlayingMedia];
  91. // MLFile *currentlyPlayingFile = [MLFile fileForURL:media.url].firstObject;
  92. // if (currentlyPlayingFile && currentlyPlayingFile == mediaObject) {
  93. // [vpc stopPlayback];
  94. // }
  95. //
  96. // NSFileManager *fileManager = [NSFileManager defaultManager];
  97. // NSString *folderLocation = [[mediaObject.url path] stringByDeletingLastPathComponent];
  98. // NSArray *allfiles = [fileManager contentsOfDirectoryAtPath:folderLocation error:nil];
  99. // NSString *fileName = [mediaObject.path.lastPathComponent stringByDeletingPathExtension];
  100. // if (!fileName)
  101. // return;
  102. // NSIndexSet *indexSet = [allfiles indexesOfObjectsPassingTest:^BOOL(id obj, NSUInteger idx, BOOL *stop) {
  103. // return ([obj rangeOfString:fileName].location != NSNotFound);
  104. // }];
  105. // NSUInteger count = indexSet.count;
  106. // NSString *additionalFilePath;
  107. // NSUInteger currentIndex = [indexSet firstIndex];
  108. // for (unsigned int x = 0; x < count; x++) {
  109. // additionalFilePath = allfiles[currentIndex];
  110. // if ([additionalFilePath isSupportedSubtitleFormat])
  111. // [fileManager removeItemAtPath:[folderLocation stringByAppendingPathComponent:additionalFilePath] error:nil];
  112. // currentIndex = [indexSet indexGreaterThanIndex:currentIndex];
  113. // }
  114. // [fileManager removeItemAtURL:mediaObject.url error:nil];
  115. // }
  116. //
  117. // - (void)rearrangeFolderTrackNumbersForRemovedItem:(MLFile *) mediaObject
  118. // {
  119. // MLLabel *label = [mediaObject.labels anyObject];
  120. // NSSet *allFiles = label.files;
  121. // for (MLFile *file in allFiles) {
  122. // if (file.folderTrackNumber > mediaObject.folderTrackNumber) {
  123. // int value = [file.folderTrackNumber intValue];
  124. // file.folderTrackNumber = [NSNumber numberWithInt:value - 1];
  125. // }
  126. // }
  127. // }
  128. // @end