浏览代码

fix elapsed playback time update for now info center and watch app especially for continue playback from last playback position and scrubbing

Tobias Conradi 10 年之前
父节点
当前提交
d0406b4a20
共有 3 个文件被更改,包括 21 次插入4 次删除
  1. 1 0
      Sources/VLCMovieViewController.m
  2. 2 0
      Sources/VLCPlaybackController.h
  3. 18 4
      Sources/VLCPlaybackController.m

+ 1 - 0
Sources/VLCMovieViewController.m

@@ -685,6 +685,7 @@ typedef NS_ENUM(NSInteger, VLCPanType) {
 {
     if (!_positionSet) {
         [VLCPlaybackController sharedInstance].mediaPlayer.position = self.timeNavigationTitleView.positionSlider.value;
+        [[VLCPlaybackController sharedInstance] setNeedsMetadataUpdate];
         _positionSet = YES;
     }
 }

+ 2 - 0
Sources/VLCPlaybackController.h

@@ -80,4 +80,6 @@ currentMediaHasTrackToChooseFrom:(BOOL)currentMediaHasTrackToChooseFrom
 
 - (void)recoverDisplayedMetadata;
 
+- (void)setNeedsMetadataUpdate;
+
 @end

+ 18 - 4
Sources/VLCPlaybackController.m

@@ -43,6 +43,8 @@
     NSString *_artist;
     NSString *_albumName;
     BOOL _mediaIsAudioOnly;
+
+    BOOL _needsMetadataUpdate;
 }
 
 @end
@@ -482,8 +484,6 @@
         [_mediaPlayer performSelector:@selector(setTextRendererFont:) withObject:[self _resolveFontName]];
         [_mediaPlayer performSelector:@selector(setTextRendererFontSize:) withObject:[[NSUserDefaults standardUserDefaults] objectForKey:kVLCSettingSubtitlesFontSize]];
         [_mediaPlayer performSelector:@selector(setTextRendererFontColor:) withObject:[[NSUserDefaults standardUserDefaults] objectForKey:kVLCSettingSubtitlesFontColor]];
-
-        [self _updateDisplayedMetadata];
     } else if (currentState == VLCMediaPlayerStateError) {
         _playbackFailed = YES;
         if ([self.delegate respondsToSelector:@selector(presentingViewControllerShouldBeClosedAfterADelay:)])
@@ -510,6 +510,8 @@
               currentMediaHasTrackToChooseFrom:self.currentMediaHasTrackToChooseFrom
                        currentMediaHasChapters:self.currentMediaHasChapters
                          forPlaybackController:self];
+
+    [self setNeedsMetadataUpdate];
 }
 
 #pragma mark - playback controls
@@ -718,16 +720,28 @@
 #pragma mark - metadata handling
 - (void)mediaDidFinishParsing:(VLCMedia *)aMedia
 {
-    [self _updateDisplayedMetadata];
+    [self setNeedsMetadataUpdate];
 }
 
 - (void)mediaMetaDataDidChange:(VLCMedia*)aMedia
 {
-    [self _updateDisplayedMetadata];
+    [self setNeedsMetadataUpdate];
+}
+
+- (void)setNeedsMetadataUpdate
+{
+    if (_needsMetadataUpdate == NO) {
+        _needsMetadataUpdate = YES;
+        dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.5 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
+            [self _updateDisplayedMetadata];
+        });
+    }
 }
 
 - (void)_updateDisplayedMetadata
 {
+    _needsMetadataUpdate = NO;
+
     MLFile *item;
     NSNumber *trackNumber;
     _mediaIsAudioOnly = YES;