vlc | branch: master | Felix Paul Kühne <[email protected]> | Sun Apr 21 20:50:32 
2019 +0200| [9d619a74fb2f5e1953234944752f68a50c7b0125] | committer: Felix Paul 
Kühne

macosx/media-source: add API wrapper

> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=9d619a74fb2f5e1953234944752f68a50c7b0125
---

 .../package/macosx/VLC.xcodeproj/project.pbxproj   |  26 +++++
 modules/gui/macosx/Makefile.am                     |   6 +
 modules/gui/macosx/library/VLCInputItem.h          |  52 +++++++++
 modules/gui/macosx/library/VLCInputItem.m          | 126 ++++++++++++++++++++
 modules/gui/macosx/media-source/VLCMediaSource.h   |  44 +++++++
 modules/gui/macosx/media-source/VLCMediaSource.m   | 128 +++++++++++++++++++++
 .../macosx/media-source/VLCMediaSourceProvider.h   |  37 ++++++
 .../macosx/media-source/VLCMediaSourceProvider.m   |  63 ++++++++++
 po/POTFILES.in                                     |   6 +
 9 files changed, 488 insertions(+)

diff --git a/extras/package/macosx/VLC.xcodeproj/project.pbxproj 
b/extras/package/macosx/VLC.xcodeproj/project.pbxproj
index 23632d473a..ecffeb2d52 100644
--- a/extras/package/macosx/VLC.xcodeproj/project.pbxproj
+++ b/extras/package/macosx/VLC.xcodeproj/project.pbxproj
@@ -154,6 +154,9 @@
                7DFBDCB1226A518400B700A5 /* VLCLibraryMenuController.m in 
Sources */ = {isa = PBXBuildFile; fileRef = 7DFBDCB0226A518400B700A5 /* 
VLCLibraryMenuController.m */; };
                7DFBDCB4226CD00900B700A5 /* VLCLibraryDataTypes.m in Sources */ 
= {isa = PBXBuildFile; fileRef = 7DFBDCB3226CD00900B700A5 /* 
VLCLibraryDataTypes.m */; };
                7DFBDCB7226CDFD600B700A5 /* VLCImageView.m in Sources */ = {isa 
= PBXBuildFile; fileRef = 7DFBDCB6226CDFD600B700A5 /* VLCImageView.m */; };
+               7DFBDCBB226CED6300B700A5 /* VLCMediaSourceProvider.m in Sources 
*/ = {isa = PBXBuildFile; fileRef = 7DFBDCBA226CED6300B700A5 /* 
VLCMediaSourceProvider.m */; };
+               7DFBDCBE226CED7200B700A5 /* VLCMediaSource.m in Sources */ = 
{isa = PBXBuildFile; fileRef = 7DFBDCBD226CED7200B700A5 /* VLCMediaSource.m */; 
};
+               7DFBDCC1226DC16200B700A5 /* VLCInputItem.m in Sources */ = {isa 
= PBXBuildFile; fileRef = 7DFBDCC0226DC16200B700A5 /* VLCInputItem.m */; };
 /* End PBXBuildFile section */
 
 /* Begin PBXFileReference section */
@@ -521,6 +524,12 @@
                7DFBDCB3226CD00900B700A5 /* VLCLibraryDataTypes.m */ = {isa = 
PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = 
VLCLibraryDataTypes.m; sourceTree = "<group>"; };
                7DFBDCB5226CDFD600B700A5 /* VLCImageView.h */ = {isa = 
PBXFileReference; lastKnownFileType = sourcecode.c.h; path = VLCImageView.h; 
sourceTree = "<group>"; };
                7DFBDCB6226CDFD600B700A5 /* VLCImageView.m */ = {isa = 
PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = VLCImageView.m; 
sourceTree = "<group>"; };
+               7DFBDCB9226CED6300B700A5 /* VLCMediaSourceProvider.h */ = {isa 
= PBXFileReference; lastKnownFileType = sourcecode.c.h; path = 
VLCMediaSourceProvider.h; sourceTree = "<group>"; };
+               7DFBDCBA226CED6300B700A5 /* VLCMediaSourceProvider.m */ = {isa 
= PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = 
VLCMediaSourceProvider.m; sourceTree = "<group>"; };
+               7DFBDCBC226CED7200B700A5 /* VLCMediaSource.h */ = {isa = 
PBXFileReference; lastKnownFileType = sourcecode.c.h; path = VLCMediaSource.h; 
sourceTree = "<group>"; };
+               7DFBDCBD226CED7200B700A5 /* VLCMediaSource.m */ = {isa = 
PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = 
VLCMediaSource.m; sourceTree = "<group>"; };
+               7DFBDCBF226DC16200B700A5 /* VLCInputItem.h */ = {isa = 
PBXFileReference; lastKnownFileType = sourcecode.c.h; path = VLCInputItem.h; 
sourceTree = "<group>"; };
+               7DFBDCC0226DC16200B700A5 /* VLCInputItem.m */ = {isa = 
PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = VLCInputItem.m; 
sourceTree = "<group>"; };
                8E49720006417F6800370C9F /* VLCInformationWindowController.h */ 
= {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = 
sourcecode.c.h; path = VLCInformationWindowController.h; sourceTree = 
"<group>"; };
                8E49720106417F6800370C9F /* VLCInformationWindowController.m */ 
= {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = 
sourcecode.c.objc; path = VLCInformationWindowController.m; sourceTree = 
"<group>"; };
                8E55FB7F0459B0FD00FB3317 /* VLCOutput.h */ = {isa = 
PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = 
VLCOutput.h; sourceTree = "<group>"; };
@@ -664,6 +673,7 @@
                                1C1ED5112204B08E00811EC0 /* extensions */,
                                1C1ED5122204B0B500811EC0 /* imported */,
                                1C1ED5132204B0CB00811EC0 /* library */,
+                               7DFBDCB8226CED3700B700A5 /* media-source */,
                                1C1ED50E2204B01C00811EC0 /* main */,
                                1C1ED50F2204B04A00811EC0 /* menus */,
                                1C1ED50C2204AFD900811EC0 /* os-integration */,
@@ -939,6 +949,8 @@
                                7DFBDCAD2269ED0C00B700A5 /* 
VLCLibraryDataSource.m */,
                                7DFBDCAF226A518400B700A5 /* 
VLCLibraryMenuController.h */,
                                7DFBDCB0226A518400B700A5 /* 
VLCLibraryMenuController.m */,
+                               7DFBDCBF226DC16200B700A5 /* VLCInputItem.h */,
+                               7DFBDCC0226DC16200B700A5 /* VLCInputItem.m */,
                        );
                        path = library;
                        sourceTree = "<group>";
@@ -1299,6 +1311,17 @@
                        name = Frameworks;
                        sourceTree = "<group>";
                };
+               7DFBDCB8226CED3700B700A5 /* media-source */ = {
+                       isa = PBXGroup;
+                       children = (
+                               7DFBDCB9226CED6300B700A5 /* 
VLCMediaSourceProvider.h */,
+                               7DFBDCBA226CED6300B700A5 /* 
VLCMediaSourceProvider.m */,
+                               7DFBDCBC226CED7200B700A5 /* VLCMediaSource.h */,
+                               7DFBDCBD226CED7200B700A5 /* VLCMediaSource.m */,
+                       );
+                       path = "media-source";
+                       sourceTree = "<group>";
+               };
                8E445F86047289E50059A3A7 /* File Icons */ = {
                        isa = PBXGroup;
                        children = (
@@ -1519,6 +1542,7 @@
                                1CCC88F02078A3D500E5626F /* About.xib in 
Sources */,
                                7DFBDCA82269E77500B700A5 /* 
VLCLibraryController.m in Sources */,
                                1CCC88F12078A3D500E5626F /* AddonManager.xib in 
Sources */,
+                               7DFBDCC1226DC16200B700A5 /* VLCInputItem.m in 
Sources */,
                                1CCC88F22078A3D500E5626F /* AudioEffects.xib in 
Sources */,
                                1CCC88F32078A3D500E5626F /* VideoEffects.xib in 
Sources */,
                                1CCC88F42078A3D500E5626F /* Bookmarks.xib in 
Sources */,
@@ -1526,6 +1550,7 @@
                                1CCC88F62078A3D500E5626F /* MediaInfo.xib in 
Sources */,
                                7D66D4392200C5B80040D04A /* 
VLCVideoFilterHelper.m in Sources */,
                                7D445D812202524000263D34 /* 
VLCPlaylistController.m in Sources */,
+                               7DFBDCBE226CED7200B700A5 /* VLCMediaSource.m in 
Sources */,
                                1CCC88F72078A3D500E5626F /* ConvertAndSave.xib 
in Sources */,
                                1CCC88F82078A3D500E5626F /* CoreDialogs.xib in 
Sources */,
                                1CCC88F92078A3D500E5626F /* 
DetachedVideoWindow.xib in Sources */,
@@ -1588,6 +1613,7 @@
                                7D0F640C2202163E00FDB91F /* 
VLCPlaylistDataSource.m in Sources */,
                                1C3113AD1E508C6900D4DD76 /* 
VLCExtensionsManager.m in Sources */,
                                1C3113AF1E508C6900D4DD76 /* 
VLCFSPanelController.m in Sources */,
+                               7DFBDCBB226CED6300B700A5 /* 
VLCMediaSourceProvider.m in Sources */,
                                7D66D4362200BC340040D04A /* VLCClickerManager.m 
in Sources */,
                                1C3113B11E508C6900D4DD76 /* 
VLCFSPanelDraggableView.m in Sources */,
                                1C3113B41E508C6900D4DD76 /* 
VLCPlaybackContinuityController.m in Sources */,
diff --git a/modules/gui/macosx/Makefile.am b/modules/gui/macosx/Makefile.am
index 5a0a57574d..dd270b144a 100644
--- a/modules/gui/macosx/Makefile.am
+++ b/modules/gui/macosx/Makefile.am
@@ -44,6 +44,8 @@ libmacosx_plugin_la_SOURCES = \
        gui/macosx/imported/AppleRemote/AppleRemote.m \
        gui/macosx/imported/SPMediaKeyTap/SPMediaKeyTap.h \
        gui/macosx/imported/SPMediaKeyTap/SPMediaKeyTap.m \
+       gui/macosx/library/VLCInputItem.h \
+       gui/macosx/library/VLCInputItem.m \
        gui/macosx/library/VLCLibraryCollectionViewItem.h \
        gui/macosx/library/VLCLibraryCollectionViewItem.m \
        gui/macosx/library/VLCLibraryController.h \
@@ -137,6 +139,10 @@ libmacosx_plugin_la_SOURCES = \
        gui/macosx/preferences/prefs.m \
        gui/macosx/preferences/prefs_widgets.h \
        gui/macosx/preferences/prefs_widgets.m \
+       gui/macosx/media-source/VLCMediaSource.h \
+       gui/macosx/media-source/VLCMediaSource.m \
+       gui/macosx/media-source/VLCMediaSourceProvider.h \
+       gui/macosx/media-source/VLCMediaSourceProvider.m \
        gui/macosx/views/VLCBottomBarView.h \
        gui/macosx/views/VLCBottomBarView.m \
        gui/macosx/views/VLCDefaultValueSlider.h \
diff --git a/modules/gui/macosx/library/VLCInputItem.h 
b/modules/gui/macosx/library/VLCInputItem.h
new file mode 100644
index 0000000000..2e41b742b4
--- /dev/null
+++ b/modules/gui/macosx/library/VLCInputItem.h
@@ -0,0 +1,52 @@
+/*****************************************************************************
+ * VLCInputItem.h: MacOS X interface module
+ *****************************************************************************
+ * Copyright (C) 2019 VLC authors and VideoLAN
+ *
+ * Authors: Felix Paul Kühne <fkuehne # videolan -dot- org>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, 
USA.
+ *****************************************************************************/
+
+#import <Foundation/Foundation.h>
+
+#import <vlc_common.h>
+#import <vlc_input_item.h>
+#import <vlc_tick.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface VLCInputItem : NSObject
+
+- (instancetype)initWithInputItem:(struct input_item_t *)p_inputItem;
+
+@property (readonly) NSString *name;
+@property (readonly) NSString *MRL;
+@property (readonly) vlc_tick_t duration;
+@property (readonly) enum input_item_type_e inputType;
+
+@end
+
+@interface VLCInputNode : NSObject
+
+- (instancetype)initWithInputNode:(struct input_item_node_t *)p_inputNode;
+
+@property (readonly, nullable) VLCInputItem *inputItem;
+@property (readonly) int numberOfChildren;
+@property (readonly) NSArray <VLCInputNode *> *children;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/modules/gui/macosx/library/VLCInputItem.m 
b/modules/gui/macosx/library/VLCInputItem.m
new file mode 100644
index 0000000000..500617dbd5
--- /dev/null
+++ b/modules/gui/macosx/library/VLCInputItem.m
@@ -0,0 +1,126 @@
+/*****************************************************************************
+ * VLCInputItem.m: MacOS X interface module
+ *****************************************************************************
+ * Copyright (C) 2019 VLC authors and VideoLAN
+ *
+ * Authors: Felix Paul Kühne <fkuehne # videolan -dot- org>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, 
USA.
+ *****************************************************************************/
+
+#import "VLCInputItem.h"
+
+#import "extensions/NSString+Helpers.h"
+
+@interface VLCInputItem()
+{
+    struct input_item_t *_p_inputItem;
+}
+@end
+
+@implementation VLCInputItem
+
+- (instancetype)initWithInputItem:(struct input_item_t *)p_inputItem
+{
+    self = [super init];
+    if (self && p_inputItem != NULL) {
+        _p_inputItem = p_inputItem;
+        input_item_Hold(_p_inputItem);
+    }
+    return self;
+}
+
+- (void)dealloc
+{
+    input_item_Release(_p_inputItem);
+}
+
+- (NSString *)name
+{
+    if (_p_inputItem) {
+        return toNSStr(_p_inputItem->psz_name);
+    }
+    return @"";
+}
+
+- (NSString *)MRL
+{
+    if (_p_inputItem) {
+        return toNSStr(_p_inputItem->psz_uri);
+    }
+    return @"";
+}
+
+- (vlc_tick_t)duration
+{
+    if (_p_inputItem) {
+        return _p_inputItem->i_duration;
+    }
+    return -1;
+}
+
+- (enum input_item_type_e)inputType
+{
+    if (_p_inputItem) {
+        return _p_inputItem->i_type;
+    }
+    return ITEM_TYPE_UNKNOWN;
+}
+
+@end
+
+@interface VLCInputNode()
+{
+    struct input_item_node_t *_p_inputNode;
+}
+@end
+
+@implementation VLCInputNode
+
+- (instancetype)initWithInputNode:(struct input_item_node_t *)p_inputNode
+{
+    self = [super init];
+    if (self && p_inputNode != NULL) {
+        _p_inputNode = p_inputNode;
+    }
+    return self;
+}
+
+- (VLCInputItem *)inputItem
+{
+    if (_p_inputNode->p_item) {
+        return [[VLCInputItem alloc] initWithInputItem:_p_inputNode->p_item];
+    }
+    return nil;
+}
+
+- (int)numberOfChildren
+{
+    return _p_inputNode->i_children;
+}
+
+- (NSArray<VLCInputNode *> *)children
+{
+    NSMutableArray *mutableArray = [[NSMutableArray alloc] 
initWithCapacity:_p_inputNode->i_children];
+    for (int i = 0; i < _p_inputNode->i_children; i++) {
+        VLCInputNode *inputNode = [[VLCInputNode alloc] 
initWithInputNode:_p_inputNode->pp_children[i]];
+        if (inputNode) {
+            [mutableArray addObject:inputNode];
+        }
+    }
+    return [mutableArray copy];
+}
+
+@end
diff --git a/modules/gui/macosx/media-source/VLCMediaSource.h 
b/modules/gui/macosx/media-source/VLCMediaSource.h
new file mode 100644
index 0000000000..fa1874e4da
--- /dev/null
+++ b/modules/gui/macosx/media-source/VLCMediaSource.h
@@ -0,0 +1,44 @@
+/*****************************************************************************
+ * VLCMediaSource.h: MacOS X interface module
+ *****************************************************************************
+ * Copyright (C) 2019 VLC authors and VideoLAN
+ *
+ * Authors: Felix Paul Kühne <fkuehne # videolan -dot- org>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, 
USA.
+ *****************************************************************************/
+
+#import <Foundation/Foundation.h>
+
+#import <vlc_media_source.h>
+
+@class VLCInputNode;
+
+NS_ASSUME_NONNULL_BEGIN
+
+extern NSString *VLCMediaSourceChildrenReset;
+extern NSString *VLCMediaSourceChildrenAdded;
+extern NSString *VLCMediaSourceChildrenRemoved;
+
+@interface VLCMediaSource : NSObject
+
+- (instancetype)initWithMediaSource:(vlc_media_source_t *)p_mediaSource;
+
+@property (readonly) NSString *mediaSourceDescription;
+@property (readonly) VLCInputNode *rootNode;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/modules/gui/macosx/media-source/VLCMediaSource.m 
b/modules/gui/macosx/media-source/VLCMediaSource.m
new file mode 100644
index 0000000000..ad191fb744
--- /dev/null
+++ b/modules/gui/macosx/media-source/VLCMediaSource.m
@@ -0,0 +1,128 @@
+/*****************************************************************************
+ * VLCMediaSource.m: MacOS X interface module
+ *****************************************************************************
+ * Copyright (C) 2019 VLC authors and VideoLAN
+ *
+ * Authors: Felix Paul Kühne <fkuehne # videolan -dot- org>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, 
USA.
+ *****************************************************************************/
+
+#import "VLCMediaSource.h"
+
+#import "library/VLCInputItem.h"
+
+#import "extensions/NSString+Helpers.h"
+
+@interface VLCMediaSource ()
+{
+    vlc_media_source_t *_p_mediaSource;
+    vlc_media_tree_listener_id *_p_treeListenerID;
+}
+@end
+
+NSString *VLCMediaSourceChildrenReset = @"VLCMediaSourceChildrenReset";
+NSString *VLCMediaSourceChildrenAdded = @"VLCMediaSourceChildrenAdded";
+NSString *VLCMediaSourceChildrenRemoved = @"VLCMediaSourceChildrenRemoved";
+
+static void cb_children_reset(vlc_media_tree_t *p_tree,
+                              input_item_node_t *p_node,
+                              void *p_data)
+{
+    dispatch_async(dispatch_get_main_queue(), ^{
+        [[NSNotificationCenter defaultCenter] 
postNotificationName:VLCMediaSourceChildrenReset
+                                                            
object:[[VLCInputNode alloc] initWithInputNode:p_node]];
+    });
+}
+
+static void cb_children_added(vlc_media_tree_t *p_tree,
+                              input_item_node_t *p_node,
+                              input_item_node_t *const p_children[],
+                              size_t count,
+                              void *p_data)
+{
+    dispatch_async(dispatch_get_main_queue(), ^{
+        [[NSNotificationCenter defaultCenter] 
postNotificationName:VLCMediaSourceChildrenAdded
+                                                            
object:[[VLCInputNode alloc] initWithInputNode:p_node]];
+    });
+}
+
+static void cb_children_removed(vlc_media_tree_t *p_tree,
+                                input_item_node_t *p_node,
+                                input_item_node_t *const p_children[],
+                                size_t count,
+                                void *p_data)
+{
+    dispatch_async(dispatch_get_main_queue(), ^{
+        [[NSNotificationCenter defaultCenter] 
postNotificationName:VLCMediaSourceChildrenRemoved
+                                                            
object:[[VLCInputNode alloc] initWithInputNode:p_node]];
+    });
+}
+
+static const struct vlc_media_tree_callbacks treeCallbacks = {
+    cb_children_reset,
+    cb_children_added,
+    cb_children_removed,
+};
+
+@implementation VLCMediaSource
+
+- (instancetype)initWithMediaSource:(vlc_media_source_t *)p_mediaSource
+{
+    self = [super init];
+    if (self && p_mediaSource != NULL) {
+        _p_mediaSource = p_mediaSource;
+        vlc_media_source_Hold(_p_mediaSource);
+        _p_treeListenerID = vlc_media_tree_AddListener(_p_mediaSource->tree,
+                                                       &treeCallbacks,
+                                                       (__bridge void *)self,
+                                                       NO);
+    }
+    return self;
+}
+
+- (void)dealloc
+{
+    if (_p_mediaSource != NULL) {
+        if (_p_treeListenerID) {
+            vlc_media_tree_RemoveListener(_p_mediaSource->tree,
+                                          _p_treeListenerID);
+        }
+        vlc_media_source_Release(_p_mediaSource);
+    }
+}
+
+- (NSString *)mediaSourceDescription
+{
+    if (_p_mediaSource != NULL) {
+        return toNSStr(_p_mediaSource->description);
+    }
+    return @"";
+}
+
+- (NSString *)description
+{
+    return [NSString stringWithFormat:@"%@ — %@", NSStringFromClass([self 
class]), self.mediaSourceDescription];
+}
+
+- (VLCInputNode *)rootNode
+{
+    vlc_media_tree_Lock(_p_mediaSource->tree);
+    VLCInputNode *inputNode = [[VLCInputNode alloc] 
initWithInputNode:&_p_mediaSource->tree->root];
+    vlc_media_tree_Unlock(_p_mediaSource->tree);
+    return inputNode;
+}
+
+@end
diff --git a/modules/gui/macosx/media-source/VLCMediaSourceProvider.h 
b/modules/gui/macosx/media-source/VLCMediaSourceProvider.h
new file mode 100644
index 0000000000..4392885871
--- /dev/null
+++ b/modules/gui/macosx/media-source/VLCMediaSourceProvider.h
@@ -0,0 +1,37 @@
+/*****************************************************************************
+ * VLCMediaSourceProvider.h: MacOS X interface module
+ *****************************************************************************
+ * Copyright (C) 2019 VLC authors and VideoLAN
+ *
+ * Authors: Felix Paul Kühne <fkuehne # videolan -dot- org>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, 
USA.
+ *****************************************************************************/
+
+#import <Foundation/Foundation.h>
+
+#import <vlc_services_discovery.h>
+
+@class VLCMediaSource;
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface VLCMediaSourceProvider : NSObject
+
++ (NSArray <VLCMediaSource *> *)listOfMediaSourcesForCategory:(enum 
services_discovery_category_e)category;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/modules/gui/macosx/media-source/VLCMediaSourceProvider.m 
b/modules/gui/macosx/media-source/VLCMediaSourceProvider.m
new file mode 100644
index 0000000000..2c4442ad7c
--- /dev/null
+++ b/modules/gui/macosx/media-source/VLCMediaSourceProvider.m
@@ -0,0 +1,63 @@
+/*****************************************************************************
+ * VLCMediaSourceProvider.m: MacOS X interface module
+ *****************************************************************************
+ * Copyright (C) 2019 VLC authors and VideoLAN
+ *
+ * Authors: Felix Paul Kühne <fkuehne # videolan -dot- org>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, 
USA.
+ *****************************************************************************/
+
+#import "VLCMediaSourceProvider.h"
+
+#import "media-source/VLCMediaSource.h"
+#import "main/VLCMain.h"
+
+#import <vlc_media_source.h>
+
+@implementation VLCMediaSourceProvider
+
++ (NSArray <VLCMediaSource *> *)listOfMediaSourcesForCategory:(enum 
services_discovery_category_e)category
+{
+    libvlc_int_t *p_libvlcInstance = vlc_object_instance(getIntf());
+    vlc_media_source_provider_t *p_sourceProvider = 
vlc_media_source_provider_Get(p_libvlcInstance);
+
+    if (p_sourceProvider == NULL) {
+        return @[];
+    }
+
+    vlc_media_source_meta_list_t *p_sourceMetaList = 
vlc_media_source_provider_List(p_sourceProvider,
+                                                                               
     category);
+
+    size_t count = vlc_media_source_meta_list_Count(p_sourceMetaList);
+    NSMutableArray *mutableArray = [[NSMutableArray alloc] 
initWithCapacity:count];
+
+    for (size_t x = 0; x < count; x++) {
+        struct vlc_media_source_meta *p_sourceMetaItem = 
vlc_media_source_meta_list_Get(p_sourceMetaList, x);
+
+        vlc_media_source_t *p_mediaSource = 
vlc_media_source_provider_GetMediaSource(p_sourceProvider, 
p_sourceMetaItem->name);
+        if (p_mediaSource == NULL) {
+            continue;
+        }
+
+        VLCMediaSource *mediaSource = [[VLCMediaSource alloc] 
initWithMediaSource:p_mediaSource];
+        [mutableArray addObject:mediaSource];
+    }
+
+    vlc_media_source_meta_list_Delete(p_sourceMetaList);
+    return [mutableArray copy];
+}
+
+@end
diff --git a/po/POTFILES.in b/po/POTFILES.in
index 495eb3cb3f..f2c6b72083 100644
--- a/po/POTFILES.in
+++ b/po/POTFILES.in
@@ -462,6 +462,8 @@ modules/gui/macosx/extensions/VLCHexNumberFormatter.h
 modules/gui/macosx/extensions/VLCHexNumberFormatter.m
 modules/gui/macosx/extensions/misc.h
 modules/gui/macosx/extensions/misc.m
+modules/gui/macosx/library/VLCInputItem.h
+modules/gui/macosx/library/VLCInputItem.m
 modules/gui/macosx/library/VLCLibraryCollectionViewItem.h
 modules/gui/macosx/library/VLCLibraryCollectionViewItem.m
 modules/gui/macosx/library/VLCLibraryController.h
@@ -553,6 +555,10 @@ modules/gui/macosx/preferences/prefs.h
 modules/gui/macosx/preferences/prefs.m
 modules/gui/macosx/preferences/prefs_widgets.h
 modules/gui/macosx/preferences/prefs_widgets.m
+modules/gui/macosx/media-source/VLCMediaSource.h
+modules/gui/macosx/media-source/VLCMediaSource.m
+modules/gui/macosx/media-source/VLCMediaSourceProvider.h
+modules/gui/macosx/media-source/VLCMediaSourceProvider.m
 modules/gui/macosx/views/VLCBottomBarView.h
 modules/gui/macosx/views/VLCBottomBarView.m
 modules/gui/macosx/views/VLCDefaultValueSlider.h

_______________________________________________
vlc-commits mailing list
[email protected]
https://mailman.videolan.org/listinfo/vlc-commits

Reply via email to