[vlc-commits] [Git][videolan/vlc][master] 3 commits: macosx: Return NSError if relevant from media source node parsing methods
Steve Lhomme (@robUx4)
gitlab at videolan.org
Tue Jun 3 06:52:01 UTC 2025
Steve Lhomme pushed to branch master at VideoLAN / VLC
Commits:
e74d14db by Claudio Cambra at 2025-06-03T06:36:16+00:00
macosx: Return NSError if relevant from media source node parsing methods
Signed-off-by: Claudio Cambra <developer at claudiocambra.com>
- - - - -
b2deaee7 by Claudio Cambra at 2025-06-03T06:36:16+00:00
macosx: Handle returned error types from media source node parsing methods
Signed-off-by: Claudio Cambra <developer at claudiocambra.com>
- - - - -
0aaaf7ed by Claudio Cambra at 2025-06-03T06:36:16+00:00
macosx: Present error alerts when trying to access inaccessible input nodes
Signed-off-by: Claudio Cambra <developer at claudiocambra.com>
- - - - -
5 changed files:
- modules/gui/macosx/library/VLCLibrarySegment.m
- modules/gui/macosx/library/media-source/VLCMediaSource.h
- modules/gui/macosx/library/media-source/VLCMediaSource.m
- modules/gui/macosx/library/media-source/VLCMediaSourceBaseDataSource.m
- modules/gui/macosx/library/media-source/VLCMediaSourceDataSource.m
Changes:
=====================================
modules/gui/macosx/library/VLCLibrarySegment.m
=====================================
@@ -69,7 +69,10 @@ NSArray<NSString *> *defaultBookmarkedLocations()
for (VLCMediaSource * const mediaSource in localMediaSources) {
VLCInputNode * const rootNode = mediaSource.rootNode;
- [mediaSource preparseInputNodeWithinTree:rootNode];
+ NSError * const error = [mediaSource preparseInputNodeWithinTree:rootNode];
+ if (error)
+ continue;
+
if (rootNode.children != nil) {
for (VLCInputNode * const node in rootNode.children) {
=====================================
modules/gui/macosx/library/media-source/VLCMediaSource.h
=====================================
@@ -45,10 +45,10 @@ extern NSString *VLCMediaSourcePreparsingEnded;
- (instancetype)initWithLocalFolderMrl:(NSString *)mrl
andPreparser:(vlc_preparser_t *)p_preparser;
-- (void)preparseInputNodeWithinTree:(VLCInputNode *)inputNode;
+- (nullable NSError *)preparseInputNodeWithinTree:(VLCInputNode *)inputNode;
- (void)clearChildNodesForNode:(input_item_node_t*)inputNode;
-- (void)generateChildNodesForDirectoryNode:(input_item_node_t*)directoryNode
- withUrl:(NSURL*)directoryUrl;
+- (nullable NSError *)generateChildNodesForDirectoryNode:(input_item_node_t *)directoryNode
+ withUrl:(NSURL *)directoryUrl;
@property (nonatomic, readonly) NSString *mediaSourceDescription;
@property (nonatomic, readonly) VLCInputNode *rootNode;
=====================================
modules/gui/macosx/library/media-source/VLCMediaSource.m
=====================================
@@ -290,19 +290,16 @@ static const char *const myFoldersDescription = "My Folders";
}
}
-- (void)preparseInputNodeWithinTree:(VLCInputNode *)inputNode
+- (NSError *)preparseInputNodeWithinTree:(VLCInputNode *)inputNode
{
- if(!inputNode) {
- NSLog(@"Could not preparse input node, is null.");
- return;
- }
+ NSParameterAssert(inputNode != nil);
if (_p_mediaSource->description == localDevicesDescription) {
[self generateLocalDevicesTree];
}
- if (inputNode == nil || inputNode.inputItem == nil) {
- return;
+ if (inputNode.inputItem == nil) {
+ return nil;
}
if (inputNode.inputItem.inputType == ITEM_TYPE_DIRECTORY &&
@@ -310,12 +307,12 @@ static const char *const myFoldersDescription = "My Folders";
input_item_node_t *vlcInputNode = inputNode.vlcInputItemNode;
NSURL *dirUrl = [NSURL URLWithString:inputNode.inputItem.MRL];
- [self generateChildNodesForDirectoryNode:vlcInputNode withUrl:dirUrl];
- return;
+ return [self generateChildNodesForDirectoryNode:vlcInputNode withUrl:dirUrl];
}
vlc_media_tree_Preparse(_p_mediaSource->tree, _p_preparser,
inputNode.inputItem.vlcInputItem);
+ return nil;
}
- (void)clearChildNodesForNode:(nonnull input_item_node_t*)inputNode
@@ -409,13 +406,10 @@ static const char *const myFoldersDescription = "My Folders";
});
}
-- (void)generateChildNodesForDirectoryNode:(input_item_node_t *)directoryNode
- withUrl:(NSURL *)directoryUrl
+- (NSError *)generateChildNodesForDirectoryNode:(input_item_node_t *)directoryNode
+ withUrl:(NSURL *)directoryUrl
{
- if (directoryNode == NULL || directoryUrl == nil) {
- return;
- }
-
+ NSParameterAssert(directoryNode != NULL && directoryUrl != nil);
if (self.willStartGeneratingChildNodesForNodeHandler) {
self.willStartGeneratingChildNodesForNodeHandler(directoryNode);
}
@@ -437,9 +431,9 @@ static const char *const myFoldersDescription = "My Folders";
options:options
error:&error];
- if (children == nil || children.count == 0 || error) {
+ if (error) {
NSLog(@"Failed to get directories: %@.", error);
- return;
+ return error;
}
children = [children sortedArrayUsingComparator:^NSComparisonResult(NSURL *url1, NSURL *url2) {
@@ -491,6 +485,8 @@ static const char *const myFoldersDescription = "My Folders";
if (self.didFinishGeneratingChildNodesForNodeHandler) {
self.didFinishGeneratingChildNodesForNodeHandler(directoryNode);
}
+
+ return nil;
}
- (NSString *)mediaSourceDescription
=====================================
modules/gui/macosx/library/media-source/VLCMediaSourceBaseDataSource.m
=====================================
@@ -21,6 +21,7 @@
*****************************************************************************/
#import "VLCMediaSourceBaseDataSource.h"
+#include <AppKit/AppKit.h>
#import "VLCLibraryMediaSourceViewNavigationStack.h"
#import "VLCMediaSourceProvider.h"
@@ -167,8 +168,11 @@ NSString * const VLCMediaSourceBaseDataSourceNodeChanged = @"VLCMediaSourceBaseD
for (VLCMediaSource * const mediaSource in mediaSources) {
VLCInputNode * const rootNode = [mediaSource rootNode];
- [mediaSource preparseInputNodeWithinTree:rootNode];
- [self.navigationStack installHandlersOnMediaSource:mediaSource];
+ if (rootNode == nil)
+ continue;
+ NSError * const error = [mediaSource preparseInputNodeWithinTree:rootNode];
+ if (error == nil)
+ [self.navigationStack installHandlersOnMediaSource:mediaSource];
}
_mediaSources = mediaSources;
@@ -476,7 +480,13 @@ referenceSizeForHeaderInSection:(NSInteger)section
return;
}
- [mediaSource preparseInputNodeWithinTree:node];
+ NSError * const error = [mediaSource preparseInputNodeWithinTree:node];
+ if (error) {
+ NSAlert * const alert = [NSAlert alertWithError:error];
+ alert.alertStyle = NSAlertStyleCritical;
+ [alert runModal];
+ return;
+ }
VLCMediaSourceDataSource * const newChildDataSource = [[VLCMediaSourceDataSource alloc] init];
=====================================
modules/gui/macosx/library/media-source/VLCMediaSourceDataSource.m
=====================================
@@ -94,7 +94,15 @@ NSString * const VLCMediaSourceDataSourceNodeChanged = @"VLCMediaSourceDataSourc
if (self.parentBaseDataSource.mediaSourceMode == VLCMediaSourceModeLAN) {
NSURL * const nodeUrl = [NSURL URLWithString:nodeToDisplay.inputItem.MRL];
- [self.displayedMediaSource generateChildNodesForDirectoryNode:inputNode withUrl:nodeUrl];
+ NSError * const error =
+ [self.displayedMediaSource generateChildNodesForDirectoryNode:inputNode
+ withUrl:nodeUrl];
+ if (error) {
+ NSAlert * const alert = [NSAlert alertWithError:error];
+ alert.alertStyle = NSAlertStyleCritical;
+ [alert runModal];
+ return;
+ }
const __weak typeof(self) weakSelf = self;
self.observedPathDispatchSource = [self observeLocalUrl:nodeUrl
@@ -266,8 +274,12 @@ NSString * const VLCMediaSourceDataSourceNodeChanged = @"VLCMediaSourceDataSourc
dispatch_async(dispatch_get_global_queue(QOS_CLASS_USER_INITIATED, 0), ^{
NSURL * const inputNodeUrl = [NSURL URLWithString:inputNode.inputItem.MRL];
input_item_node_t * const p_inputNode = inputNode.vlcInputItemNode;
- [self.displayedMediaSource generateChildNodesForDirectoryNode:p_inputNode
- withUrl:inputNodeUrl];
+ NSError * const error =
+ [self.displayedMediaSource generateChildNodesForDirectoryNode:p_inputNode
+ withUrl:inputNodeUrl];
+ if (error)
+ return;
+
dispatch_async(dispatch_get_main_queue(), ^{
cellView.textField.stringValue =
[NSString stringWithFormat:@"%i items", inputNode.numberOfChildren];
@@ -398,7 +410,13 @@ NSString * const VLCMediaSourceDataSourceNodeChanged = @"VLCMediaSourceDataSourc
VLCInputNodePathControlItem *nodePathItem = [[VLCInputNodePathControlItem alloc] initWithInputNode:node];
[self.pathControl appendInputNodePathControlItem:nodePathItem];
- [self.displayedMediaSource preparseInputNodeWithinTree:node];
+ NSError * const error = [self.displayedMediaSource preparseInputNodeWithinTree:node];
+ if (error) {
+ NSAlert * const alert = [NSAlert alertWithError:error];
+ alert.alertStyle = NSAlertStyleCritical;
+ [alert runModal];
+ return;
+ }
self.nodeToDisplay = node;
[self.navigationStack appendCurrentLibraryState];
View it on GitLab: https://code.videolan.org/videolan/vlc/-/compare/1ef06f3349a66e9ec8c6c88dcfa71806d8d2067b...0aaaf7ed0f6d592bed6bfadca1e2eac203919e6e
--
View it on GitLab: https://code.videolan.org/videolan/vlc/-/compare/1ef06f3349a66e9ec8c6c88dcfa71806d8d2067b...0aaaf7ed0f6d592bed6bfadca1e2eac203919e6e
You're receiving this email because of your account on code.videolan.org.
VideoLAN code repository instance
More information about the vlc-commits
mailing list