Steve Lhomme pushed to branch master at VideoLAN / VLC
Commits: 102cc5fd by Claudio Cambra at 2026-05-03T07:14:54+00:00 macosx: Add isLibraryMeantToBeAvailable property to library controller Signed-off-by: Claudio Cambra <[email protected]> - - - - - 53930451 by Claudio Cambra at 2026-05-03T07:14:54+00:00 macosx: Do not show media library modal if VLC does not have media library module Signed-off-by: Claudio Cambra <[email protected]> - - - - - 6a898491 by Claudio Cambra at 2026-05-03T07:14:54+00:00 macosx: Hide media library settings segment if the media library is not bundled Signed-off-by: Claudio Cambra <[email protected]> - - - - - d5effb55 by Claudio Cambra at 2026-05-03T07:14:54+00:00 macosx: Hide media library-related sidebar entries if the media library is not expected to be available Signed-off-by: Claudio Cambra <[email protected]> - - - - - 43fc67e8 by Claudio Cambra at 2026-05-03T07:14:54+00:00 macosx: Fall back to browse node if the segment is not available Signed-off-by: Claudio Cambra <[email protected]> - - - - - e0125028 by Claudio Cambra at 2026-05-03T07:14:54+00:00 macosx: Do not attempt to get library instance if it is known the media library module is unavailable Signed-off-by: Claudio Cambra <[email protected]> - - - - - 567e28db by Claudio Cambra at 2026-05-03T07:14:54+00:00 macosx: Do not attempt to instantiate bookmarks window controller if media library unavailable Signed-off-by: Claudio Cambra <[email protected]> - - - - - c1ca4864 by Claudio Cambra at 2026-05-03T07:14:54+00:00 macosx: Disable library-related menu entries when media library unavailable Signed-off-by: Claudio Cambra <[email protected]> - - - - - ef885d08 by Claudio Cambra at 2026-05-03T07:14:54+00:00 macosx: Disable main video view buttons if library unavailable, hide if meant to be unavailable Signed-off-by: Claudio Cambra <[email protected]> - - - - - 034b8ced by Claudio Cambra at 2026-05-03T07:14:54+00:00 macosx: Disable media library settings segment if the media library isn't available Signed-off-by: Claudio Cambra <[email protected]> - - - - - 7b9ac8a3 by Claudio Cambra at 2026-05-03T07:14:54+00:00 macosx: Rename isMediaLibraryMeantToBeAvailable to shouldUseMediaLibrary Signed-off-by: Claudio Cambra <[email protected]> - - - - - 8 changed files: - modules/gui/macosx/library/VLCLibraryController.h - modules/gui/macosx/library/VLCLibraryController.m - modules/gui/macosx/library/VLCLibrarySegment.m - modules/gui/macosx/library/VLCLibraryWindowNavigationSidebarViewController.m - modules/gui/macosx/main/VLCMain.m - modules/gui/macosx/menus/VLCMainMenu.m - modules/gui/macosx/preferences/VLCSimplePrefsController.m - modules/gui/macosx/windows/controlsbar/VLCMainVideoViewControlsBar.m Changes: ===================================== modules/gui/macosx/library/VLCLibraryController.h ===================================== @@ -33,6 +33,7 @@ NS_ASSUME_NONNULL_BEGIN @interface VLCLibraryController : NSObject +@property (readonly) BOOL shouldUseMediaLibrary; @property (readonly, nullable) VLCLibraryModel *libraryModel; - (int)appendItemToPlayQueue:(VLCMediaLibraryMediaItem *)mediaItem ===================================== modules/gui/macosx/library/VLCLibraryController.m ===================================== @@ -38,6 +38,7 @@ #import "playqueue/VLCPlayQueueModel.h" #import <vlc_media_library.h> +#import <vlc_modules.h> typedef int (*folder_action_f)(vlc_medialibrary_t*, const char*); @@ -53,8 +54,13 @@ typedef int (*folder_action_f)(vlc_medialibrary_t*, const char*); { self = [super init]; if (self) { - _p_libraryInstance = vlc_ml_instance_get(getIntf()); - if (!_p_libraryInstance) { + if (self.shouldUseMediaLibrary) { + _p_libraryInstance = vlc_ml_instance_get(getIntf()); + } else { + return self; + } + + if (!_p_libraryInstance && self.shouldUseMediaLibrary) { msg_Info(getIntf(), "VLC runs without media library support"); NSUserDefaults * const defaults = NSUserDefaults.standardUserDefaults; @@ -403,4 +409,9 @@ typedef int (*folder_action_f)(vlc_medialibrary_t*, const char*); self.libraryModel.filterString = filterString; } +- (BOOL)shouldUseMediaLibrary +{ + return module_exists("medialibrary") && var_InheritBool(getIntf(), "media-library"); +} + @end ===================================== modules/gui/macosx/library/VLCLibrarySegment.m ===================================== @@ -22,6 +22,8 @@ #import "VLCLibrarySegment.h" +#import "main/VLCMain.h" + #import "extensions/NSImage+VLCAdditions.h" #import "extensions/NSString+Helpers.h" @@ -50,7 +52,7 @@ #import "library/video-library/VLCLibraryVideoViewController.h" -#import "main/VLCMain.h" +#import <vlc_modules.h> NSString * const VLCLibraryBookmarkedLocationsKey = @"VLCLibraryBookmarkedLocations"; NSString * const VLCLibraryBookmarkedLocationsChanged = @"VLCLibraryBookmarkedLocationsChanged"; @@ -909,18 +911,27 @@ NSArray<NSString *> *defaultBookmarkedLocations() + (NSArray<VLCLibrarySegment *> *)librarySegments { - return @[ - [[VLCLibraryHomeSegment alloc] init], - [[VLCLibraryHeaderSegment alloc] initWithDisplayString:_NS("Library")], - [[VLCLibraryFavoritesSegment alloc] init], - [[VLCLibraryVideoSegment alloc] init], - [[VLCLibraryMusicSegment alloc] init], - [[VLCLibraryPlaylistSegment alloc] init], - [[VLCLibraryGroupSegment alloc] init], + NSMutableArray *segments = [NSMutableArray array]; + + if (VLCMain.sharedInstance.libraryController.shouldUseMediaLibrary) { + [segments addObjectsFromArray:@[ + [[VLCLibraryHomeSegment alloc] init], + [[VLCLibraryHeaderSegment alloc] initWithDisplayString:_NS("Library")], + [[VLCLibraryFavoritesSegment alloc] init], + [[VLCLibraryVideoSegment alloc] init], + [[VLCLibraryMusicSegment alloc] init], + [[VLCLibraryPlaylistSegment alloc] init], + [[VLCLibraryGroupSegment alloc] init] + ]]; + } + + [segments addObjectsFromArray:@[ [[VLCLibraryHeaderSegment alloc] initWithDisplayString:_NS("Explore")], [[VLCLibraryBrowseSegment alloc] init], [[VLCLibraryStreamsSegment alloc] init], - ]; + ]]; + + return segments.copy; } + (instancetype)segmentWithSegmentType:(VLCLibrarySegmentType)segmentType ===================================== modules/gui/macosx/library/VLCLibraryWindowNavigationSidebarViewController.m ===================================== @@ -287,7 +287,6 @@ static NSString * const VLCLibrarySegmentCellIdentifier = @"VLCLibrarySegmentCel nodes = nextLevelNodes.copy; } - NSAssert(NO, @"Could not find node for segment type %ld", segmentType); return nil; } @@ -321,13 +320,19 @@ static NSString * const VLCLibrarySegmentCellIdentifier = @"VLCLibrarySegmentCel segmentType = VLCLibraryBrowseSegmentType; } + NSTreeNode *targetNode = [self nodeForSegmentType:segmentType]; + if (targetNode == nil) { + // Fallback to Browse if the segment is not available + segmentType = VLCLibraryBrowseSegmentType; + targetNode = [self nodeForSegmentType:segmentType]; + } + self.libraryWindow.librarySegmentType = segmentType; if (segmentType == VLCLibraryMusicSegmentType) { [self.outlineView expandItem:[self nodeForSegmentType:VLCLibraryMusicSegmentType]]; } - NSTreeNode * const targetNode = [self nodeForSegmentType:segmentType]; const NSInteger segmentIndex = [self.outlineView rowForItem:targetNode]; [self expandParentsOfNode:targetNode]; [self.outlineView selectRowIndexes:[NSIndexSet indexSetWithIndex:segmentIndex] ===================================== modules/gui/macosx/main/VLCMain.m ===================================== @@ -550,6 +550,10 @@ static VLCMain *sharedInstance = nil; - (VLCBookmarksWindowController *)bookmarks { + if (!self.libraryController.libraryModel) { + return nil; + } + if (!_bookmarks) _bookmarks = [[VLCBookmarksWindowController alloc] init]; ===================================== modules/gui/macosx/menus/VLCMainMenu.m ===================================== @@ -472,6 +472,7 @@ typedef NS_ENUM(NSInteger, VLCObjectType) { [_videoeffects setTitle: _NS("Video Effects...")]; [_bookmarks setTitle: _NS("Bookmarks...")]; [_playQueue setTitle: _NS("Play Queue...")]; + [_detachedAudioWindow setTitle: _NS("Detached Audio Window...")]; [_info setTitle: _NS("Media Information...")]; [_messages setTitle: _NS("Messages...")]; @@ -891,8 +892,9 @@ typedef NS_ENUM(NSInteger, VLCObjectType) { - (void)updateLibraryPlayQueueMode { + const BOOL mlAvailable = VLCMain.sharedInstance.libraryController.libraryModel != nil; const BOOL libraryPlayQueueMode = _playQueueController.libraryPlayQueueMode; - _libraryPlayQueueMode.state = libraryPlayQueueMode ? NSOnState : NSOffState; + _libraryPlayQueueMode.state = libraryPlayQueueMode && mlAvailable ? NSControlStateValueOn : NSControlStateValueOff; } - (IBAction)goToSpecificTime:(id)sender @@ -1916,7 +1918,10 @@ typedef NS_ENUM(NSInteger, VLCObjectType) { if (mi == nil) { return YES; } else if (mi == self.savePlayqueueToLibrary) { - return _playQueueController.playQueueModel.numberOfPlayQueueItems > 0; + return VLCMain.sharedInstance.libraryController.libraryModel != nil && + _playQueueController.playQueueModel.numberOfPlayQueueItems > 0; + } else if (mi == self.bookmarks || mi == self.libraryPlayQueueMode) { + return VLCMain.sharedInstance.libraryController.libraryModel != nil; } else if (mi == self.play) { return _playerController.playerState == VLC_PLAYER_STATE_PLAYING ? _playerController.currentMedia != nil && _playerController.pausable @@ -1988,6 +1993,10 @@ typedef NS_ENUM(NSInteger, VLCObjectType) { return _playerController.videoTracks.count > 0; } else if (mi == self.voutMenuSubtitlestrack) { return _playerController.subtitleTracks.count > 0; + } else if (mi == self.libraryPlayQueueMode || + mi == self.bookmarks || + mi == self.savePlayqueueToLibrary) { + return VLCMain.sharedInstance.libraryController.libraryModel != nil; } else { NSMenuItem * const parent = mi.parentItem; if (parent == self.subtitle_textcolor || mi == self.subtitle_textcolor || ===================================== modules/gui/macosx/preferences/VLCSimplePrefsController.m ===================================== @@ -314,7 +314,7 @@ create_toolbar_item(NSString *itemIdent, NSString *name, NSString *desc, NSStrin static NSArray<NSString *> *toolbarIdentifiers = nil; dispatch_once(&onceToken, ^{ - if (VLCMain.sharedInstance.libraryController.libraryModel) { + if (VLCMain.sharedInstance.libraryController.shouldUseMediaLibrary) { toolbarIdentifiers = @[VLCIntfSettingToolbarIdentifier, VLCAudioSettingToolbarIdentifier, VLCVideoSettingToolbarIdentifier, @@ -352,6 +352,14 @@ create_toolbar_item(NSString *itemIdent, NSString *name, NSString *desc, NSStrin return [self toolbarIdentifiers]; } +- (BOOL)validateToolbarItem:(NSToolbarItem *)item +{ + if ([item.itemIdentifier isEqual:VLCMediaLibrarySettingToolbarIdentifier]) { + return VLCMain.sharedInstance.libraryController.libraryModel != nil; + } + return YES; +} + - (void)initStrings { /* audio */ ===================================== modules/gui/macosx/windows/controlsbar/VLCMainVideoViewControlsBar.m ===================================== @@ -24,6 +24,7 @@ #import "extensions/NSString+Helpers.h" +#import "library/VLCLibraryController.h" #import "library/VLCLibraryDataTypes.h" #import "main/VLCMain.h" @@ -111,6 +112,10 @@ _playQueueController = VLCMain.sharedInstance.playQueueController; _playerController = _playQueueController.playerController; + VLCLibraryController * const libraryController = VLCMain.sharedInstance.libraryController; + self.bookmarksButton.hidden = !libraryController.shouldUseMediaLibrary; + self.bookmarksButton.enabled = libraryController.libraryModel != nil; + NSNotificationCenter * const notificationCenter = NSNotificationCenter.defaultCenter; [notificationCenter addObserver:self selector:@selector(floatOnTopChanged:) @@ -277,6 +282,10 @@ const BOOL currentItemIsAudio = _playerController.currentMediaIsAudioOnly; self.videoButton.hidden = currentItemIsAudio; self.subtitlesButton.hidden = currentItemIsAudio; + + if (!VLCMain.sharedInstance.libraryController.shouldUseMediaLibrary) { + self.bookmarksButton.hidden = YES; + } } - (void)playerStateUpdated:(NSNotification *)notification View it on GitLab: https://code.videolan.org/videolan/vlc/-/compare/d86f220fc6dade96c636b38a35cccd7b265ebd86...7b9ac8a3b81e33645562c0260b9c8a94e8e4a994 -- View it on GitLab: https://code.videolan.org/videolan/vlc/-/compare/d86f220fc6dade96c636b38a35cccd7b265ebd86...7b9ac8a3b81e33645562c0260b9c8a94e8e4a994 You're receiving this email because of your account on code.videolan.org.
_______________________________________________ vlc-commits mailing list [email protected] https://mailman.videolan.org/listinfo/vlc-commits
