Commit 028e27e1 authored by Tobias's avatar Tobias

add VLCNetworkServerBrowserVLCMedia for SMB

remove DiscoveryListViewController
parent 35261e06
/*****************************************************************************
* VLCDiscoveryListViewController.m
* VLC for iOS
*****************************************************************************
* Copyright (c) 2015 VideoLAN. All rights reserved.
* $Id$
*
* Author: Felix Paul Kühne <fkuehne # videolan.org>
*
* Refer to the COPYING file of the official project for license.
*****************************************************************************/
#import "VLCDiscoveryListViewController.h"
#import "VLCNetworkListCell.h"
#import "VLCPlaybackController.h"
@interface VLCDiscoveryListViewController () <UITableViewDataSource, UITableViewDelegate, VLCMediaListDelegate>
{
VLCMediaList *_mediaList;
VLCMedia *_rootMedia;
NSDictionary *_mediaOptions;
}
@end
@implementation VLCDiscoveryListViewController
- (instancetype)initWithMedia:(VLCMedia *)media options:(NSDictionary *)options
{
self = [super init];
if (!self)
return self;
_rootMedia = media;
[_rootMedia parseWithOptions:VLCMediaParseNetwork];
_mediaList = [_rootMedia subitems];
_mediaList.delegate = self;
self.title = [_rootMedia metadataForKey:VLCMetaInformationTitle];
return self;
}
- (void)viewWillAppear:(BOOL)animated
{
[self.tableView reloadData];
}
#pragma mark - media list delegate
- (void)mediaList:(VLCMediaList *)aMediaList mediaAdded:(VLCMedia *)media atIndex:(NSInteger)index
{
[media parseWithOptions:VLCMediaParseNetwork];
[self.tableView reloadData];
}
- (void)mediaList:(VLCMediaList *)aMediaList mediaRemovedAtIndex:(NSInteger)index
{
[self.tableView reloadData];
}
#pragma mark - table view data source, for more see super
- (NSInteger)tableView:(nonnull UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
return _mediaList.count;
}
- (nonnull UITableViewCell *)tableView:(nonnull UITableView *)tableView cellForRowAtIndexPath:(nonnull NSIndexPath *)indexPath
{
VLCNetworkListCell *cell = (VLCNetworkListCell *)[tableView dequeueReusableCellWithIdentifier:VLCNetworkListCellIdentifier];
if (cell == nil)
cell = [VLCNetworkListCell cellWithReuseIdentifier:VLCNetworkListCellIdentifier];
VLCMedia *cellObject = [_mediaList mediaAtIndex:indexPath.row];
if (cellObject.mediaType == VLCMediaTypeDirectory) {
cell.isDirectory = YES;
cell.icon = [UIImage imageNamed:@"folder"];
} else {
cell.isDirectory = NO;
cell.icon = [UIImage imageNamed:@"blank"];
}
cell.isDownloadable = NO;
NSString *title = [cellObject metadataForKey:VLCMetaInformationTitle];
if (!title)
title = cellObject.url.lastPathComponent;
if (!title)
title = cellObject.url.absoluteString;
cell.title = [cellObject metadataForKey:VLCMetaInformationTitle];
cell.subtitle = cellObject.url.absoluteString;
return cell;
}
#pragma mark - table view delegation
- (void)tableView:(nonnull UITableView *)tableView didSelectRowAtIndexPath:(nonnull NSIndexPath *)indexPath
{
[tableView deselectRowAtIndexPath:indexPath animated:YES];
NSInteger row = indexPath.row;
VLCMedia *cellMedia = [_mediaList mediaAtIndex:row];
if (cellMedia.mediaType == VLCMediaTypeDirectory) {
[cellMedia parseWithOptions:VLCMediaParseNetwork];
[cellMedia addOptions:_mediaOptions];
VLCDiscoveryListViewController *targetViewController = [[VLCDiscoveryListViewController alloc]
initWithMedia:cellMedia
options:_mediaOptions];
[[self navigationController] pushViewController:targetViewController animated:YES];
} else {
VLCPlaybackController *vpc = [VLCPlaybackController sharedInstance];
[vpc playMediaList:_mediaList firstIndex:(int)row];
}
}
@end
......@@ -21,7 +21,7 @@ NS_ASSUME_NONNULL_BEGIN
@property (nonatomic, weak) id <VLCNetworkServerBrowserDelegate> delegate;
@property (nonatomic, readonly, nullable) NSString *title;
@property (nonatomic, readonly) NSArray<id<VLCNetworkServerBrowserItem>> *items;
@property (nonatomic, copy, readonly) NSArray<id<VLCNetworkServerBrowserItem>> *items;
- (void)update;
......
/*****************************************************************************
* VLCDiscoveryListViewController.h
* VLCNetworkServerBrowserVLCMedia.h
* VLC for iOS
*****************************************************************************
* Copyright (c) 2015 VideoLAN. All rights reserved.
* $Id$
*
* Author: 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 "VLCNetworkListViewController.h"
#import "VLCNetworkServerBrowser-Protocol.h"
@interface VLCDiscoveryListViewController : VLCNetworkListViewController
NS_ASSUME_NONNULL_BEGIN
@interface VLCNetworkServerBrowserVLCMedia : NSObject <VLCNetworkServerBrowser>
- (instancetype)initWithMedia:(VLCMedia *)media NS_DESIGNATED_INITIALIZER;
- (instancetype)init NS_UNAVAILABLE;
@end
- (instancetype)initWithMedia:(VLCMedia*)media options:(NSDictionary *)options;
@interface VLCNetworkServerBrowserItemVLCMedia : NSObject <VLCNetworkServerBrowserItem>
- (instancetype)initWithMedia:(VLCMedia *)media;
@end
@interface VLCNetworkServerBrowserVLCMedia (SMB)
+ (instancetype)SMBNetworkServerBrowserWithURL:(NSURL *)url
username:(nullable NSString *)username
password:(nullable NSString *)password
workgroup:(nullable NSString *)workgroup;
@end
NS_ASSUME_NONNULL_END
\ No newline at end of file
/*****************************************************************************
* VLCNetworkServerBrowserVLCMedia.m
* 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 "VLCNetworkServerBrowserVLCMedia.h"
@interface VLCNetworkServerBrowserVLCMedia () <VLCMediaListDelegate>
@property (nonatomic) VLCMedia *rootMedia;
@property (nonatomic) VLCMediaList *mediaList;
@property (nonatomic) NSMutableArray<id<VLCNetworkServerBrowserItem>> *mutableItems;
@end
@implementation VLCNetworkServerBrowserVLCMedia
@synthesize delegate = _delegate;
- (instancetype)initWithMedia:(VLCMedia *)media
{
self = [super init];
if (self) {
_mutableItems = [[NSMutableArray alloc] init];
_rootMedia = media;
[media parseWithOptions:VLCMediaParseNetwork];
_mediaList = [_rootMedia subitems];
_mediaList.delegate = self;
}
return self;
}
- (void)update {
[self.rootMedia parseWithOptions:VLCMediaParseNetwork];
}
- (NSString *)title {
return [self.rootMedia metadataForKey:VLCMetaInformationTitle];
}
- (NSArray<id<VLCNetworkServerBrowserItem>> *)items {
return self.mutableItems.copy;
}
#pragma mark - media list delegate
- (void)mediaList:(VLCMediaList *)aMediaList mediaAdded:(VLCMedia *)media atIndex:(NSInteger)index
{
[media parseWithOptions:VLCMediaParseNetwork];
[self.mutableItems addObject:[[VLCNetworkServerBrowserItemVLCMedia alloc] initWithMedia:media]];
[self.delegate networkServerBrowserDidUpdate:self];
}
- (void)mediaList:(VLCMediaList *)aMediaList mediaRemovedAtIndex:(NSInteger)index {
[self.mutableItems removeObjectAtIndex:index];
[self.delegate networkServerBrowserDidUpdate:self];
}
@end
@interface VLCNetworkServerBrowserItemVLCMedia ()
@property (nonatomic, readonly) VLCMedia *media;
@end
@implementation VLCNetworkServerBrowserItemVLCMedia
@synthesize name = _name, container = _container, fileSizeBytes = _fileSizeBytes, URL = _URL;
- (instancetype)initWithMedia:(VLCMedia *)media
{
self = [super init];
if (self) {
_media = media;
_container = media.mediaType == VLCMediaTypeDirectory;
NSString *title = [media metadataForKey:VLCMetaInformationTitle];
if (!title) {
title = media.url.lastPathComponent;
}
if (!title) {
title = media.url.absoluteString;
}
_name = title;
_URL = media.url;
// _downloadable = NO; //TODO: add property for downloadable?
}
return self;
}
- (id<VLCNetworkServerBrowser>)containerBrowser {
return [[VLCNetworkServerBrowserVLCMedia alloc] initWithMedia:self.media];
}
@end
@implementation VLCNetworkServerBrowserVLCMedia (SMB)
+ (instancetype)SMBNetworkServerBrowserWithURL:(NSURL *)url username:(NSString *)username password:(NSString *)password workgroup:(NSString *)workgroup {
VLCMedia *media = [VLCMedia mediaWithURL:url];
NSDictionary *mediaOptions = @{@"smb-user" : username ?: @"",
@"smb-pwd" : password ?: @"",
@"smb-domain" : workgroup?: @"WORKGROUP"};
[media addOptions:mediaOptions];
return [[self alloc] initWithMedia:media];
}
@end
......@@ -154,30 +154,25 @@
return nil;
}
@end
#import "VLCDiscoveryListViewController.h"
@implementation VLCLocalNetworkServiceDSM
- (UIImage *)icon {
return [UIImage imageNamed:@"serverIcon"];
}
- (UIViewController *)detailViewController {
VLCMedia *cellMedia = self.mediaItem;
if (cellMedia.mediaType != VLCMediaTypeDirectory)
VLCMedia *media = self.mediaItem;
if (media.mediaType != VLCMediaTypeDirectory)
return nil;
NSDictionary *mediaOptions = @{@"smb-user" : @"",
@"smb-pwd" : @"",
@"smb-domain" : @""};
[cellMedia addOptions:mediaOptions];
VLCDiscoveryListViewController *targetViewController = [[VLCDiscoveryListViewController alloc]
initWithMedia:cellMedia
options:mediaOptions];
return targetViewController;
VLCNetworkLoginViewController *loginViewController = [[VLCNetworkLoginViewController alloc] initWithNibName:@"VLCNetworkLoginViewController" bundle:nil];
loginViewController.serverProtocol = VLCServerProtocolSMB;
loginViewController.hostname = self.mediaItem.url.host;
return loginViewController;
}
@end
#import "VLCPlaybackController.h"
#import "VLCPlaybackController.h"
@implementation VLCLocalNetworkServiceSAP
- (UIImage *)icon {
return [UIImage imageNamed:@"TVBroadcastIcon"];
......
......@@ -22,10 +22,10 @@
#import "VLCUPnPServerListViewController.h"
#import "VLCLocalPlexFolderListViewController.h"
#import "VLCSharedLibraryListViewController.h"
#import "VLCDiscoveryListViewController.h"
#import "VLCNetworkServerBrowserViewController.h"
#import "VLCNetworkServerBrowserFTP.h"
#import "VLCNetworkServerBrowserVLCMedia.h"
@interface VLCServerListViewController () <UITableViewDataSource, UITableViewDelegate, VLCLocalServerDiscoveryControllerDelegate>
{
......@@ -211,13 +211,14 @@
confirmedWithUsername:(NSString *)username
andPassword:(NSString *)password
{
id<VLCNetworkServerBrowser> serverBrowser = nil;
switch (protocol) {
case VLCServerProtocolFTP:
{
VLCNetworkServerBrowserFTP *browser = [[VLCNetworkServerBrowserFTP alloc]initWithFTPServer:server
userName:username andPassword:password atPath:@"/"];
VLCNetworkServerBrowserViewController *targetViewController = [[VLCNetworkServerBrowserViewController alloc] initWithServerBrowser:browser];
[self.navigationController pushViewController:targetViewController animated:YES];
serverBrowser = [[VLCNetworkServerBrowserFTP alloc]initWithFTPServer:server
userName:username
andPassword:password atPath:@"/"];
break;
}
case VLCServerProtocolPLEX:
......@@ -234,22 +235,21 @@ confirmedWithUsername:(NSString *)username
}
case VLCServerProtocolSMB:
{
VLCMedia *media = [VLCMedia mediaWithURL:[NSURL URLWithString:[NSString stringWithFormat:@"smb://%@", server]]];
NSDictionary *mediaOptions = @{@"smb-user" : username ? username : @"",
@"smb-pwd" : password ? password : @"",
@"smb-domain" : @"WORKGROUP"};
[media addOptions:mediaOptions];
VLCDiscoveryListViewController *targetViewController = [[VLCDiscoveryListViewController alloc]
initWithMedia:media
options:mediaOptions];
[[self navigationController] pushViewController:targetViewController animated:YES];
NSURL *url = [NSURL URLWithString:[NSString stringWithFormat:@"smb://%@", server]];
serverBrowser = [VLCNetworkServerBrowserVLCMedia SMBNetworkServerBrowserWithURL:url
username:username
password:password
workgroup:nil];
}
default:
APLog(@"Unsupported URL Scheme requested %ld", (long)protocol);
break;
}
if (serverBrowser) {
VLCNetworkServerBrowserViewController *targetViewController = [[VLCNetworkServerBrowserViewController alloc] initWithServerBrowser:serverBrowser];
[self.navigationController pushViewController:targetViewController animated:YES];
}
}
- (void)discoveryFoundSomethingNew
......
......@@ -189,7 +189,6 @@
7DAE0C311B2EDFD600C53996 /* VLCUPnPServerListViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 7DAE0C301B2EDFD600C53996 /* VLCUPnPServerListViewController.m */; };
7DAE0C341B2EE0C200C53996 /* VLCNetworkServerBrowserViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 7DAE0C331B2EE0C200C53996 /* VLCNetworkServerBrowserViewController.m */; };
7DAE0C371B2EF85B00C53996 /* VLCSidebarController.m in Sources */ = {isa = PBXBuildFile; fileRef = 7DAE0C361B2EF85B00C53996 /* VLCSidebarController.m */; };
7DAE0C3A1B2F085F00C53996 /* VLCDiscoveryListViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 7DAE0C391B2F085F00C53996 /* VLCDiscoveryListViewController.m */; };
7DB638AB185BC0890003887C /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 7DB638AA185BC0890003887C /* Images.xcassets */; };
7DB847D71A5871570002DC30 /* VLCOneDriveObject.m in Sources */ = {isa = PBXBuildFile; fileRef = 7DB847D61A5871570002DC30 /* VLCOneDriveObject.m */; };
7DBB788A1B30423B00894467 /* VLCKeychainCoordinator.m in Sources */ = {isa = PBXBuildFile; fileRef = 7DBB78891B30423B00894467 /* VLCKeychainCoordinator.m */; };
......@@ -286,6 +285,7 @@
DD3567F81B6768FC00338947 /* VLCWatchTableController.m in Sources */ = {isa = PBXBuildFile; fileRef = DD3567EC1B6768FC00338947 /* VLCWatchTableController.m */; };
DD3567F91B6768FC00338947 /* WKInterfaceObject+VLCProgress.m in Sources */ = {isa = PBXBuildFile; fileRef = DD3567EE1B6768FC00338947 /* WKInterfaceObject+VLCProgress.m */; };
DD3EA6311AF50CFE007FF096 /* VLCWatchMessage.m in Sources */ = {isa = PBXBuildFile; fileRef = DD3EA6301AF50CFE007FF096 /* VLCWatchMessage.m */; };
DD3EFE301BDA813F00B68579 /* VLCNetworkServerBrowserVLCMedia.m in Sources */ = {isa = PBXBuildFile; fileRef = DD3EFE2F1BDA813F00B68579 /* VLCNetworkServerBrowserVLCMedia.m */; };
DD510B701B14E564003BA71C /* VLCPlayerDisplayController.m in Sources */ = {isa = PBXBuildFile; fileRef = DD510B6F1B14E564003BA71C /* VLCPlayerDisplayController.m */; };
DD7110F01AF38B2B00854776 /* MLMediaLibrary+playlist.m in Sources */ = {isa = PBXBuildFile; fileRef = DD7110EF1AF38B2B00854776 /* MLMediaLibrary+playlist.m */; };
DD7BA2631B680C8E002D9F54 /* MediaLibraryKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DD7BA2601B680C1B002D9F54 /* MediaLibraryKit.framework */; };
......@@ -755,8 +755,6 @@
7DAE0C331B2EE0C200C53996 /* VLCNetworkServerBrowserViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = VLCNetworkServerBrowserViewController.m; path = Sources/LocalNetworkConnectivity/ServerBrowsing/VLCNetworkServerBrowserViewController.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; };
7DAE0C361B2EF85B00C53996 /* VLCSidebarController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = VLCSidebarController.m; path = Sources/VLCSidebarController.m; sourceTree = SOURCE_ROOT; };
7DAE0C381B2F085F00C53996 /* VLCDiscoveryListViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = VLCDiscoveryListViewController.h; path = Sources/LocalNetworkConnectivity/ServerBrowsing/VLCDiscoveryListViewController.h; sourceTree = SOURCE_ROOT; };
7DAE0C391B2F085F00C53996 /* VLCDiscoveryListViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = VLCDiscoveryListViewController.m; path = Sources/LocalNetworkConnectivity/ServerBrowsing/VLCDiscoveryListViewController.m; sourceTree = SOURCE_ROOT; };
7DB2486E18EA1D6D0097ADD2 /* ro */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ro; path = ro.lproj/Localizable.strings; sourceTree = "<group>"; };
7DB638AA185BC0890003887C /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Images.xcassets; path = "vlc-ios/Images.xcassets"; sourceTree = "<group>"; };
7DB847D51A5871570002DC30 /* VLCOneDriveObject.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = VLCOneDriveObject.h; path = Sources/VLCOneDriveObject.h; sourceTree = SOURCE_ROOT; };
......@@ -896,6 +894,8 @@
DD3567EE1B6768FC00338947 /* WKInterfaceObject+VLCProgress.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "WKInterfaceObject+VLCProgress.m"; sourceTree = "<group>"; };
DD3EA62F1AF50CFE007FF096 /* VLCWatchMessage.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = VLCWatchMessage.h; sourceTree = "<group>"; };
DD3EA6301AF50CFE007FF096 /* VLCWatchMessage.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = VLCWatchMessage.m; sourceTree = "<group>"; };
DD3EFE2E1BDA813F00B68579 /* VLCNetworkServerBrowserVLCMedia.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = VLCNetworkServerBrowserVLCMedia.h; path = Sources/LocalNetworkConnectivity/ServerBrowsing/VLCNetworkServerBrowserVLCMedia.h; sourceTree = SOURCE_ROOT; };
DD3EFE2F1BDA813F00B68579 /* VLCNetworkServerBrowserVLCMedia.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = VLCNetworkServerBrowserVLCMedia.m; path = Sources/LocalNetworkConnectivity/ServerBrowsing/VLCNetworkServerBrowserVLCMedia.m; sourceTree = SOURCE_ROOT; };
DD510B6E1B14E564003BA71C /* VLCPlayerDisplayController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = VLCPlayerDisplayController.h; path = Sources/VLCPlayerDisplayController.h; sourceTree = SOURCE_ROOT; };
DD510B6F1B14E564003BA71C /* VLCPlayerDisplayController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = VLCPlayerDisplayController.m; path = Sources/VLCPlayerDisplayController.m; sourceTree = SOURCE_ROOT; };
DD7110EE1AF38B2B00854776 /* MLMediaLibrary+playlist.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "MLMediaLibrary+playlist.h"; sourceTree = "<group>"; };
......@@ -1635,13 +1635,13 @@
7DAE0C2D1B2EDF7A00C53996 /* VLCNetworkListViewController.m */,
7DAE0C2F1B2EDFD600C53996 /* VLCUPnPServerListViewController.h */,
7DAE0C301B2EDFD600C53996 /* VLCUPnPServerListViewController.m */,
7DAE0C381B2F085F00C53996 /* VLCDiscoveryListViewController.h */,
7DAE0C391B2F085F00C53996 /* VLCDiscoveryListViewController.m */,
7DAE0C321B2EE0C200C53996 /* VLCNetworkServerBrowserViewController.h */,
7DAE0C331B2EE0C200C53996 /* VLCNetworkServerBrowserViewController.m */,
DDE3C8E51BD2F75100C03B8B /* VLCNetworkServerBrowser-Protocol.h */,
DDE3C8E61BD3A81600C03B8B /* VLCNetworkServerBrowserFTP.h */,
DDE3C8E71BD3A81600C03B8B /* VLCNetworkServerBrowserFTP.m */,
DD3EFE2E1BDA813F00B68579 /* VLCNetworkServerBrowserVLCMedia.h */,
DD3EFE2F1BDA813F00B68579 /* VLCNetworkServerBrowserVLCMedia.m */,
);
name = "Server browsing";
sourceTree = "<group>";
......@@ -2548,6 +2548,7 @@
DDE3C8E31BD2592300C03B8B /* VLCLocalNetworkServiceBrowserUPnP.m in Sources */,
2915540917490A1E00B86CAD /* MultipartMessageHeader.m in Sources */,
2915540A17490A1E00B86CAD /* MultipartMessageHeaderField.m in Sources */,
DD3EFE301BDA813F00B68579 /* VLCNetworkServerBrowserVLCMedia.m in Sources */,
2915542217490A9C00B86CAD /* GCDAsyncSocket.m in Sources */,
7D9289751877459B009108FD /* VLCFirstStepsThirdPageViewController.m in Sources */,
2915542417490A9C00B86CAD /* DDAbstractDatabaseLogger.m in Sources */,
......@@ -2592,7 +2593,6 @@
DD8F84311B00EB3B0009138A /* VLCPlaybackController+MediaLibrary.m in Sources */,
7D37849A183A98D1009EE944 /* VLCPlaylistTableViewCell.m in Sources */,
7D37849B183A98D1009EE944 /* VLCLibraryViewController.m in Sources */,
7DAE0C3A1B2F085F00C53996 /* VLCDiscoveryListViewController.m in Sources */,
7D37849E183A98DD009EE944 /* VLCThumbnailsCache.m in Sources */,
7D3784A1183A98EB009EE944 /* VLCBugreporter.m in Sources */,
7D3784A6183A98F5009EE944 /* VLCAboutViewController.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