...
 
Commits (1)
---
BUNDLE_PATH: vendor/bundle
BUNDLE_DISABLE_SHARED_GEMS: '1'
......@@ -9,3 +9,4 @@ External
ImportedSources
DerivedData
Pods
vendor/bundle
source 'https://rubygems.org'
gem 'cocoapods', :git => 'https://github.com/CocoaPods/CocoaPods.git', :branch => 'tvos'
gem 'cocoapods-core', :git => 'https://github.com/CocoaPods/Core.git', :branch => 'tvos-support'
gem 'xcodeproj', :git => 'https://github.com/CocoaPods/Xcodeproj.git', :branch => 'tvos-support'
GIT
remote: https://github.com/CocoaPods/CocoaPods.git
revision: 25bcc14b04260939144496cc08f091061f5500de
branch: tvos
specs:
cocoapods (0.39.0.beta.4)
activesupport (>= 3.2.15)
claide (~> 0.9.1)
cocoapods-core (= 0.39.0.beta.4)
cocoapods-downloader (~> 0.9.3)
cocoapods-plugins (~> 0.4.2)
cocoapods-search (~> 0.1.0)
cocoapods-stats (~> 0.6.1)
cocoapods-trunk (~> 0.6.4)
cocoapods-try (~> 0.5.1)
colored (~> 1.2)
escape (~> 0.0.4)
molinillo (~> 0.3.1)
nap (~> 1.0)
xcodeproj (~> 0.27.2)
GIT
remote: https://github.com/CocoaPods/Core.git
revision: f60d8b4f28223ea2e02316efa52a612153d7fe2e
branch: tvos-support
specs:
cocoapods-core (0.39.0.beta.4)
activesupport (>= 3.2.15)
fuzzy_match (~> 2.0.4)
nap (~> 1.0)
GIT
remote: https://github.com/CocoaPods/Xcodeproj.git
revision: b208640ffd04ffb1ec1becc085e8b3f3759ff8f1
branch: tvos-support
specs:
xcodeproj (0.27.2)
activesupport (>= 3)
claide (~> 0.9.1)
colored (~> 1.2)
GEM
remote: https://rubygems.org/
specs:
activesupport (4.2.4)
i18n (~> 0.7)
json (~> 1.7, >= 1.7.7)
minitest (~> 5.1)
thread_safe (~> 0.3, >= 0.3.4)
tzinfo (~> 1.1)
claide (0.9.1)
cocoapods-downloader (0.9.3)
cocoapods-plugins (0.4.2)
nap
cocoapods-search (0.1.0)
cocoapods-stats (0.6.1)
cocoapods-trunk (0.6.4)
nap (>= 0.8, < 2.0)
netrc (= 0.7.8)
cocoapods-try (0.5.1)
colored (1.2)
escape (0.0.4)
fuzzy_match (2.0.4)
i18n (0.7.0)
json (1.8.3)
minitest (5.8.0)
molinillo (0.3.1)
nap (1.0.0)
netrc (0.7.8)
thread_safe (0.3.5)
tzinfo (1.2.2)
thread_safe (~> 0.1)
PLATFORMS
ruby
DEPENDENCIES
cocoapods!
cocoapods-core!
xcodeproj!
BUNDLED WITH
1.10.6
......@@ -9,13 +9,20 @@ target 'vlc-ios' do
pod 'OBSlider', '1.1.0'
pod 'GHSidebarNav', '1.0.0'
pod 'InAppSettingsKit', '2.2.2'
pod 'upnpx', '~>1.3.4'
pod 'upnpx', :podspec => 'vendor/upnpx.podspec'
pod 'HockeySDK', '~>3.6.4'
pod 'SSKeychain', '~>1.2.2'
pod 'box-ios-sdk-v2', :git => 'git://github.com/carolanitz/box-ios-sdk-v2.git', :commit => 'd2df30aa5f76d30910e06f3ef5aff49025de3cf1' #has a logout function added
pod 'RESideMenu', '~>4.0.7'
end
target 'VLC for Apple TV' do
platform :tvos, '9.0'
pod 'upnpx', :podspec => 'vendor/upnpx.podspec'
end
post_install do |installer_representation|
installer_representation.pods_project.build_configurations.each do |config|
config.build_settings['SKIP_INSTALL'] = 'YES'
......
......@@ -19,12 +19,14 @@ DEPENDENCIES:
- OBSlider (= 1.1.0)
- RESideMenu (~> 4.0.7)
- SSKeychain (~> 1.2.2)
- upnpx (~> 1.3.4)
- upnpx (from `vendor/upnpx.podspec`)
EXTERNAL SOURCES:
box-ios-sdk-v2:
:commit: d2df30aa5f76d30910e06f3ef5aff49025de3cf1
:git: git://github.com/carolanitz/box-ios-sdk-v2.git
upnpx:
:podspec: vendor/upnpx.podspec
CHECKOUT OPTIONS:
box-ios-sdk-v2:
......@@ -39,6 +41,6 @@ SPEC CHECKSUMS:
OBSlider: 490f108007bfdd5414a38650b211fe403a95b8a0
RESideMenu: f24c508404b49c667344c54aba7e590883533958
SSKeychain: 88767e903ee8d274ed380e364d96b7a101235286
upnpx: 790dcf9598818385d881ca39a5b77b184b7d291a
upnpx: a480f282159960290fc2a620c7937a785b3e4b82
COCOAPODS: 0.38.2
COCOAPODS: 0.39.0.beta.4
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<document type="com.apple.InterfaceBuilder.AppleTV.Storyboard" version="3.0" toolsVersion="6211" systemVersion="14A298i" targetRuntime="AppleTV" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" initialViewController="49e-Tb-3d3">
<document type="com.apple.InterfaceBuilder.AppleTV.Storyboard" version="3.0" toolsVersion="9046" systemVersion="14F27" targetRuntime="AppleTV" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" initialViewController="49e-Tb-3d3">
<dependencies>
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="6204"/>
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="9035"/>
</dependencies>
<scenes>
<!--First-->
<scene sceneID="hNz-n2-bh7">
<objects>
<viewController id="9pv-A4-QxB" customClass="FirstViewController" customModuleProvider="" sceneMemberID="viewController">
<viewController id="9pv-A4-QxB" customClass="FirstViewController" sceneMemberID="viewController">
<layoutGuides>
<viewControllerLayoutGuide type="top" id="Ia1-K6-d13"/>
<viewControllerLayoutGuide type="bottom" id="4ug-Mw-9AY"/>
</layoutGuides>
<view key="view" contentMode="scaleToFill" id="tsR-hK-woN">
<rect key="frame" x="0.0" y="0.0" width="1920" height="1080"/>
<rect key="frame" x="0.0" y="0.0" width="1285" height="1080"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleToFill" text="First View" textAlignment="center" lineBreakMode="tailTruncation" minimumFontSize="10" translatesAutoresizingMaskIntoConstraints="NO" id="KQZ-1w-vlD">
<rect key="frame" x="884" y="519" width="153" height="43"/>
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleToFill" misplaced="YES" text="First View" textAlignment="center" lineBreakMode="tailTruncation" minimumFontSize="10" translatesAutoresizingMaskIntoConstraints="NO" id="KQZ-1w-vlD">
<rect key="frame" x="566" y="519" width="153" height="43"/>
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="calibratedWhite"/>
<fontDescription key="fontDescription" type="system" pointSize="36"/>
<color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="calibratedRGB"/>
<nil key="highlightedColor"/>
</label>
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Loaded by FirstViewController" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="A5M-7J-77L">
<rect key="frame" x="863" y="570" width="194" height="17"/>
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" misplaced="YES" text="Loaded by FirstViewController" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="A5M-7J-77L">
<rect key="frame" x="545" y="570" width="194" height="17"/>
<fontDescription key="fontDescription" type="system" pointSize="14"/>
<color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="calibratedRGB"/>
<nil key="highlightedColor"/>
......@@ -44,45 +44,111 @@
</objects>
<point key="canvasLocation" x="2246" y="-640"/>
</scene>
<!--Second-->
<scene sceneID="wg7-f3-ORb">
<!--UPnP Servers-->
<scene sceneID="hqD-9z-56O">
<objects>
<viewController id="8rJ-Kc-sve" customClass="SecondViewController" customModuleProvider="" sceneMemberID="viewController">
<layoutGuides>
<viewControllerLayoutGuide type="top" id="L7p-HK-0SC"/>
<viewControllerLayoutGuide type="bottom" id="Djb-ko-YwX"/>
</layoutGuides>
<view key="view" contentMode="scaleToFill" id="QS5-Rx-YEW">
<tableViewController title="UPnP Servers" id="l98-N5-BW4" customClass="VLCUPnPTableViewController" sceneMemberID="viewController">
<tableView key="view" clipsSubviews="YES" contentMode="scaleToFill" alwaysBounceVertical="YES" dataMode="prototypes" style="plain" separatorStyle="default" rowHeight="66" sectionHeaderHeight="40" sectionFooterHeight="40" id="kY9-yU-BbX">
<rect key="frame" x="0.0" y="0.0" width="1920" height="1080"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleToFill" text="Second View" textAlignment="center" lineBreakMode="tailTruncation" minimumFontSize="10" translatesAutoresizingMaskIntoConstraints="NO" id="zEq-FU-wV5">
<rect key="frame" x="857" y="519" width="207" height="43"/>
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
<fontDescription key="fontDescription" type="system" pointSize="36"/>
<color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="calibratedRGB"/>
<nil key="highlightedColor"/>
</label>
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Loaded by SecondViewController" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="NDk-cv-Gan">
<rect key="frame" x="853" y="570" width="215" height="17"/>
<fontDescription key="fontDescription" type="system" pointSize="14"/>
<color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="calibratedRGB"/>
<nil key="highlightedColor"/>
</label>
</subviews>
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="calibratedWhite"/>
<constraints>
<constraint firstItem="NDk-cv-Gan" firstAttribute="top" secondItem="zEq-FU-wV5" secondAttribute="bottom" constant="8" symbolic="YES" id="Day-4N-Vmt"/>
<constraint firstItem="NDk-cv-Gan" firstAttribute="centerX" secondItem="zEq-FU-wV5" secondAttribute="centerX" id="JgO-Fn-dHn"/>
<constraint firstAttribute="centerX" secondItem="zEq-FU-wV5" secondAttribute="centerX" id="qqM-NS-xev"/>
<constraint firstAttribute="centerY" secondItem="zEq-FU-wV5" secondAttribute="centerY" id="qzY-Ky-pLD"/>
</constraints>
</view>
<tabBarItem key="tabBarItem" title="Second" image="second" id="cPa-gy-q4n"/>
</viewController>
<placeholder placeholderIdentifier="IBFirstResponder" id="4Nw-L8-lE0" sceneMemberID="firstResponder"/>
<prototypes>
<tableViewCell contentMode="scaleToFill" misplaced="YES" selectionStyle="default" indentationWidth="10" reuseIdentifier="networkCell" textLabel="fCo-1K-Ebm" style="IBUITableViewCellStyleDefault" id="trs-hJ-cZc">
<rect key="frame" x="0.0" y="199" width="1890" height="66"/>
<autoresizingMask key="autoresizingMask"/>
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="trs-hJ-cZc" id="ar8-vf-oi9">
<rect key="frame" x="0.0" y="0.0" width="1904" height="66"/>
<autoresizingMask key="autoresizingMask"/>
<subviews>
<label opaque="NO" multipleTouchEnabled="YES" contentMode="left" text="Title" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="fCo-1K-Ebm">
<rect key="frame" x="20" y="0.0" width="1864" height="66"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<fontDescription key="fontDescription" type="system" pointSize="38"/>
<color key="textColor" cocoaTouchSystemColor="darkTextColor"/>
<nil key="highlightedColor"/>
</label>
</subviews>
</tableViewCellContentView>
<connections>
<segue destination="0ks-xH-ETi" kind="showDetail" identifier="showUPnP" id="YcH-QE-2ZU"/>
</connections>
</tableViewCell>
</prototypes>
<connections>
<outlet property="dataSource" destination="l98-N5-BW4" id="wBL-pa-Te3"/>
<outlet property="delegate" destination="l98-N5-BW4" id="N44-o0-TkQ"/>
</connections>
</tableView>
<navigationItem key="navigationItem" title="Root View Controller" id="GMH-kj-ibJ"/>
</tableViewController>
<placeholder placeholderIdentifier="IBFirstResponder" id="B3d-jh-T2A" userLabel="First Responder" sceneMemberID="firstResponder"/>
</objects>
<point key="canvasLocation" x="4473" y="971"/>
</scene>
<!--PnP Server List View Controller-->
<scene sceneID="OBK-SU-dHU">
<objects>
<tableViewController id="0ks-xH-ETi" customClass="VLCUPnPServerListViewController" sceneMemberID="viewController">
<tableView key="view" clipsSubviews="YES" contentMode="scaleToFill" alwaysBounceVertical="YES" dataMode="prototypes" style="plain" separatorStyle="default" rowHeight="114" sectionHeaderHeight="40" sectionFooterHeight="40" id="cXC-lh-KTv">
<rect key="frame" x="0.0" y="0.0" width="1285" height="1080"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<prototypes>
<tableViewCell contentMode="scaleToFill" misplaced="YES" selectionStyle="default" indentationWidth="10" reuseIdentifier="cell" textLabel="oOt-aH-Ecu" detailTextLabel="7H1-T6-1kJ" rowHeight="114" style="IBUITableViewCellStyleSubtitle" id="v8b-3V-RZq">
<rect key="frame" x="0.0" y="54" width="1255" height="114"/>
<autoresizingMask key="autoresizingMask"/>
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="v8b-3V-RZq" id="d4Q-nN-fAJ">
<rect key="frame" x="0.0" y="0.0" width="1269" height="114"/>
<autoresizingMask key="autoresizingMask"/>
<subviews>
<label opaque="NO" multipleTouchEnabled="YES" contentMode="left" text="Title" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="oOt-aH-Ecu">
<rect key="frame" x="20" y="11" width="72" height="46"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<fontDescription key="fontDescription" type="system" pointSize="38"/>
<color key="textColor" cocoaTouchSystemColor="darkTextColor"/>
<nil key="highlightedColor"/>
</label>
<label opaque="NO" multipleTouchEnabled="YES" contentMode="left" text="Detail" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="7H1-T6-1kJ">
<rect key="frame" x="20" y="57" width="96" height="46"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<fontDescription key="fontDescription" type="system" pointSize="38"/>
<color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="0.40000000000000002" colorSpace="calibratedRGB"/>
<nil key="highlightedColor"/>
</label>
</subviews>
</tableViewCellContentView>
<connections>
<segue destination="0ks-xH-ETi" kind="showDetail" identifier="showUPnP" id="v9H-aw-ONv"/>
</connections>
</tableViewCell>
</prototypes>
<connections>
<outlet property="dataSource" destination="0ks-xH-ETi" id="rbp-BK-nfH"/>
<outlet property="delegate" destination="0ks-xH-ETi" id="UFr-m6-z3D"/>
</connections>
</tableView>
<connections>
<segue destination="9pv-A4-QxB" kind="showDetail" identifier="showFromURL" id="qBl-Cg-wao"/>
</connections>
</tableViewController>
<placeholder placeholderIdentifier="IBFirstResponder" id="uuI-oS-t6D" userLabel="First Responder" sceneMemberID="firstResponder"/>
</objects>
<point key="canvasLocation" x="6749.5" y="823"/>
</scene>
<!--UPnP-->
<scene sceneID="nbe-Rs-i7W">
<objects>
<navigationController id="dbV-0x-zND" sceneMemberID="viewController">
<tabBarItem key="tabBarItem" title="UPnP" id="lqh-dx-hws"/>
<navigationBar key="navigationBar" contentMode="scaleToFill" id="Efb-0S-Scn">
<rect key="frame" x="0.0" y="0.0" width="1920" height="145"/>
<autoresizingMask key="autoresizingMask"/>
</navigationBar>
<connections>
<segue destination="l98-N5-BW4" kind="relationship" relationship="rootViewController" id="P5a-8W-lWp"/>
</connections>
</navigationController>
<placeholder placeholderIdentifier="IBFirstResponder" id="hss-2b-7v2" userLabel="First Responder" sceneMemberID="firstResponder"/>
</objects>
<point key="canvasLocation" x="2246" y="624"/>
<point key="canvasLocation" x="2293" y="957"/>
</scene>
<!--Tab Bar Controller-->
<scene sceneID="yl2-sM-qoP">
......@@ -96,16 +162,19 @@
</tabBar>
<connections>
<segue destination="9pv-A4-QxB" kind="relationship" relationship="viewControllers" id="u7Y-xg-7CH"/>
<segue destination="8rJ-Kc-sve" kind="relationship" relationship="viewControllers" id="lzU-1b-eKA"/>
<segue destination="dbV-0x-zND" kind="relationship" relationship="viewControllers" id="C5j-XM-hh1"/>
</connections>
</tabBarController>
<placeholder placeholderIdentifier="IBFirstResponder" id="HuB-VB-40B" sceneMemberID="firstResponder"/>
</objects>
<point key="canvasLocation" x="0.0" y="0.0"/>
<point key="canvasLocation" x="82" y="326"/>
</scene>
</scenes>
<resources>
<image name="first" width="30" height="30"/>
<image name="second" width="30" height="30"/>
</resources>
<inferredMetricsTieBreakers>
<segue reference="YcH-QE-2ZU"/>
<segue reference="qBl-Cg-wao"/>
</inferredMetricsTieBreakers>
</document>
......@@ -12,7 +12,7 @@
#import <UIKit/UIKit.h>
@interface FirstViewController : UIViewController
@property (nonatomic, strong) NSURL *url;
@end
......@@ -19,7 +19,10 @@
@end
@implementation FirstViewController
- (void)awakeFromNib {
[super awakeFromNib];
self.url = [NSURL URLWithString:@"http://streams.videolan.org/streams/mp4/Mr_MrsSmith-h264_aac.mp4"];
}
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
......@@ -34,7 +37,7 @@
_mediaplayer.drawable = self.view;
/* create a media object and give it to the player */
_mediaplayer.media = [VLCMedia mediaWithURL:[NSURL URLWithString:@"http://streams.videolan.org/streams/mp4/Mr_MrsSmith-h264_aac.mp4"]];
_mediaplayer.media = [VLCMedia mediaWithURL:self.url];
[_mediaplayer play];
}
......
......@@ -28,5 +28,10 @@
<array>
<string>arm64</string>
</array>
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>
</dict>
</plist>
/*****************************************************************************
* VLCUPnPServerListViewController.h
* VLC for iOS
*****************************************************************************
* Copyright (c) 2015 VideoLAN. All rights reserved.
* $Id$
*
* Authors: Felix Paul Kühne <fkuehne # videolan.org>
* Author: Felix Paul Kühne <fkuehne # videolan.org>
*
* Refer to the COPYING file of the official project for license.
*****************************************************************************/
#import "SecondViewController.h"
#import "VLCNetworkListViewController.h"
@interface SecondViewController ()
@class MediaServer1Device;
@end
@implementation SecondViewController
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
}
@interface VLCUPnPServerListViewController : UITableViewController
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
- (void)configureWithUPNPDevice:(MediaServer1Device *)device header:(NSString *)header andRootID:(NSString *)rootID;
@end
/*****************************************************************************
* VLCUPnPServerListViewController.m
* VLC for iOS
*****************************************************************************
* Copyright (c) 2013-2015 VideoLAN. All rights reserved.
* $Id$
*
* Authors: Felix Paul Kühne <fkuehne # videolan.org>
* Marc Etcheverry <marc@taplightsoftware.com>
* Pierre SAGASPE <pierre.sagaspe # me.com>
*
* Refer to the COPYING file of the official project for license.
*****************************************************************************/
#import "VLCUPnPServerListViewController.h"
#import "NSString+SupportedMedia.h"
#import "MediaServerBasicObjectParser.h"
#import "MediaServer1ItemObject.h"
#import "MediaServer1ContainerObject.h"
#import "MediaServer1Device.h"
#import "BasicUPnPDevice+VLC.h"
#import <upnpx/UPnPManager.h>
#import "FirstViewController.h"
@interface VLCUPnPServerListViewController () <UITableViewDataSource, UITableViewDelegate>
{
MediaServer1Device *_UPNPdevice;
NSString *_UPNProotID;
NSMutableArray *_mutableObjectList;
NSMutableArray *_searchData;
MediaServer1ItemObject *_lastSelectedMediaItem;
UIView *_resourceSelectionActionSheetAnchorView;
}
@end
@implementation VLCUPnPServerListViewController
- (void)configureWithUPNPDevice:(MediaServer1Device*)device header:(NSString*)header andRootID:(NSString*)rootID
{
_UPNPdevice = device;
self.title = header;
_UPNProotID = rootID;
}
- (void)viewDidLoad
{
[super viewDidLoad];
_mutableObjectList = [[NSMutableArray alloc] init];
NSString *sortCriteria = @"";
NSMutableString *outSortCaps = [[NSMutableString alloc] init];
[[_UPNPdevice contentDirectory] GetSortCapabilitiesWithOutSortCaps:outSortCaps];
if ([outSortCaps rangeOfString:@"dc:title"].location != NSNotFound)
{
sortCriteria = @"+dc:title";
}
NSMutableString *outResult = [[NSMutableString alloc] init];
NSMutableString *outNumberReturned = [[NSMutableString alloc] init];
NSMutableString *outTotalMatches = [[NSMutableString alloc] init];
NSMutableString *outUpdateID = [[NSMutableString alloc] init];
[[_UPNPdevice contentDirectory] BrowseWithObjectID:_UPNProotID BrowseFlag:@"BrowseDirectChildren" Filter:@"*" StartingIndex:@"0" RequestedCount:@"0" SortCriteria:sortCriteria OutResult:outResult OutNumberReturned:outNumberReturned OutTotalMatches:outTotalMatches OutUpdateID:outUpdateID];
[_mutableObjectList removeAllObjects];
NSData *didl = [outResult dataUsingEncoding:NSUTF8StringEncoding];
MediaServerBasicObjectParser *parser;
@synchronized(self) {
parser = [[MediaServerBasicObjectParser alloc] initWithMediaObjectArray:_mutableObjectList itemsOnly:NO];
}
[parser parseFromData:didl];
}
#pragma mark - table view data source, for more see super
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
return _mutableObjectList.count;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"cell"];
MediaServer1BasicObject *item;
item = _mutableObjectList[indexPath.row];
if (![item isContainer]) {
MediaServer1ItemObject *mediaItem;
long long mediaSize = 0;
unsigned int durationInSeconds = 0;
unsigned int bitrate = 0;
MediaServer1ItemRes *resource = nil;
NSEnumerator *e = [[mediaItem resources] objectEnumerator];
while((resource = (MediaServer1ItemRes*)[e nextObject])){
if (resource.bitrate > 0 && resource.durationInSeconds > 0) {
mediaSize = resource.size;
durationInSeconds = resource.durationInSeconds;
bitrate = resource.bitrate;
}
}
if (mediaSize < 1)
mediaSize = [mediaItem.size longLongValue];
if (mediaSize < 1)
mediaSize = (bitrate * durationInSeconds);
// object.item.videoItem.videoBroadcast items (like the HDHomeRun) may not have this information. Center the title (this makes channel names look better for the HDHomeRun)
if (mediaSize > 0 && durationInSeconds > 0) {
[cell.detailTextLabel setText: [NSString stringWithFormat:@"%@ (%@)", [NSByteCountFormatter stringFromByteCount:mediaSize countStyle:NSByteCountFormatterCountStyleFile], [VLCTime timeWithInt:durationInSeconds * 1000].stringValue]];
}
// Custom TV icon for video broadcasts
if ([[mediaItem objectClass] isEqualToString:@"object.item.videoItem.videoBroadcast"]) {
UIImage *broadcastImage;
if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone) {
broadcastImage = [UIImage imageNamed:@"TVBroadcastIcon"];
} else {
broadcastImage = [UIImage imageNamed:@"TVBroadcastIcon~ipad"];
}
cell.imageView.image = broadcastImage;
} else {
cell.imageView.image = [UIImage imageNamed:@"blank"];
}
} else {
cell.imageView.image = [UIImage imageNamed:@"folder"];
}
cell.textLabel.text = [item title];
return cell;
}
#pragma mark - table view delegate, for more see super
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
MediaServer1BasicObject *item;
item = _mutableObjectList[indexPath.row];
if ([item isContainer]) {
MediaServer1ContainerObject *container;
container = _mutableObjectList[indexPath.row];
[self performSegueWithIdentifier:@"showUPnP" sender:container];
} else {
MediaServer1ItemObject *mediaItem;
mediaItem = _mutableObjectList[indexPath.row];
NSURL *itemURL;
NSArray *uriCollectionKeys = [[mediaItem uriCollection] allKeys];
NSUInteger count = uriCollectionKeys.count;
NSRange position;
NSUInteger correctIndex = 0;
NSUInteger numberOfDownloadableResources = 0;
for (NSUInteger i = 0; i < count; i++) {
position = [uriCollectionKeys[i] rangeOfString:@"http-get:*:video/"];
if (position.location != NSNotFound) {
correctIndex = i;
numberOfDownloadableResources++;
}
}
NSArray *uriCollectionObjects = [[mediaItem uriCollection] allValues];
// Present an action sheet for the user to choose which URI to download. Do not deselect the cell to provide visual feedback to the user
if (numberOfDownloadableResources > 1) {
_resourceSelectionActionSheetAnchorView = [tableView cellForRowAtIndexPath:indexPath];
// [self presentResourceSelectionActionSheetForUPnPMediaItem:mediaItem forDownloading:NO];
} else {
if (uriCollectionObjects.count > 0) {
itemURL = [NSURL URLWithString:uriCollectionObjects[correctIndex]];
}
if (itemURL) {
[self performSegueWithIdentifier:@"showFromURL" sender:itemURL];
}
}
}
[tableView deselectRowAtIndexPath:indexPath animated:NO];
}
// In a storyboard-based application, you will often want to do a little preparation before navigation
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
if ([segue.identifier isEqualToString:@"showUPnP"]) {
MediaServer1ContainerObject *container = sender;
[(VLCUPnPServerListViewController *)segue.destinationViewController configureWithUPNPDevice:_UPNPdevice header:[container title] andRootID:[container objectID]];
} else if ([segue.identifier isEqualToString:@"showFromURL"]) {
[(FirstViewController *)segue.destinationViewController setUrl:sender];
}
}
- (BOOL)shouldPerformSegueWithIdentifier:(NSString *)identifier sender:(id)sender {
if ([sender isKindOfClass:[UITableViewCell class]]) {
return false;
}
return true;
}
@end
......@@ -4,15 +4,13 @@
* Copyright (c) 2015 VideoLAN. All rights reserved.
* $Id$
*
* Authors: Felix Paul Kühne <fkuehne # videolan.org>
* Authors: Tobias Conradi <videolan@tobias-conradi.de>
*
* Refer to the COPYING file of the official project for license.
*****************************************************************************/
#import <UIKit/UIKit.h>
@interface SecondViewController : UIViewController
@interface VLCUPnPTableViewController : UITableViewController
@end
/*****************************************************************************
* VLC for iOS
*****************************************************************************
* Copyright (c) 2015 VideoLAN. All rights reserved.
* $Id$
*
* Authors: Tobias Conradi <videolan@tobias-conradi.de>
*
* Refer to the COPYING file of the official project for license.
*****************************************************************************/
#import "VLCUPnPTableViewController.h"
#import <upnpx/UPnPManager.h>
#import "VLCUPnPServerListViewController.h"
@interface VLCUPnPTableViewController () <UPnPDBObserver>
{
NSArray *_filteredUPNPDevices;
NSArray *_UPNPdevices;
BOOL _udnpDiscoveryRunning;
NSTimer *_searchTimer;
BOOL _setup;
}
@end
@implementation VLCUPnPTableViewController
- (void)viewDidLoad {
[super viewDidLoad];
// Uncomment the following line to preserve selection between presentations.
// self.clearsSelectionOnViewWillAppear = NO;
// Uncomment the following line to display an Edit button in the navigation bar for this view controller.
// self.navigationItem.rightBarButtonItem = self.editButtonItem;
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
- (void)viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];
[self _startUPNPDiscovery];
}
- (void)viewDidDisappear:(BOOL)animated {
[super viewDidDisappear:animated];
[self _stopUPNPDiscovery];
}
#pragma mark - Table view data source
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
return 1;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
return _filteredUPNPDevices.count;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"networkCell" forIndexPath:indexPath];
BasicUPnPDevice *device = _filteredUPNPDevices[indexPath.row];
cell.textLabel.text = [device friendlyName];
cell.imageView.image = [device smallIcon];
return cell;
}
#pragma mark - Navigation
// In a storyboard-based application, you will often want to do a little preparation before navigation
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
if ([segue.identifier isEqualToString:@"showUPnP"]) {
NSIndexPath *indexPath = self.tableView.indexPathForSelectedRow;
if (!indexPath) {
return;
}
BasicUPnPDevice *device = _filteredUPNPDevices[indexPath.row];
if ([[device urn] isEqualToString:@"urn:schemas-upnp-org:device:MediaServer:1"]) {
MediaServer1Device *server = (MediaServer1Device*)device;
[(VLCUPnPServerListViewController *)segue.destinationViewController configureWithUPNPDevice:server header:[device friendlyName] andRootID:@"0"];
}
}
}
#pragma mark - UPNP discovery
- (void)_startUPNPDiscovery
{
UPnPManager *managerInstance = [UPnPManager GetInstance];
_UPNPdevices = [[managerInstance DB] rootDevices];
if (_UPNPdevices.count > 0)
[self UPnPDBUpdated:nil];
[[managerInstance DB] addObserver:self];
//Optional; set User Agent
if (!_setup) {
[[managerInstance SSDP] setUserAgentProduct:[NSString stringWithFormat:@"VLCforiOS/%@", [[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleShortVersionString"]] andOS:[NSString stringWithFormat:@"iOS/%@", [[UIDevice currentDevice] systemVersion]]];
_setup = YES;
}
//Search for UPnP Devices
[[managerInstance SSDP] startSSDP];
[[managerInstance SSDP] notifySSDPAlive];
_searchTimer = [[NSTimer alloc] initWithFireDate:[NSDate dateWithTimeIntervalSinceNow:1.0] interval:10.0 target:self selector:@selector(_performSSDPSearch) userInfo:nil repeats:YES];
[[NSRunLoop mainRunLoop] addTimer:_searchTimer forMode:NSRunLoopCommonModes];
_udnpDiscoveryRunning = YES;
}
- (void)_performSSDPSearch
{
UPnPManager *managerInstance = [UPnPManager GetInstance];
[[managerInstance SSDP] searchSSDP];
[[managerInstance SSDP] searchForMediaServer];
[[managerInstance SSDP] performSelectorInBackground:@selector(SSDPDBUpdate) withObject:nil];
}
- (void)_stopUPNPDiscovery
{
if (_udnpDiscoveryRunning) {
UPnPManager *managerInstance = [UPnPManager GetInstance];
[[managerInstance SSDP] notifySSDPByeBye];
[_searchTimer invalidate];
_searchTimer = nil;
[[managerInstance DB] removeObserver:self];
[[managerInstance SSDP] stopSSDP];
_udnpDiscoveryRunning = NO;
}
}
//protocol UPnPDBObserver
- (void)UPnPDBWillUpdate:(UPnPDB*)sender
{
}
- (void)UPnPDBUpdated:(UPnPDB*)sender
{
NSUInteger count = _UPNPdevices.count;
BasicUPnPDevice *device;
NSMutableArray *mutArray = [[NSMutableArray alloc] init];
for (NSUInteger x = 0; x < count; x++) {
device = _UPNPdevices[x];
if ([[device urn] isEqualToString:@"urn:schemas-upnp-org:device:MediaServer:1"])
[mutArray addObject:device];
else
NSLog(@"found device '%@' with unsupported urn '%@'", [device friendlyName], [device urn]);
}
_filteredUPNPDevices = nil;
_filteredUPNPDevices = [NSArray arrayWithArray:mutArray];
[self.tableView performSelectorOnMainThread:@selector(reloadData) withObject:nil waitUntilDone:YES];
}
@end
......@@ -71,7 +71,6 @@
7D1329411BA1F10100BE647E /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 7D1329401BA1F10100BE647E /* main.m */; };
7D1329441BA1F10100BE647E /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 7D1329431BA1F10100BE647E /* AppDelegate.m */; };
7D1329471BA1F10100BE647E /* FirstViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 7D1329461BA1F10100BE647E /* FirstViewController.m */; };
7D13294A1BA1F10100BE647E /* SecondViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 7D1329491BA1F10100BE647E /* SecondViewController.m */; };
7D13294D1BA1F10100BE647E /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 7D13294B1BA1F10100BE647E /* Main.storyboard */; };
7D13294F1BA1F10100BE647E /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 7D13294E1BA1F10100BE647E /* Assets.xcassets */; };
7D1516421868D7E0004B18F3 /* VLCFirstStepsFifthPageViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 7D15163B1868D7E0004B18F3 /* VLCFirstStepsFifthPageViewController.xib */; };
......@@ -163,7 +162,6 @@
7D9CB9DC1A4C55EF00BB74B4 /* VLCPlaybackNavigationController.m in Sources */ = {isa = PBXBuildFile; fileRef = 7D9CB9DB1A4C55EF00BB74B4 /* VLCPlaybackNavigationController.m */; };
7DA8B0FB173318E80029698C /* SourceCodePro-Regular.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 7DA8B0F9173318E80029698C /* SourceCodePro-Regular.ttf */; };
7DAE0C2E1B2EDF7A00C53996 /* VLCNetworkListViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 7DAE0C2D1B2EDF7A00C53996 /* VLCNetworkListViewController.m */; };
7DAE0C311B2EDFD600C53996 /* VLCUPnPServerListViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 7DAE0C301B2EDFD600C53996 /* VLCUPnPServerListViewController.m */; };
7DAE0C341B2EE0C200C53996 /* VLCFTPServerListViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 7DAE0C331B2EE0C200C53996 /* VLCFTPServerListViewController.m */; };
7DAE0C371B2EF85B00C53996 /* VLCSidebarController.m in Sources */ = {isa = PBXBuildFile; fileRef = 7DAE0C361B2EF85B00C53996 /* VLCSidebarController.m */; };
7DAE0C3A1B2F085F00C53996 /* VLCDiscoveryListViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 7DAE0C391B2F085F00C53996 /* VLCDiscoveryListViewController.m */; };
......@@ -212,6 +210,7 @@
9B9231C4185A703700F89498 /* VLCNetworkLoginViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 9B9231C3185A703700F89498 /* VLCNetworkLoginViewController.xib */; };
9BADAF45185FBD9D00108BD8 /* VLCFrostedGlasView.m in Sources */ = {isa = PBXBuildFile; fileRef = 9BADAF44185FBD9D00108BD8 /* VLCFrostedGlasView.m */; };
9BE4D1CE183D76950006346C /* VLCCloudStorageTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 7D3784B0183A990F009EE944 /* VLCCloudStorageTableViewCell.m */; };
A17ACF44191D982D7FB1C725 /* libPods-VLC for Apple TV.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 0B9D6359D38E0EA6A148C19F /* libPods-VLC for Apple TV.a */; };
A79246C8170F11DF0036AAF2 /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = A79246C6170F11DF0036AAF2 /* Localizable.strings */; };
CC1BBC461704938300A20CBF /* libiconv.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = CC1BBC451704938300A20CBF /* libiconv.dylib */; };
CC1BBC4C1704939B00A20CBF /* libsqlite3.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = CC1BBC4B1704939B00A20CBF /* libsqlite3.dylib */; };
......@@ -253,6 +252,9 @@
DD7BA2641B680C8E002D9F54 /* MediaLibraryKit.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = DD7BA2601B680C1B002D9F54 /* MediaLibraryKit.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
DD8F84311B00EB3B0009138A /* VLCPlaybackController+MediaLibrary.m in Sources */ = {isa = PBXBuildFile; fileRef = DD8F84301B00EB3B0009138A /* VLCPlaybackController+MediaLibrary.m */; };
DDB959421AFBB30500BB8CFF /* MappingModel_2_5_to_2_6.xcmappingmodel in Sources */ = {isa = PBXBuildFile; fileRef = DDB959411AFBB30500BB8CFF /* MappingModel_2_5_to_2_6.xcmappingmodel */; };
DDBFB8BA1BA849600003D7E9 /* VLCUPnPTableViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = DDBFB8B91BA849600003D7E9 /* VLCUPnPTableViewController.m */; };
DDBFB8BD1BA851240003D7E9 /* VLCUPnPServerListViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = DDBFB8BC1BA851240003D7E9 /* VLCUPnPServerListViewController.m */; };
DDBFB8C31BA8558B0003D7E9 /* VLCUPnPServerListViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = DDBFB8C21BA8558B0003D7E9 /* VLCUPnPServerListViewController.m */; };
DDC10BE41AEE8EA700890DC3 /* VLCTimeNavigationTitleView.m in Sources */ = {isa = PBXBuildFile; fileRef = DDC10BE31AEE8EA700890DC3 /* VLCTimeNavigationTitleView.m */; };
E0C04F951A25B4410080331A /* VLCDocumentPickerController.m in Sources */ = {isa = PBXBuildFile; fileRef = E0C04F941A25B4410080331A /* VLCDocumentPickerController.m */; };
/* End PBXBuildFile section */
......@@ -321,6 +323,8 @@
/* End PBXCopyFilesBuildPhase section */
/* Begin PBXFileReference section */
0B9D6359D38E0EA6A148C19F /* libPods-VLC for Apple TV.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-VLC for Apple TV.a"; sourceTree = BUILT_PRODUCTS_DIR; };
0DC56BED6060A3C284DE2346 /* Pods-VLC for Apple TV.distribution.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-VLC for Apple TV.distribution.xcconfig"; path = "Pods/Target Support Files/Pods-VLC for Apple TV/Pods-VLC for Apple TV.distribution.xcconfig"; sourceTree = "<group>"; };
262C71571A98FA9200F7ED34 /* VLCPlexMediaInformationViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = VLCPlexMediaInformationViewController.h; path = Sources/VLCPlexMediaInformationViewController.h; sourceTree = SOURCE_ROOT; };
262C71581A98FA9200F7ED34 /* VLCPlexMediaInformationViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = VLCPlexMediaInformationViewController.m; path = Sources/VLCPlexMediaInformationViewController.m; sourceTree = SOURCE_ROOT; };
2640FAE41B01477A00E359D6 /* VLCPlexWebAPI.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = VLCPlexWebAPI.h; path = Sources/VLCPlexWebAPI.h; sourceTree = SOURCE_ROOT; };
......@@ -416,6 +420,7 @@
41CD695B1A29D72600E60BCE /* VLCBoxTableViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = VLCBoxTableViewController.m; path = Sources/VLCBoxTableViewController.m; sourceTree = SOURCE_ROOT; };
493B1A1B195D06B1000A491A /* BasicUPnPDevice+VLC.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "BasicUPnPDevice+VLC.h"; path = "Sources/BasicUPnPDevice+VLC.h"; sourceTree = SOURCE_ROOT; };
493B1A1C195D06B1000A491A /* BasicUPnPDevice+VLC.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = "BasicUPnPDevice+VLC.m"; path = "Sources/BasicUPnPDevice+VLC.m"; sourceTree = SOURCE_ROOT; };
49A1193E1FC881009F33F8AF /* Pods-VLC for Apple TV.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-VLC for Apple TV.release.xcconfig"; path = "Pods/Target Support Files/Pods-VLC for Apple TV/Pods-VLC for Apple TV.release.xcconfig"; sourceTree = "<group>"; };
521108CBC3CAA0810AF3CBA8 /* Pods-vlc-ios.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-vlc-ios.debug.xcconfig"; path = "Pods/Target Support Files/Pods-vlc-ios/Pods-vlc-ios.debug.xcconfig"; sourceTree = "<group>"; };
6AB5E0853B398B35369938EC /* Pods-vlc-ios.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-vlc-ios.release.xcconfig"; path = "Pods/Target Support Files/Pods-vlc-ios/Pods-vlc-ios.release.xcconfig"; sourceTree = "<group>"; };
7AC8629B1765DC560011611A /* style.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = style.css; sourceTree = "<group>"; };
......@@ -442,8 +447,6 @@
7D1329431BA1F10100BE647E /* AppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = "<group>"; };
7D1329451BA1F10100BE647E /* FirstViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = FirstViewController.h; sourceTree = "<group>"; };
7D1329461BA1F10100BE647E /* FirstViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = FirstViewController.m; sourceTree = "<group>"; };
7D1329481BA1F10100BE647E /* SecondViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SecondViewController.h; sourceTree = "<group>"; };
7D1329491BA1F10100BE647E /* SecondViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SecondViewController.m; sourceTree = "<group>"; };
7D13294C1BA1F10100BE647E /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = "<group>"; };
7D13294E1BA1F10100BE647E /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; };
7D1329501BA1F10100BE647E /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
......@@ -633,8 +636,6 @@
7DA8B0F9173318E80029698C /* SourceCodePro-Regular.ttf */ = {isa = PBXFileReference; lastKnownFileType = file; path = "SourceCodePro-Regular.ttf"; sourceTree = "<group>"; };
7DAE0C2C1B2EDF7A00C53996 /* VLCNetworkListViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = VLCNetworkListViewController.h; path = Sources/VLCNetworkListViewController.h; sourceTree = SOURCE_ROOT; };
7DAE0C2D1B2EDF7A00C53996 /* VLCNetworkListViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = VLCNetworkListViewController.m; path = Sources/VLCNetworkListViewController.m; sourceTree = SOURCE_ROOT; };
7DAE0C2F1B2EDFD600C53996 /* VLCUPnPServerListViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = VLCUPnPServerListViewController.h; path = Sources/VLCUPnPServerListViewController.h; sourceTree = SOURCE_ROOT; };
7DAE0C301B2EDFD600C53996 /* VLCUPnPServerListViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = VLCUPnPServerListViewController.m; path = Sources/VLCUPnPServerListViewController.m; sourceTree = SOURCE_ROOT; };
7DAE0C321B2EE0C200C53996 /* VLCFTPServerListViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = VLCFTPServerListViewController.h; path = Sources/VLCFTPServerListViewController.h; sourceTree = SOURCE_ROOT; };
7DAE0C331B2EE0C200C53996 /* VLCFTPServerListViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = VLCFTPServerListViewController.m; path = Sources/VLCFTPServerListViewController.m; sourceTree = SOURCE_ROOT; };
7DAE0C351B2EF85B00C53996 /* VLCSidebarController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = VLCSidebarController.h; path = Sources/VLCSidebarController.h; sourceTree = SOURCE_ROOT; };
......@@ -789,10 +790,17 @@
DD8F842F1B00EB3B0009138A /* VLCPlaybackController+MediaLibrary.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "VLCPlaybackController+MediaLibrary.h"; path = "Sources/VLCPlaybackController+MediaLibrary.h"; sourceTree = SOURCE_ROOT; };
DD8F84301B00EB3B0009138A /* VLCPlaybackController+MediaLibrary.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = "VLCPlaybackController+MediaLibrary.m"; path = "Sources/VLCPlaybackController+MediaLibrary.m"; sourceTree = SOURCE_ROOT; };
DDB959411AFBB30500BB8CFF /* MappingModel_2_5_to_2_6.xcmappingmodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcmappingmodel; name = MappingModel_2_5_to_2_6.xcmappingmodel; path = ImportedSources/MediaLibraryKit/MappingModel_2_5_to_2_6.xcmappingmodel; sourceTree = "<group>"; };
DDBFB8B81BA849600003D7E9 /* VLCUPnPTableViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = VLCUPnPTableViewController.h; sourceTree = "<group>"; };
DDBFB8B91BA849600003D7E9 /* VLCUPnPTableViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = VLCUPnPTableViewController.m; sourceTree = "<group>"; };
DDBFB8BB1BA851240003D7E9 /* VLCUPnPServerListViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = VLCUPnPServerListViewController.h; sourceTree = "<group>"; };
DDBFB8BC1BA851240003D7E9 /* VLCUPnPServerListViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = VLCUPnPServerListViewController.m; sourceTree = "<group>"; };
DDBFB8C11BA8558B0003D7E9 /* VLCUPnPServerListViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = VLCUPnPServerListViewController.h; path = Sources/VLCUPnPServerListViewController.h; sourceTree = SOURCE_ROOT; };
DDBFB8C21BA8558B0003D7E9 /* VLCUPnPServerListViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = VLCUPnPServerListViewController.m; path = Sources/VLCUPnPServerListViewController.m; sourceTree = SOURCE_ROOT; };
DDC10BE21AEE8EA700890DC3 /* VLCTimeNavigationTitleView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = VLCTimeNavigationTitleView.h; path = Sources/VLCTimeNavigationTitleView.h; sourceTree = SOURCE_ROOT; };
DDC10BE31AEE8EA700890DC3 /* VLCTimeNavigationTitleView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = VLCTimeNavigationTitleView.m; path = Sources/VLCTimeNavigationTitleView.m; sourceTree = SOURCE_ROOT; };
DDE1BCE51B676B8800A4B9CE /* tr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = tr; path = tr.lproj/Localizable.strings; sourceTree = "<group>"; };
DDF157B31ACB169B00AAFBC6 /* WatchKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = WatchKit.framework; path = System/Library/Frameworks/WatchKit.framework; sourceTree = SDKROOT; };
DFB8F2CA4959850C554956FB /* Pods-VLC for Apple TV.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-VLC for Apple TV.debug.xcconfig"; path = "Pods/Target Support Files/Pods-VLC for Apple TV/Pods-VLC for Apple TV.debug.xcconfig"; sourceTree = "<group>"; };
E09EACF57CDD22ABAE66CDD0 /* Pods-vlc-ios.distribution.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-vlc-ios.distribution.xcconfig"; path = "Pods/Target Support Files/Pods-vlc-ios/Pods-vlc-ios.distribution.xcconfig"; sourceTree = "<group>"; };
E0C04F931A25B4410080331A /* VLCDocumentPickerController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = VLCDocumentPickerController.h; path = Sources/VLCDocumentPickerController.h; sourceTree = SOURCE_ROOT; };
E0C04F941A25B4410080331A /* VLCDocumentPickerController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = VLCDocumentPickerController.m; path = Sources/VLCDocumentPickerController.m; sourceTree = SOURCE_ROOT; };
......@@ -809,6 +817,7 @@
7DF28ADB1BA31C2B0030C944 /* CoreText.framework in Frameworks */,
7DF28AD71BA31C150030C944 /* AudioToolbox.framework in Frameworks */,
7D1FEBD41BA3184A00D1058E /* libTVVLCKit.a in Frameworks */,
A17ACF44191D982D7FB1C725 /* libPods-VLC for Apple TV.a in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
......@@ -1027,6 +1036,9 @@
521108CBC3CAA0810AF3CBA8 /* Pods-vlc-ios.debug.xcconfig */,
6AB5E0853B398B35369938EC /* Pods-vlc-ios.release.xcconfig */,
E09EACF57CDD22ABAE66CDD0 /* Pods-vlc-ios.distribution.xcconfig */,
DFB8F2CA4959850C554956FB /* Pods-VLC for Apple TV.debug.xcconfig */,
49A1193E1FC881009F33F8AF /* Pods-VLC for Apple TV.release.xcconfig */,
0DC56BED6060A3C284DE2346 /* Pods-VLC for Apple TV.distribution.xcconfig */,
);
name = Pods;
sourceTree = "<group>";
......@@ -1052,8 +1064,10 @@
7D1329431BA1F10100BE647E /* AppDelegate.m */,
7D1329451BA1F10100BE647E /* FirstViewController.h */,
7D1329461BA1F10100BE647E /* FirstViewController.m */,
7D1329481BA1F10100BE647E /* SecondViewController.h */,
7D1329491BA1F10100BE647E /* SecondViewController.m */,
DDBFB8BB1BA851240003D7E9 /* VLCUPnPServerListViewController.h */,
DDBFB8BC1BA851240003D7E9 /* VLCUPnPServerListViewController.m */,
DDBFB8B81BA849600003D7E9 /* VLCUPnPTableViewController.h */,
DDBFB8B91BA849600003D7E9 /* VLCUPnPTableViewController.m */,
7D13294B1BA1F10100BE647E /* Main.storyboard */,
7D13294E1BA1F10100BE647E /* Assets.xcassets */,
7D1329501BA1F10100BE647E /* Info.plist */,
......@@ -1364,6 +1378,7 @@
7D94FCE016DE7D1000F2623B /* Foundation.framework */,
7D94FCE216DE7D1000F2623B /* CoreGraphics.framework */,
DAF8927B0BE9C328466C0EA7 /* libPods-vlc-ios.a */,
0B9D6359D38E0EA6A148C19F /* libPods-VLC for Apple TV.a */,
);
name = Frameworks;
sourceTree = "<group>";
......@@ -1453,12 +1468,12 @@
children = (
7DAE0C2C1B2EDF7A00C53996 /* VLCNetworkListViewController.h */,
7DAE0C2D1B2EDF7A00C53996 /* VLCNetworkListViewController.m */,
7DAE0C2F1B2EDFD600C53996 /* VLCUPnPServerListViewController.h */,
7DAE0C301B2EDFD600C53996 /* VLCUPnPServerListViewController.m */,
7DAE0C321B2EE0C200C53996 /* VLCFTPServerListViewController.h */,
7DAE0C331B2EE0C200C53996 /* VLCFTPServerListViewController.m */,
7DAE0C381B2F085F00C53996 /* VLCDiscoveryListViewController.h */,
7DAE0C391B2F085F00C53996 /* VLCDiscoveryListViewController.m */,
DDBFB8C11BA8558B0003D7E9 /* VLCUPnPServerListViewController.h */,
DDBFB8C21BA8558B0003D7E9 /* VLCUPnPServerListViewController.m */,
);
name = "Server browsing";
sourceTree = "<group>";
......@@ -1747,9 +1762,12 @@
isa = PBXNativeTarget;
buildConfigurationList = 7D1329541BA1F10100BE647E /* Build configuration list for PBXNativeTarget "VLC for Apple TV" */;
buildPhases = (
EA66D050EEC42ABB7509FFBA /* Check Pods Manifest.lock */,
7D1329391BA1F10100BE647E /* Sources */,
7D13293A1BA1F10100BE647E /* Frameworks */,
7D13293B1BA1F10100BE647E /* Resources */,
77F62EF6D0F79A32E3A3B015 /* Embed Pods Frameworks */,
AA1BEE9BAD04E5E6C992AD0B /* Copy Pods Resources */,
);
buildRules = (
);
......@@ -2037,6 +2055,51 @@
shellScript = "diff \"${PODS_ROOT}/../Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [[ $? != 0 ]] ; then\n cat << EOM\nerror: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\nEOM\n exit 1\nfi\n";
showEnvVarsInLog = 0;
};
77F62EF6D0F79A32E3A3B015 /* Embed Pods Frameworks */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
files = (
);
inputPaths = (
);
name = "Embed Pods Frameworks";
outputPaths = (
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-VLC for Apple TV/Pods-VLC for Apple TV-frameworks.sh\"\n";
showEnvVarsInLog = 0;
};
AA1BEE9BAD04E5E6C992AD0B /* Copy Pods Resources */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
files = (
);
inputPaths = (
);
name = "Copy Pods Resources";
outputPaths = (
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-VLC for Apple TV/Pods-VLC for Apple TV-resources.sh\"\n";
showEnvVarsInLog = 0;
};
EA66D050EEC42ABB7509FFBA /* Check Pods Manifest.lock */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
files = (
);
inputPaths = (
);
name = "Check Pods Manifest.lock";
outputPaths = (
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
shellScript = "diff \"${PODS_ROOT}/../Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [[ $? != 0 ]] ; then\n cat << EOM\nerror: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\nEOM\n exit 1\nfi\n";
showEnvVarsInLog = 0;
};
F2C5CAE560C074258A574B08 /* Copy Pods Resources */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
......@@ -2059,7 +2122,8 @@
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
7D13294A1BA1F10100BE647E /* SecondViewController.m in Sources */,
DDBFB8BA1BA849600003D7E9 /* VLCUPnPTableViewController.m in Sources */,
DDBFB8BD1BA851240003D7E9 /* VLCUPnPServerListViewController.m in Sources */,
7D1329441BA1F10100BE647E /* AppDelegate.m in Sources */,
7D1329471BA1F10100BE647E /* FirstViewController.m in Sources */,
7D1329411BA1F10100BE647E /* main.m in Sources */,
......@@ -2146,7 +2210,6 @@
DD3EA6311AF50CFE007FF096 /* VLCWatchMessage.m in Sources */,
41CD695D1A29D72600E60BCE /* VLCBoxTableViewController.m in Sources */,
7D3784C1183A9938009EE944 /* VLCMenuButton.m in Sources */,
7DAE0C311B2EDFD600C53996 /* VLCUPnPServerListViewController.m in Sources */,
41CD695C1A29D72600E60BCE /* VLCBoxController.m in Sources */,
7D3784C2183A9938009EE944 /* VLCSlider.m in Sources */,
7D3784C3183A9938009EE944 /* VLCStatusLabel.m in Sources */,
......@@ -2177,6 +2240,7 @@
7D1052E91A4DCC1100295F08 /* VLCOneDriveTableViewController.m in Sources */,
7DBB788A1B30423B00894467 /* VLCKeychainCoordinator.m in Sources */,
7D30F3D7183AB2F100FFC021 /* VLCNetworkListCell.m in Sources */,
DDBFB8C31BA8558B0003D7E9 /* VLCUPnPServerListViewController.m in Sources */,
265D511C1922746C00E38383 /* VLCLocalPlexFolderListViewController.m in Sources */,
7D1052EE1A4DCD1E00295F08 /* VLCOneDriveController.m in Sources */,
7DAE0C371B2EF85B00C53996 /* VLCSidebarController.m in Sources */,
......@@ -2325,6 +2389,7 @@
/* Begin XCBuildConfiguration section */
7D1329511BA1F10100BE647E /* Debug */ = {
isa = XCBuildConfiguration;
baseConfigurationReference = DFB8F2CA4959850C554956FB /* Pods-VLC for Apple TV.debug.xcconfig */;
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = "App Icon & Top Shelf Image";
ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage;
......@@ -2371,6 +2436,7 @@
};
7D1329521BA1F10100BE647E /* Release */ = {
isa = XCBuildConfiguration;
baseConfigurationReference = 49A1193E1FC881009F33F8AF /* Pods-VLC for Apple TV.release.xcconfig */;
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = "App Icon & Top Shelf Image";
ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage;
......@@ -2418,6 +2484,7 @@
};
7D1329531BA1F10100BE647E /* Distribution */ = {
isa = XCBuildConfiguration;
baseConfigurationReference = 0DC56BED6060A3C284DE2346 /* Pods-VLC for Apple TV.distribution.xcconfig */;
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = "App Icon & Top Shelf Image";
ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage;
......
Pod::Spec.new do |s|
s.name = 'upnpx'
s.version = '1.3.4'
s.license = 'BSD'
s.ios.deployment_target = "6.1"
s.osx.deployment_target = "10.6"
s.tvos.deployment_target = "9.0"
s.summary = 'Open Source Mac OS X / iOS Cocoa UPnP Stack.'
s.homepage = 'https://github.com/fkuehne/upnpx'
s.authors = { 'Felix Paul Kühne' => 'fkuehne@videolan.org', 'Bruno Keymolen' => 'bruno.keymolen@gmail.com', 'Paul Williamson' => 'squarefrog@gmail.com' }
s.source = { :git => 'https://github.com/fkuehne/upnpx.git', :tag => s.version.to_s }
s.description = 'Static OS X & iOS UPnP library written in Cocoa (UPnP) and C++ (SSDP).' \
'The Current implementation has support for control point/client only.'
s.ios.source_files = 'src/{api,common,eventserver,ssdp,upnp}/*.{h,m,mm,c,cpp}', 'src/port/ios/*.{h,m}'
s.osx.source_files = 'src/{api,common,eventserver,ssdp,upnp}/*.{h,m,mm,c,cpp}', 'src/port/macos/*.{h,m}'
s.tvos.source_files = 'src/{api,common,eventserver,ssdp,upnp}/*.{h,m,mm,c,cpp}', 'src/port/ios/*.{h,m}'
s.tvos.public_header_files = 'src/api/*.h', 'src/port/ios/*.h'
s.ios.public_header_files = 'src/api/*.h', 'src/port/ios/*.h'
s.osx.public_header_files = 'src/api/*.h', 'src/port/macos/*.h'
s.library = 'stdc++'
s.xcconfig = {
'CLANG_CXX_LANGUAGE_STANDARD' => 'c++0x',
'CLANG_CXX_LIBRARY' => 'libstdc++',
'OTHER_LDFLAGS' => '-weak_library /usr/lib/libstdc++.dylib'
}
s.requires_arc = false
end