From fa63a9ef8709aa747f0bc0cc2666b60f7086e4c0 Mon Sep 17 00:00:00 2001
From: Ash Mishra <a.mishra@nfb.ca>
Date: Fri, 6 Jul 2018 16:38:24 -0700
Subject: [PATCH] Fix for textTracks not being set before selectedTextTrack
 (bug found on iOS 9.3)

---
 ios/RCTVideo.m | 23 ++++++++++++-----------
 1 file changed, 12 insertions(+), 11 deletions(-)

diff --git a/ios/RCTVideo.m b/ios/RCTVideo.m
index cd8cec75..fd2eb30f 100644
--- a/ios/RCTVideo.m
+++ b/ios/RCTVideo.m
@@ -350,7 +350,7 @@ static NSString *const timedMetadata = @"timedMetadata";
   bool isNetwork = [RCTConvert BOOL:[source objectForKey:@"isNetwork"]];
   bool isAsset = [RCTConvert BOOL:[source objectForKey:@"isAsset"]];
   NSString *uri = [source objectForKey:@"uri"];
-  NSString *subtitleUri = _selectedTextTrack[@"uri"];
+  NSString *subtitleUri = self.selectedTextTrack[@"uri"];
   NSString *type = [source objectForKey:@"type"];
   NSDictionary *headers = [source objectForKey:@"requestHeaders"];
 
@@ -381,7 +381,7 @@ static NSString *const timedMetadata = @"timedMetadata";
     asset = [AVURLAsset URLAssetWithURL:[[NSURL alloc] initFileURLWithPath:[[NSBundle mainBundle] pathForResource:uri ofType:type]] options:nil];
   }
   
-  if (!_textTracks || !_selectedTextTrack) return [AVPlayerItem playerItemWithAsset:asset];
+  if (!_textTracks || !self.selectedTextTrack) return [AVPlayerItem playerItemWithAsset:asset];
   
   // otherwise sideload text tracks
   AVAssetTrack *videoAsset = [asset tracksWithMediaType:AVMediaTypeVideo].firstObject;
@@ -721,19 +721,20 @@ static NSString *const timedMetadata = @"timedMetadata";
   _repeat = repeat;
 }
 
+- (NSDictionary*) selectedTextTrack {
+  if (_textTracks) {
+    [self setSideloadedTextTrack];
+  }
+  else  [self setStreamingTextTrack];
+  
+  return _selectedTextTrack;
+}
+
 - (void)setSelectedTextTrack:(NSDictionary *)selectedTextTrack {
   
   _selectedTextTrack = selectedTextTrack;
   
-  // when textTracks exist, we set side-loaded subtitles
-  if (_textTracks) {
-    [self setSideloadedTextTrack];
-    return;
-  }
-  
-  // otherwise check for subtitles in the streaming asset (.m3u8)
-  
-  [self setStreamingTextTrack];
+
 }
 
 - (void)setSideloadedTextTrack {