VLCLocalNetworkServiceBrowserDSM.m 2.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. /*****************************************************************************
  2. * VLCLocalNetworkServiceBrowserDSM.m
  3. * VLC for iOS
  4. *****************************************************************************
  5. * Copyright (c) 2015 VideoLAN. All rights reserved.
  6. * $Id$
  7. *
  8. * Authors: Tobias Conradi <videolan # tobias-conradi.de>
  9. *
  10. * Refer to the COPYING file of the official project for license.
  11. *****************************************************************************/
  12. #import "VLCLocalNetworkServiceBrowserDSM.h"
  13. #import "VLCNetworkServerLoginInformation.h"
  14. @implementation VLCLocalNetworkServiceBrowserDSM
  15. - (instancetype)init {
  16. #if TARGET_OS_TV
  17. NSString *name = NSLocalizedString(@"SMB_CIFS_FILE_SERVERS_SHORT", nil);
  18. #else
  19. NSString *name = NSLocalizedString(@"SMB_CIFS_FILE_SERVERS", nil);
  20. #endif
  21. return [super initWithName:name
  22. serviceServiceName:@"dsm"];
  23. }
  24. - (id<VLCLocalNetworkService>)networkServiceForIndex:(NSUInteger)index {
  25. VLCMedia *media = [self.mediaDiscoverer.discoveredMedia mediaAtIndex:index];
  26. if (media)
  27. return [[VLCLocalNetworkServiceDSM alloc] initWithMediaItem:media];
  28. return nil;
  29. }
  30. @end
  31. NSString *const VLCNetworkServerProtocolIdentifierSMB = @"smb";
  32. @implementation VLCLocalNetworkServiceDSM
  33. - (UIImage *)icon {
  34. return [UIImage imageNamed:@"serverIcon"];
  35. }
  36. - (VLCNetworkServerLoginInformation *)loginInformation {
  37. VLCMedia *media = self.mediaItem;
  38. if (media.mediaType != VLCMediaTypeDirectory)
  39. return nil;
  40. VLCNetworkServerLoginInformation *login = [[VLCNetworkServerLoginInformation alloc] init];
  41. login.address = self.mediaItem.url.host;
  42. login.protocolIdentifier = VLCNetworkServerProtocolIdentifierSMB;
  43. return login;
  44. }
  45. @end
  46. @implementation VLCNetworkServerBrowserVLCMedia (SMB)
  47. + (instancetype)SMBNetworkServerBrowserWithLogin:(VLCNetworkServerLoginInformation *)login
  48. {
  49. NSURLComponents *components = [[NSURLComponents alloc] init];
  50. components.scheme = @"smb";
  51. components.host = login.address;
  52. components.port = login.port;
  53. NSURL *url = components.URL;
  54. return [self SMBNetworkServerBrowserWithURL:url
  55. username:login.username
  56. password:login.password
  57. workgroup:nil];
  58. }
  59. + (instancetype)SMBNetworkServerBrowserWithURL:(NSURL *)url username:(NSString *)username password:(NSString *)password workgroup:(NSString *)workgroup {
  60. BOOL guestLogin = username.length == 0 && password.length == 0;
  61. if (guestLogin) {
  62. username = @"Guest";
  63. password = @"";
  64. }
  65. VLCMedia *media = [VLCMedia mediaWithURL:url];
  66. NSDictionary *mediaOptions = @{@"smb-user" : username ?: @"",
  67. @"smb-pwd" : password ?: @"",
  68. @"smb-domain" : workgroup?: @"WORKGROUP"};
  69. [media addOptions:mediaOptions];
  70. return [[self alloc] initWithMedia:media options:mediaOptions];
  71. }
  72. @end