瀏覽代碼

vpc: fix repeated x-callback-url triggers and triggers from the background (closes #15744)

Felix Paul Kühne 9 年之前
父節點
當前提交
e4e45607d8
共有 2 個文件被更改,包括 16 次插入27 次删除
  1. 1 2
      Sources/VLCPlaybackController+MediaLibrary.m
  2. 15 25
      Sources/VLCPlaybackController.m

+ 1 - 2
Sources/VLCPlaybackController+MediaLibrary.m

@@ -128,9 +128,8 @@ Open a file in the libraryViewController without changing the playstate
 
 - (void)configureMediaList:(VLCMediaList *)list atIndex:(int)index
 {
-    self.mediaList = list;
-    self.itemInMediaListToBePlayedFirst = index;
     self.pathToExternalSubtitlesFile = nil;
+    [self playMediaList:list firstIndex:index];
 }
 
 @end

+ 15 - 25
Sources/VLCPlaybackController.m

@@ -349,21 +349,23 @@ NSString *const VLCPlaybackControllerPlaybackDidFail = @"VLCPlaybackControllerPl
         if (_listPlayer)
             _listPlayer = nil;
     }
-    if (_mediaList)
-        _mediaList = nil;
-    if (_url)
-        _url = nil;
-    if (_pathToExternalSubtitlesFile) {
-        NSFileManager *fileManager = [NSFileManager defaultManager];
-        if ([fileManager fileExistsAtPath:_pathToExternalSubtitlesFile])
-            [fileManager removeItemAtPath:_pathToExternalSubtitlesFile error:nil];
-        _pathToExternalSubtitlesFile = nil;
+    if (!_sessionWillRestart) {
+        if (_mediaList)
+            _mediaList = nil;
+        if (_url)
+            _url = nil;
+        if (_pathToExternalSubtitlesFile) {
+            NSFileManager *fileManager = [NSFileManager defaultManager];
+            if ([fileManager fileExistsAtPath:_pathToExternalSubtitlesFile])
+                [fileManager removeItemAtPath:_pathToExternalSubtitlesFile error:nil];
+            _pathToExternalSubtitlesFile = nil;
+        }
     }
     _playerIsSetup = NO;
 
-    if (self.errorCallback && _playbackFailed)
+    if (self.errorCallback && _playbackFailed && !_sessionWillRestart)
         [[UIApplication sharedApplication] openURL:self.errorCallback];
-    else if (self.successCallback)
+    else if (self.successCallback && !_sessionWillRestart)
         [[UIApplication sharedApplication] openURL:self.successCallback];
 
     [MPNowPlayingInfoCenter defaultCenter].nowPlayingInfo = nil;
@@ -569,12 +571,14 @@ NSString *const VLCPlaybackControllerPlaybackDidFail = @"VLCPlaybackControllerPl
     } else if (currentState == VLCMediaPlayerStateError) {
         APLog(@"Playback failed");
         _playbackFailed = YES;
+        self.sessionWillRestart = NO;
         [self stopPlayback];
     } else if ((currentState == VLCMediaPlayerStateEnded || currentState == VLCMediaPlayerStateStopped) && _listPlayer.repeatMode == VLCDoNotRepeat) {
         [_listPlayer.mediaList lock];
         NSUInteger listCount = _listPlayer.mediaList.count;
         if ([_listPlayer.mediaList indexOfMedia:_mediaPlayer.media] == listCount - 1) {
             [_listPlayer.mediaList unlock];
+            self.sessionWillRestart = NO;
             [self stopPlayback];
             return;
         } else if (listCount > 1) {
@@ -778,20 +782,6 @@ NSString *const VLCPlaybackControllerPlaybackDidFail = @"VLCPlaybackControllerPl
 
 #pragma mark - Managing the media item
 
-- (void)setUrl:(NSURL *)url
-{
-    [self stopPlayback];
-    _url = url;
-    _playerIsSetup = NO;
-}
-
-- (void)setMediaList:(VLCMediaList *)mediaList
-{
-    [self stopPlayback];
-    _mediaList = mediaList;
-    _playerIsSetup = NO;
-}
-
 #if TARGET_OS_IOS
 - (MLFile *)currentlyPlayingMediaFile {
     if (self.mediaList) {