VLCLocalNetworkServiceBrowserDSM.m 2.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  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. return [[VLCLocalNetworkServiceDSM alloc] initWithMediaItem:media];
  27. }
  28. @end
  29. NSString *const VLCNetworkServerProtocolIdentifierSMB = @"smb";
  30. @implementation VLCLocalNetworkServiceDSM
  31. - (UIImage *)icon {
  32. return [UIImage imageNamed:@"serverIcon"];
  33. }
  34. - (VLCNetworkServerLoginInformation *)loginInformation {
  35. VLCMedia *media = self.mediaItem;
  36. if (media.mediaType != VLCMediaTypeDirectory)
  37. return nil;
  38. VLCNetworkServerLoginInformation *login = [[VLCNetworkServerLoginInformation alloc] init];
  39. login.address = self.mediaItem.url.host;
  40. login.protocolIdentifier = VLCNetworkServerProtocolIdentifierSMB;
  41. return login;
  42. }
  43. @end
  44. @implementation VLCNetworkServerBrowserVLCMedia (SMB)
  45. + (instancetype)SMBNetworkServerBrowserWithLogin:(VLCNetworkServerLoginInformation *)login
  46. {
  47. NSURLComponents *components = [[NSURLComponents alloc] init];
  48. components.scheme = @"smb";
  49. components.host = login.address;
  50. components.port = login.port;
  51. NSURL *url = components.URL;
  52. return [self SMBNetworkServerBrowserWithURL:url
  53. username:login.username
  54. password:login.password
  55. workgroup:nil];
  56. }
  57. + (instancetype)SMBNetworkServerBrowserWithURL:(NSURL *)url username:(NSString *)username password:(NSString *)password workgroup:(NSString *)workgroup {
  58. VLCMedia *media = [VLCMedia mediaWithURL:url];
  59. NSDictionary *mediaOptions = @{@"smb-user" : username ?: @"",
  60. @"smb-pwd" : password ?: @"",
  61. @"smb-domain" : workgroup?: @"WORKGROUP"};
  62. [media addOptions:mediaOptions];
  63. return [[self alloc] initWithMedia:media options:mediaOptions];
  64. }
  65. @end