Commit 44b17119 authored by Baris Sencan's avatar Baris Sencan Committed by Brent Vatne
Browse files

Fix attachListeners method's threading issue & other notification handling issues

parent 17595f97
Loading
Loading
Loading
Loading
+9 −29
Changes for RCTVideo.m: 9 added lines, 29 removed lines.
Original line number Diff line number Diff line
@@ -120,13 +120,6 @@ static NSString *const statusKeyPath = @"status";
  [_progressUpdateTimer addToRunLoop:[NSRunLoop mainRunLoop] forMode:NSDefaultRunLoopMode];
}

- (void)notifyEnd:(NSNotification *)notification
{
    [_eventDispatcher sendInputEventWithName:RNVideoEventEnd body:@{
        @"target": self.reactTag
    }];
}

- (void)addPlayerItemObserver
{
  [_playerItem addObserver:self forKeyPath:statusKeyPath options:0 context:nil];
@@ -237,20 +230,26 @@ static NSString *const statusKeyPath = @"status";

- (void)attachListeners
{
  dispatch_async(dispatch_get_main_queue(), ^{
    // listen for end of file
    [[NSNotificationCenter defaultCenter] addObserver:self
        selector:@selector(notifyEnd:)
                                             selector:@selector(playerItemDidEnd:)
                                                 name:AVPlayerItemDidPlayToEndTimeNotification
                                               object:[_player currentItem]];

  });
}

- (void)playerItemDidReachEnd:(NSNotification *)notification
- (void)playerItemDidEnd:(NSNotification *)notification
{
  [_eventDispatcher sendInputEventWithName:RNVideoEventEnd body:@{
    @"target": self.reactTag
  }];
  if (_repeat) {
    AVPlayerItem *item = [notification object];
    [item seekToTime:kCMTimeZero];
    [self applyModifiers];
  }
}

#pragma mark - Prop setters

@@ -342,27 +341,8 @@ static NSString *const statusKeyPath = @"status";
  [self setPaused:_paused];
}

- (void)setRepeatEnabled
{
  [[NSNotificationCenter defaultCenter] addObserver:self
                                           selector:@selector(playerItemDidReachEnd:)
                                               name:AVPlayerItemDidPlayToEndTimeNotification
                                             object:[_player currentItem]];
}

- (void)setRepeatDisabled
{
  [[NSNotificationCenter defaultCenter] removeObserver:self];
}

- (void)setRepeat:(BOOL)repeat {
  _repeat = repeat;

  if (repeat) {
    [self setRepeatEnabled];
  } else {
    [self setRepeatDisabled];
  }
}

#pragma mark - React View Management