VLCLocalNetworkServiceBrowserMediaDiscoverer.m 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  1. /*****************************************************************************
  2. * VLCLocalNetworkServiceBrowserMediaDiscoverer.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 "VLCLocalNetworkServiceBrowserMediaDiscoverer.h"
  13. @interface VLCLocalNetworkServiceBrowserMediaDiscoverer () <VLCMediaListDelegate>
  14. @property (nonatomic, readonly) NSString *serviceName;
  15. @property (nonatomic, readwrite) VLCMediaDiscoverer* mediaDiscoverer;
  16. @end
  17. @implementation VLCLocalNetworkServiceBrowserMediaDiscoverer
  18. @synthesize name = _name, delegate = _delegate;
  19. - (instancetype)initWithName:(NSString *)name serviceServiceName:(NSString *)serviceName
  20. {
  21. self = [super init];
  22. if (self) {
  23. _name = name;
  24. _serviceName = serviceName;
  25. }
  26. return self;
  27. }
  28. - (instancetype)init {
  29. return [self initWithName:@"" serviceServiceName:@""];
  30. }
  31. - (void)startDiscovery
  32. {
  33. // don't start discovery twice
  34. if (self.mediaDiscoverer) {
  35. return;
  36. }
  37. VLCMediaDiscoverer *discoverer = [[VLCMediaDiscoverer alloc] initWithName:self.serviceName];
  38. self.mediaDiscoverer = discoverer;
  39. [discoverer startDiscoverer];
  40. discoverer.discoveredMedia.delegate = self;
  41. }
  42. - (void)stopDiscovery
  43. {
  44. VLCMediaDiscoverer *discoverer = self.mediaDiscoverer;
  45. discoverer.discoveredMedia.delegate = nil;
  46. [discoverer stopDiscoverer];
  47. self.mediaDiscoverer = nil;
  48. }
  49. - (NSUInteger)numberOfItems {
  50. return self.mediaDiscoverer.discoveredMedia.count;
  51. }
  52. - (id<VLCLocalNetworkService>)networkServiceForIndex:(NSUInteger)index {
  53. VLCMedia *media = [self.mediaDiscoverer.discoveredMedia mediaAtIndex:index];
  54. return [[VLCLocalNetworkServiceVLCMedia alloc] initWithMediaItem:media];
  55. }
  56. #pragma mark - VLCMediaListDelegate
  57. - (void)mediaList:(VLCMediaList *)aMediaList mediaAdded:(VLCMedia *)media atIndex:(NSInteger)index
  58. {
  59. [self.delegate localNetworkServiceBrowserDidUpdateServices:self];
  60. }
  61. - (void)mediaList:(VLCMediaList *)aMediaList mediaRemovedAtIndex:(NSInteger)index
  62. {
  63. [self.delegate localNetworkServiceBrowserDidUpdateServices:self];
  64. }
  65. @end
  66. #pragma mark - service specific subclasses
  67. @implementation VLCLocalNetworkServiceBrowserSAP
  68. - (instancetype)init {
  69. return [super initWithName:@"SAP"
  70. serviceServiceName:@"sap"];
  71. }
  72. - (id<VLCLocalNetworkService>)networkServiceForIndex:(NSUInteger)index {
  73. VLCMedia *media = [self.mediaDiscoverer.discoveredMedia mediaAtIndex:index];
  74. return [[VLCLocalNetworkServiceSAP alloc] initWithMediaItem:media];
  75. }
  76. @end
  77. @implementation VLCLocalNetworkServiceBrowserDSM
  78. - (instancetype)init {
  79. return [super initWithName:NSLocalizedString(@"SMB_CIFS_FILE_SERVERS", nil)
  80. serviceServiceName:@"dsm"];
  81. }
  82. - (id<VLCLocalNetworkService>)networkServiceForIndex:(NSUInteger)index {
  83. VLCMedia *media = [self.mediaDiscoverer.discoveredMedia mediaAtIndex:index];
  84. return [[VLCLocalNetworkServiceDSM alloc] initWithMediaItem:media];
  85. }
  86. @end