Commit 3ff84d71 authored by Felix Paul Kühne's avatar Felix Paul Kühne

Add UI for OSO

parent 314abea8
......@@ -15,6 +15,7 @@
@property (nonatomic, readonly) VLCMediaPlayer *mediaPlayer;
@property (nonatomic) NSString *title;
@property (nonatomic) NSString *cellIdentifier;
@property (nonatomic) UIViewController *parentViewController;
- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath;
@end
\ No newline at end of file
/*****************************************************************************
* VLC for iOS
*****************************************************************************
* Copyright (c) 2015 VideoLAN. All rights reserved.
* $Id$
*
* Authors: Felix Paul Kühne <fkuehne # videolan.org>
*
* Refer to the COPYING file of the official project for license.
*****************************************************************************/
#import <UIKit/UIKit.h>
#import "VLCPlaybackInfoPanelTVViewController.h"
@interface VLCPlaybackInfoSubtitlesFetcherViewController : VLCPlaybackInfoPanelTVViewController
@property (readwrite, weak, nonatomic) IBOutlet UITableView *tableView;
@property (readwrite, weak, nonatomic) IBOutlet UILabel *titleLabel;
@end
/*****************************************************************************
* VLC for iOS
*****************************************************************************
* Copyright (c) 2015 VideoLAN. All rights reserved.
* $Id$
*
* Authors: Felix Paul Kühne <fkuehne # videolan.org>
*
* Refer to the COPYING file of the official project for license.
*****************************************************************************/
#import "VLCPlaybackInfoSubtitlesFetcherViewController.h"
#import "MetadataFetcherKit.h"
#import "NSString+Locale.h"
#define SPUDownloadReUseIdentifier @"SPUDownloadReUseIdentifier"
#define SPUDownloadHeaderReUseIdentifier @"SPUDownloadHeaderReUseIdentifier"
@interface VLCPlaybackInfoSubtitlesFetcherViewController () <UITableViewDataSource, UITableViewDelegate, MDFOSOFetcherDataRecipient>
{
MDFOSOFetcher *_osoFetcher;
NSArray <MDFSubtitleItem *>* _searchResults;
}
@end
@implementation VLCPlaybackInfoSubtitlesFetcherViewController
- (void)viewDidLoad {
[super viewDidLoad];
self.titleLabel.text = self.title;
_osoFetcher = [[MDFOSOFetcher alloc] init];
_osoFetcher.userAgentKey = @"VLSub 0.9";
_osoFetcher.dataRecipient = self;
[_osoFetcher prepareForFetching];
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSString *selectedLocale = [defaults stringForKey:kVLCSettingLastUsedSubtitlesSearchLanguage];
if (!selectedLocale) {
NSString *preferredLanguage = [[NSLocale preferredLanguages] firstObject];
/* we may receive 'en_GB' so strip that to 'en' */
if ([preferredLanguage containsString:@"-"]) {
preferredLanguage = [[preferredLanguage componentsSeparatedByString:@"-"] firstObject];
}
selectedLocale = [preferredLanguage threeLetterLanguageKeyForTwoLetterCode];
/* last resort */
if (selectedLocale == nil) {
selectedLocale = @"eng";
}
[defaults setObject:selectedLocale forKey:kVLCSettingLastUsedSubtitlesSearchLanguage];
[defaults synchronize];
}
_osoFetcher.subtitleLanguageId = selectedLocale;
}
#pragma mark - OSO Fetcher delegation
- (void)MDFOSOFetcher:(MDFOSOFetcher *)aFetcher readyToSearch:(BOOL)bValue
{
if (!bValue)
return;
[self searchForMedia];
}
- (void)searchForMedia
{
VLCPlaybackController *vpc = [VLCPlaybackController sharedInstance];
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
_osoFetcher.subtitleLanguageId = [defaults stringForKey:kVLCSettingLastUsedSubtitlesSearchLanguage];
[_osoFetcher searchForSubtitlesWithQuery:vpc.mediaTitle];
}
- (void)MDFOSOFetcher:(MDFOSOFetcher *)aFetcher didFindSubtitles:(NSArray<MDFSubtitleItem *> *)subtitles forSearchRequest:(NSString *)searchRequest
{
_searchResults = subtitles;
[self.tableView reloadData];
}
#pragma mark - table view datasource
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
return 2;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
if (section == 0)
return 1;
if (_searchResults) {
return _searchResults.count;
}
return 0;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:SPUDownloadReUseIdentifier];
if (!cell)
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:SPUDownloadReUseIdentifier];
if (indexPath.section != 0) {
MDFSubtitleItem *item = _searchResults[indexPath.row];
cell.textLabel.text = item.name;
cell.detailTextLabel.text = [NSString stringWithFormat:@"%@ - %@", item.language, item.format];
cell.accessoryType = UITableViewCellAccessoryNone;
} else {
NSString *selectedLocale = [[NSUserDefaults standardUserDefaults] objectForKey:kVLCSettingLastUsedSubtitlesSearchLanguage];
cell.textLabel.text = NSLocalizedString(@"LANGUAGE", nil);
cell.detailTextLabel.text = [[selectedLocale twoLetterLanguageKeyForThreeLetterCode] localizedLanguageNameForTwoLetterCode];
cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
}
return cell;
}
- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section
{
if (section == 0)
return @"";
return @"Found items";
}
#pragma mark - table view delegate
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
if (indexPath.section == 0) {
UIAlertController *alertController = [UIAlertController alertControllerWithTitle:NSLocalizedString(@"LANGUAGE", nil)
message:nil preferredStyle:UIAlertControllerStyleActionSheet];
NSArray *languages = _osoFetcher.availableLanguages;
NSUInteger count = languages.count;
MDFSubtitleLanguage *item;
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSString *currentCode = [defaults stringForKey:kVLCSettingLastUsedSubtitlesSearchLanguage];
if (!currentCode)
currentCode = @"eng"; // FIXME
for (NSUInteger i = 0; i < count; i++) {
NSString *itemID = item.ID;
item = languages[i];
UIAlertAction *action = [UIAlertAction actionWithTitle:item.localizedName
style:UIAlertActionStyleDefault
handler:^(UIAlertAction * _Nonnull action) {
_osoFetcher.subtitleLanguageId = itemID;
[defaults setObject:itemID forKey:kVLCSettingLastUsedSubtitlesSearchLanguage];
[defaults synchronize];
[self searchForMedia];
}];
[alertController addAction:action];
if ([itemID isEqualToString:currentCode])
[alertController setPreferredAction:action];
}
[alertController addAction:[UIAlertAction actionWithTitle:NSLocalizedString(@"BUTTON_CANCEL", nil)
style:UIAlertActionStyleCancel
handler:nil]];
[self presentViewController:alertController animated:YES completion:nil];
}
}
@end
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<document type="com.apple.InterfaceBuilder.AppleTV.XIB" version="3.0" toolsVersion="9531" systemVersion="15C47a" targetRuntime="AppleTV" propertyAccessControl="none" useAutolayout="YES">
<dependencies>
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="9529"/>
</dependencies>
<objects>
<placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner" customClass="VLCPlaybackInfoSubtitlesFetcherViewController">
<connections>
<outlet property="preferredFocusedView" destination="KQh-Wx-8D3" id="K2Q-RS-elL"/>
<outlet property="tableView" destination="KQh-Wx-8D3" id="dMO-09-KJP"/>
<outlet property="titleLabel" destination="eRo-wP-AW8" id="R5P-l1-Qv2"/>
<outlet property="view" destination="iN0-l3-epB" id="Eym-vH-oyN"/>
</connections>
</placeholder>
<placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/>
<view clearsContextBeforeDrawing="NO" alpha="0.75" contentMode="scaleToFill" id="iN0-l3-epB">
<rect key="frame" x="0.0" y="0.0" width="1920" height="1080"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<visualEffectView opaque="NO" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="oKA-TY-HnF">
<rect key="frame" x="0.0" y="0.0" width="1920" height="1080"/>
<view key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" id="nvn-lb-FkI">
<rect key="frame" x="0.0" y="0.0" width="1920" height="1080"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
</view>
<blurEffect style="light"/>
</visualEffectView>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Label" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="eRo-wP-AW8">
<rect key="frame" x="870" y="100" width="180" height="91"/>
<fontDescription key="fontDescription" style="UICTFontTextStyleTitle1"/>
<color key="textColor" white="0.33333333333333331" alpha="1" colorSpace="calibratedWhite"/>
<nil key="highlightedColor"/>
</label>
<tableView clipsSubviews="YES" contentMode="scaleToFill" alwaysBounceVertical="YES" style="plain" separatorStyle="default" rowHeight="66" sectionHeaderHeight="40" sectionFooterHeight="40" translatesAutoresizingMaskIntoConstraints="NO" id="KQh-Wx-8D3">
<rect key="frame" x="460" y="230" width="1000" height="620"/>
<color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
<color key="sectionIndexBackgroundColor" red="0.43529411759999997" green="0.4431372549" blue="0.47450980390000003" alpha="1" colorSpace="calibratedRGB"/>
<connections>
<outlet property="dataSource" destination="-1" id="0hS-DY-15g"/>
<outlet property="delegate" destination="-1" id="WmP-OZ-DyT"/>
</connections>
</tableView>
</subviews>
<constraints>
<constraint firstAttribute="bottom" secondItem="KQh-Wx-8D3" secondAttribute="bottom" constant="230" id="Atf-r7-E8j"/>
<constraint firstItem="oKA-TY-HnF" firstAttribute="leading" secondItem="iN0-l3-epB" secondAttribute="leading" id="IHI-B8-FrW"/>
<constraint firstItem="KQh-Wx-8D3" firstAttribute="top" secondItem="iN0-l3-epB" secondAttribute="top" constant="230" id="KJl-Ql-Yef"/>
<constraint firstItem="KQh-Wx-8D3" firstAttribute="leading" secondItem="iN0-l3-epB" secondAttribute="leading" constant="460" id="KWf-bV-4fd"/>
<constraint firstAttribute="bottom" secondItem="oKA-TY-HnF" secondAttribute="bottom" id="V1i-VL-rro"/>
<constraint firstAttribute="trailing" secondItem="oKA-TY-HnF" secondAttribute="trailing" id="Wzp-7e-763"/>
<constraint firstAttribute="trailing" secondItem="KQh-Wx-8D3" secondAttribute="trailing" constant="460" id="f0w-aM-hCu"/>
<constraint firstItem="oKA-TY-HnF" firstAttribute="top" secondItem="iN0-l3-epB" secondAttribute="top" id="huo-HQ-ZbL"/>
<constraint firstItem="eRo-wP-AW8" firstAttribute="top" secondItem="iN0-l3-epB" secondAttribute="top" constant="100" id="n3g-9h-bjT"/>
<constraint firstItem="eRo-wP-AW8" firstAttribute="centerX" secondItem="iN0-l3-epB" secondAttribute="centerX" id="y6O-bl-OfU"/>
</constraints>
</view>
</objects>
</document>
......@@ -41,8 +41,7 @@
if (vpc.mediaPlayer.isSeekable)
[vcArray addObject:_rateVC];
if (vpc.currentMediaHasTrackToChooseFrom)
[vcArray addObject:_tracksVC];
[vcArray addObject:_tracksVC];
if (vpc.currentMediaHasChapters)
[vcArray addObject:_chaptersVC];
......
......@@ -13,6 +13,7 @@
#import "VLCPlaybackInfoTVCollectionViewCell.h"
#import "VLCPlaybackInfoTVCollectionSectionTitleView.h"
#import "VLCPlaybackInfoCollectionViewDataSource.h"
#import "VLCPlaybackInfoSubtitlesFetcherViewController.h"
#define CONTENT_INSET 20.
......@@ -40,7 +41,6 @@
return self;
}
- (void)viewDidLoad
{
[super viewDidLoad];
......@@ -56,6 +56,7 @@
self.audioDataSource.cellIdentifier = [VLCPlaybackInfoTVCollectionViewCell identifier];
self.subtitleDataSource.title = [NSLocalizedString(@"SUBTITLES", nil) uppercaseStringWithLocale:currentLocale];
self.subtitleDataSource.cellIdentifier = [VLCPlaybackInfoTVCollectionViewCell identifier];
self.subtitleDataSource.parentViewController = self;
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(mediaPlayerChanged) name:VLCPlaybackControllerPlaybackMetadataDidChange object:nil];
}
......@@ -82,6 +83,15 @@
[self.subtitleTrackCollectionView reloadData];
}
- (void)downloadMoreSPU
{
VLCPlaybackInfoSubtitlesFetcherViewController *targetViewController = [[VLCPlaybackInfoSubtitlesFetcherViewController alloc] initWithNibName:nil bundle:nil];
targetViewController.title = @"Download subtitles from OpenSubtitles.org...";;
[self presentViewController:targetViewController
animated:YES
completion:nil];
}
@end
@implementation VLCPlaybackInfoTracksDataSourceAudio
......@@ -116,27 +126,43 @@
@implementation VLCPlaybackInfoTracksDataSourceSubtitle
- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section
{
return self.mediaPlayer.numberOfSubtitlesTracks;
return self.mediaPlayer.numberOfSubtitlesTracks + 1;
}
- (void)collectionView:(UICollectionView *)collectionView willDisplayCell:(UICollectionViewCell *)cell forItemAtIndexPath:(NSIndexPath *)indexPath
{
VLCPlaybackInfoTVCollectionViewCell *trackCell = (VLCPlaybackInfoTVCollectionViewCell*)cell;
NSInteger row = indexPath.row;
BOOL isSelected = [self.mediaPlayer.videoSubTitlesIndexes[row] intValue] == self.mediaPlayer.currentVideoSubTitleIndex;
trackCell.selectionMarkerVisible = isSelected;
NSString *trackName = self.mediaPlayer.videoSubTitlesNames[row];
if (trackName != nil) {
if ([trackName isEqualToString:@"Disable"])
trackName = NSLocalizedString(@"DISABLE_LABEL", nil);
NSArray *spuTitleIndexes = self.mediaPlayer.videoSubTitlesIndexes;
NSString *trackName;
if (row >= spuTitleIndexes.count) {
trackName = @"Download subtitles from OpenSubtitles.org...";
} else {
BOOL isSelected = [self.mediaPlayer.videoSubTitlesIndexes[row] intValue] == self.mediaPlayer.currentVideoSubTitleIndex;
trackCell.selectionMarkerVisible = isSelected;
trackName = self.mediaPlayer.videoSubTitlesNames[row];
if (trackName != nil) {
if ([trackName isEqualToString:@"Disable"])
trackName = NSLocalizedString(@"DISABLE_LABEL", nil);
}
}
trackCell.titleLabel.text = trackName;
}
-(void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath
{
self.mediaPlayer.currentVideoSubTitleIndex = [self.mediaPlayer.videoSubTitlesIndexes[indexPath.row] intValue];
[collectionView reloadData];
NSArray *spuTitleIndexes = self.mediaPlayer.videoSubTitlesIndexes;
NSInteger row = indexPath.row;
if (row >= spuTitleIndexes.count) {
if (self.parentViewController) {
if ([self.parentViewController respondsToSelector:@selector(downloadMoreSPU)]) {
[self.parentViewController performSelector:@selector(downloadMoreSPU)];
}
}
} else {
self.mediaPlayer.currentVideoSubTitleIndex = [self.mediaPlayer.videoSubTitlesIndexes[row] intValue];
[collectionView reloadData];
}
}
@end
......@@ -16,7 +16,6 @@
#import "VLCAboutViewController.h"
#define SettingsReUseIdentifier @"SettingsReUseIdentifier"
#define SettingsHeaderReUseIdentifier @"SettingsHeaderReUseIdentifier"
@interface VLCSettingsViewController () <UITableViewDataSource, UITableViewDelegate>
{
......
......@@ -57,6 +57,7 @@
#define kVLCSettingFTPTextEncodingDefaultValue @(5) // ISO Latin 1
#define kVLCSettingSaveHTTPUploadServerStatus @"isHTTPServerOn"
#define kVLCSettingLastUsedSubtitlesSearchLanguage @"kVLCSettingLastUsedSubtitlesSearchLanguage"
#define kVLCSettingWiFiSharingIPv6 @"wifi-sharing-ipv6"
#define kVLCSettingWiFiSharingIPv6DefaultValue @(NO)
......
......@@ -428,6 +428,9 @@
7DDE41931BE925820065C53A /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 7D13294E1BA1F10100BE647E /* Assets.xcassets */; };
7DDFF4251BDFD23300913BD1 /* VLCCone512x512.png in Resources */ = {isa = PBXBuildFile; fileRef = 7DDFF4241BDFD23300913BD1 /* VLCCone512x512.png */; };
7DE56C1A1AD93F9100E8CA00 /* VLCPlaybackController.m in Sources */ = {isa = PBXBuildFile; fileRef = 7DE56C191AD93F9100E8CA00 /* VLCPlaybackController.m */; };
7DEBF3791C075EBC007A4043 /* VLCPlaybackInfoSubtitlesFetcherViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 7DEBF3771C075EBC007A4043 /* VLCPlaybackInfoSubtitlesFetcherViewController.m */; };
7DEBF37A1C075EBC007A4043 /* VLCPlaybackInfoSubtitlesFetcherViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 7DEBF3781C075EBC007A4043 /* VLCPlaybackInfoSubtitlesFetcherViewController.xib */; };
7DEBF37F1C076EE8007A4043 /* NSString+Locale.m in Sources */ = {isa = PBXBuildFile; fileRef = 7DEBF37E1C076EE8007A4043 /* NSString+Locale.m */; };
7DEC8BD91BD670EB006E1093 /* VLCPlaybackNavigationController.m in Sources */ = {isa = PBXBuildFile; fileRef = 7D9CB9DB1A4C55EF00BB74B4 /* VLCPlaybackNavigationController.m */; };
7DEC8BDA1BD67112006E1093 /* VLCFrostedGlasView.m in Sources */ = {isa = PBXBuildFile; fileRef = 9BADAF44185FBD9D00108BD8 /* VLCFrostedGlasView.m */; };
7DEC8BDE1BD67899006E1093 /* VLCFullscreenMovieTVViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 7DEC8BDC1BD67899006E1093 /* VLCFullscreenMovieTVViewController.m */; };
......@@ -1109,6 +1112,11 @@
7DE56C181AD93F9100E8CA00 /* VLCPlaybackController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = VLCPlaybackController.h; path = Sources/VLCPlaybackController.h; sourceTree = SOURCE_ROOT; };
7DE56C191AD93F9100E8CA00 /* VLCPlaybackController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = VLCPlaybackController.m; path = Sources/VLCPlaybackController.m; sourceTree = SOURCE_ROOT; };
7DEB3B5F17647DE30038FC70 /* iTunesArtwork@2x */ = {isa = PBXFileReference; lastKnownFileType = file; path = "iTunesArtwork@2x"; sourceTree = "<group>"; };
7DEBF3761C075EBC007A4043 /* VLCPlaybackInfoSubtitlesFetcherViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = VLCPlaybackInfoSubtitlesFetcherViewController.h; sourceTree = "<group>"; };
7DEBF3771C075EBC007A4043 /* VLCPlaybackInfoSubtitlesFetcherViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = VLCPlaybackInfoSubtitlesFetcherViewController.m; sourceTree = "<group>"; };
7DEBF3781C075EBC007A4043 /* VLCPlaybackInfoSubtitlesFetcherViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; name = VLCPlaybackInfoSubtitlesFetcherViewController.xib; path = "Playback/Playback Info/VLCPlaybackInfoSubtitlesFetcherViewController.xib"; sourceTree = "<group>"; };
7DEBF37D1C076ECE007A4043 /* NSString+Locale.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "NSString+Locale.h"; path = "SharedSources/NSString+Locale.h"; sourceTree = SOURCE_ROOT; };
7DEBF37E1C076EE8007A4043 /* NSString+Locale.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = "NSString+Locale.m"; path = "SharedSources/NSString+Locale.m"; sourceTree = SOURCE_ROOT; };
7DEC8BDB1BD67899006E1093 /* VLCFullscreenMovieTVViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = VLCFullscreenMovieTVViewController.h; sourceTree = "<group>"; };
7DEC8BDC1BD67899006E1093 /* VLCFullscreenMovieTVViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = VLCFullscreenMovieTVViewController.m; sourceTree = "<group>"; };
7DEC8BDD1BD67899006E1093 /* VLCFullscreenMovieTVViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = VLCFullscreenMovieTVViewController.xib; sourceTree = "<group>"; };
......@@ -2100,6 +2108,7 @@
7DC71D281BC83138001FACAA /* xibs */ = {
isa = PBXGroup;
children = (
7DEBF3781C075EBC007A4043 /* VLCPlaybackInfoSubtitlesFetcherViewController.xib */,
7DC5A3E61BF6370800CFEBA8 /* VLCRemotePlaybackViewController.xib */,
7DDE418E1BE9225A0065C53A /* VLCAboutViewController.xib */,
DD3EAC121BE26166003668DA /* VLCRemoteBrowsingTVCell.xib */,
......@@ -2360,6 +2369,8 @@
7D168F7318D4A33F003FAF59 /* UIImage+Blur.m */,
7DF9352D1958AB0600E60FD4 /* UIColor+Presets.h */,
7DF9352E1958AB0600E60FD4 /* UIColor+Presets.m */,
7DEBF37D1C076ECE007A4043 /* NSString+Locale.h */,
7DEBF37E1C076EE8007A4043 /* NSString+Locale.m */,
);
name = Extensions;
sourceTree = "<group>";
......@@ -2614,6 +2625,8 @@
DD4089F91BF659030022745E /* VLCPlaybackInfoTVCollectionSectionTitleView.m */,
DD9D8F691C01FE5B00B4060F /* VLCPlaybackInfoCollectionViewDataSource.h */,
DD9D8F6A1C01FE5B00B4060F /* VLCPlaybackInfoCollectionViewDataSource.m */,
7DEBF3761C075EBC007A4043 /* VLCPlaybackInfoSubtitlesFetcherViewController.h */,
7DEBF3771C075EBC007A4043 /* VLCPlaybackInfoSubtitlesFetcherViewController.m */,
);
path = "Playback Info";
sourceTree = "<group>";
......@@ -2927,6 +2940,7 @@
DD3EAC131BE26166003668DA /* VLCRemoteBrowsingTVCell.xib in Resources */,
7D3E528C1BD7B5E100309D15 /* VLCCloudServicesTVViewController.xib in Resources */,
7D405EDA1BEA1F56006ED886 /* style.css in Resources */,
7DEBF37A1C075EBC007A4043 /* VLCPlaybackInfoSubtitlesFetcherViewController.xib in Resources */,
7D7EF3DB1BD56B5900CD4CEE /* VLCOpenNetworkStreamTVViewController.xib in Resources */,
7DC5A3E81BF6370800CFEBA8 /* VLCRemotePlaybackViewController.xib in Resources */,
7DDE41901BE9225A0065C53A /* VLCAboutViewController.xib in Resources */,
......@@ -3256,6 +3270,7 @@
7DF383C11BF231BC00D71A5C /* VLCCloudStorageTVViewController.m in Sources */,
DD8095F91BE6268A0065D8E1 /* VLCPlaybackInfoPanelTVViewController.m in Sources */,
DD3EABE91BE13D5B003668DA /* VLCRemoteBrowsingTVCell.m in Sources */,
7DEBF3791C075EBC007A4043 /* VLCPlaybackInfoSubtitlesFetcherViewController.m in Sources */,
DD3EABFD1BE14C4B003668DA /* UIViewController+VLCAlert.m in Sources */,
7D7EF3DD1BD5779F00CD4CEE /* VLCPlaybackController.m in Sources */,
DD3EFF361BDEBCE500B68579 /* VLCLocalNetworkServiceBrowserNetService.m in Sources */,
......@@ -3271,6 +3286,7 @@
7D0EDE0A1BE7752C00363AA1 /* VLCNetworkServerBrowserFTP.m in Sources */,
DDBE44FF1BFB6A8B00E5D35E /* CAAnimation+VLCWiggle.m in Sources */,
DD3EFF4E1BDEBCE500B68579 /* VLCNetworkServerBrowserPlex.m in Sources */,
7DEBF37F1C076EE8007A4043 /* NSString+Locale.m in Sources */,
7DF90B4A1BE7A8110059C0E3 /* IASKSettingsReader.m in Sources */,
DD3EFF3E1BDEBCE500B68579 /* VLCLocalNetworkServiceBrowserHTTP.m in Sources */,
7DF383CB1BF2498800D71A5C /* VLCOneDriveCollectionViewController.m in Sources */,
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment