瀏覽代碼

add VLCNetworkServerBrowserVLCMedia for SMB
remove DiscoveryListViewController

Tobias Conradi 9 年之前
父節點
當前提交
028e27e13d

+ 0 - 19
Sources/LocalNetworkConnectivity/ServerBrowsing/VLCDiscoveryListViewController.h

@@ -1,19 +0,0 @@
-/*****************************************************************************
- * VLCDiscoveryListViewController.h
- * 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 "VLCNetworkListViewController.h"
-
-@interface VLCDiscoveryListViewController : VLCNetworkListViewController
-
-- (instancetype)initWithMedia:(VLCMedia*)media options:(NSDictionary *)options;
-
-@end

+ 0 - 122
Sources/LocalNetworkConnectivity/ServerBrowsing/VLCDiscoveryListViewController.m

@@ -1,122 +0,0 @@
-/*****************************************************************************
- * 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

+ 1 - 1
Sources/LocalNetworkConnectivity/ServerBrowsing/VLCNetworkServerBrowser-Protocol.h

@@ -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;
 

+ 34 - 0
Sources/LocalNetworkConnectivity/ServerBrowsing/VLCNetworkServerBrowserVLCMedia.h

@@ -0,0 +1,34 @@
+/*****************************************************************************
+ * VLCNetworkServerBrowserVLCMedia.h
+ * 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 "VLCNetworkServerBrowser-Protocol.h"
+
+NS_ASSUME_NONNULL_BEGIN
+@interface VLCNetworkServerBrowserVLCMedia : NSObject <VLCNetworkServerBrowser>
+- (instancetype)initWithMedia:(VLCMedia *)media NS_DESIGNATED_INITIALIZER;
+- (instancetype)init NS_UNAVAILABLE;
+@end
+
+
+@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

+ 109 - 0
Sources/LocalNetworkConnectivity/ServerBrowsing/VLCNetworkServerBrowserVLCMedia.m

@@ -0,0 +1,109 @@
+/*****************************************************************************
+ * 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
+
+

+ 8 - 13
Sources/LocalNetworkConnectivity/ServerDiscovery/VLCLocalNetworkService.m

@@ -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"];

+ 15 - 15
Sources/LocalNetworkConnectivity/VLCServerListViewController.m

@@ -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

+ 6 - 6
VLC for iOS.xcodeproj/project.pbxproj

@@ -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 */,