diff --git a/Sources/VLCRendererDiscoverer.m b/Sources/VLCRendererDiscoverer.m index 002a88c94a668f76c8eb3d62e4a8b05c23d36e07..b2dcae20ceac2641bbe45dc3dc0ab1bd83405dac 100644 --- a/Sources/VLCRendererDiscoverer.m +++ b/Sources/VLCRendererDiscoverer.m @@ -24,11 +24,13 @@ #import <VLCRendererDiscoverer.h> #import <VLCLibrary.h> #import <VLCLibVLCBridging.h> +#import <VLCEventsHandler.h> @interface VLCRendererDiscoverer() { libvlc_renderer_discoverer_t *_rendererDiscoverer; NSMutableArray<VLCRendererItem *> *_rendererItems; + VLCEventsHandler* _eventsHandler; } - (void)itemAdded:(VLCRendererItem *)item; @@ -39,25 +41,27 @@ #pragma mark - LibVLC event callbacks -static void HandleRendererDiscovererItemAdded(const libvlc_event_t *event, void *self) +static void HandleRendererDiscovererItemAdded(const libvlc_event_t *event, void *opaque) { @autoreleasepool { VLCRendererItem *renderer = [[VLCRendererItem alloc] initWithRendererItem:event->u.renderer_discoverer_item_added.item]; - VLCRendererDiscoverer *rendererDiscoverer = (__bridge VLCRendererDiscoverer *)self; - dispatch_async(dispatch_get_main_queue(), ^{ + VLCEventsHandler *eventsHandler = (__bridge VLCEventsHandler*)opaque; + [eventsHandler handleEvent:^(id _Nonnull object) { + VLCRendererDiscoverer *rendererDiscoverer = (VLCRendererDiscoverer *)object; [rendererDiscoverer itemAdded: renderer]; - }); + }]; } } -static void HandleRendererDiscovererItemDeleted(const libvlc_event_t *event, void *self) +static void HandleRendererDiscovererItemDeleted(const libvlc_event_t *event, void *opaque) { @autoreleasepool { VLCRendererItem *renderer = [[VLCRendererItem alloc] initWithRendererItem:event->u.renderer_discoverer_item_deleted.item]; - VLCRendererDiscoverer *rendererDiscoverer = (__bridge VLCRendererDiscoverer *)self; - dispatch_async(dispatch_get_main_queue(), ^{ - [rendererDiscoverer itemDeleted: renderer]; - }); + VLCEventsHandler *eventsHandler = (__bridge VLCEventsHandler*)opaque; + [eventsHandler handleEvent:^(id _Nonnull object) { + VLCRendererDiscoverer *rendererDiscoverer = (VLCRendererDiscoverer *)object; + [rendererDiscoverer itemDeleted:renderer]; + }]; } } @@ -104,12 +108,12 @@ static void HandleRendererDiscovererItemDeleted(const libvlc_event_t *event, voi _rendererItems = [[NSMutableArray alloc] init]; libvlc_event_manager_t *p_em = libvlc_renderer_discoverer_event_manager(_rendererDiscoverer); - + _eventsHandler = [VLCEventsHandler handlerWithObject:self configuration:[VLCLibrary sharedEventsConfiguration]]; if (p_em) { libvlc_event_attach(p_em, libvlc_RendererDiscovererItemAdded, - HandleRendererDiscovererItemAdded, (__bridge void *)(self)); + HandleRendererDiscovererItemAdded, (__bridge void *)(_eventsHandler)); libvlc_event_attach(p_em, libvlc_RendererDiscovererItemDeleted, - HandleRendererDiscovererItemDeleted, (__bridge void *)(self)); + HandleRendererDiscovererItemDeleted, (__bridge void *)(_eventsHandler)); } } return self; @@ -136,9 +140,9 @@ static void HandleRendererDiscovererItemDeleted(const libvlc_event_t *event, voi if (p_em) { libvlc_event_detach(p_em, libvlc_RendererDiscovererItemAdded, - HandleRendererDiscovererItemAdded, (__bridge void *)(self)); + HandleRendererDiscovererItemAdded, (__bridge void *)(_eventsHandler)); libvlc_event_detach(p_em, libvlc_RendererDiscovererItemDeleted, - HandleRendererDiscovererItemDeleted, (__bridge void *)(self)); + HandleRendererDiscovererItemDeleted, (__bridge void *)(_eventsHandler)); } if (_rendererDiscoverer) {