diff --git a/extras/package/macosx/VLC.xcodeproj/project.pbxproj b/extras/package/macosx/VLC.xcodeproj/project.pbxproj index 23632d473a22428278477747e579d3c0f349358d..ecffeb2d52bed976722d4687c857f8ad004f01a4 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 5a0a57574d622d413709eb9abdffd6802fc82716..dd270b144a09d373b36f3022899ebc3befcae051 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 0000000000000000000000000000000000000000..2e41b742b49a2eff7e0f897d5c5838a34548b8af --- /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 0000000000000000000000000000000000000000..500617dbd5004602fba7465f7bfa80834afbaa2e --- /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 0000000000000000000000000000000000000000..fa1874e4dadb2ed349e82f9acc9254fece0d8cdd --- /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 0000000000000000000000000000000000000000..ad191fb7440b8b05600f5a834159ec5158fa0eac --- /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 0000000000000000000000000000000000000000..4392885871771d2990de29901b86d7b809cb8fd7 --- /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 0000000000000000000000000000000000000000..2c4442ad7cbfc1772b1453950979a977b83d87ed --- /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 495eb3cb3f23cf7bede645a157defa3939ae521c..f2c6b72083e365c6e238ce56652fdb321b16c035 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