[vlc-commits] [Git][videolan/vlc][master] 2 commits: macosx: Ensure expected media item title is presented in playqueue and controls bars
Felix Paul Kühne (@fkuehne)
gitlab at videolan.org
Sat Aug 15 08:11:26 UTC 2026
Felix Paul Kühne pushed to branch master at VideoLAN / VLC
Commits:
f7f64ffd by Claudio Cambra at 2026-08-15T09:55:55+02:00
macosx: Ensure expected media item title is presented in playqueue and controls bars
Signed-off-by: Claudio Cambra <developer at claudiocambra.com>
- - - - -
37168adf by Claudio Cambra at 2026-08-15T09:55:55+02:00
macosx: Ensure thumbnail is correctly acquired in controls bars and decorative views for ml items
Signed-off-by: Claudio Cambra <developer at claudiocambra.com>
- - - - -
5 changed files:
- modules/gui/macosx/library/VLCLibraryImageCache.m
- modules/gui/macosx/playqueue/VLCPlayQueueTableCellView.m
- modules/gui/macosx/windows/controlsbar/VLCControlsBarCommon.m
- modules/gui/macosx/windows/controlsbar/VLCMainWindowControlsBar.m
- modules/gui/macosx/windows/video/VLCMainVideoViewAudioMediaDecorativeView.m
Changes:
=====================================
modules/gui/macosx/library/VLCLibraryImageCache.m
=====================================
@@ -617,8 +617,14 @@ static NSString *thumbnailHashForString(NSString *string)
+ (void)thumbnailForPlayQueueItem:(VLCPlayQueueItem *)playQueueItem
withCompletion:(nonnull void (^)(const NSImage * _Nonnull))completionHandler
{
- return [VLCLibraryImageCache.sharedImageCache imageForInputItem:playQueueItem.inputItem
- withCompletion:completionHandler];
+ VLCMediaLibraryMediaItem * const mediaItem = playQueueItem.mediaLibraryItem;
+ if (mediaItem.smallArtworkGenerated && mediaItem.smallArtworkMRL.length > 0) {
+ return [VLCLibraryImageCache thumbnailForLibraryItem:mediaItem
+ withCompletion:completionHandler];
+ }
+
+ return [VLCLibraryImageCache thumbnailForInputItem:playQueueItem.inputItem
+ withCompletion:completionHandler];
}
+ (void)thumbnailForLibraryItem:(id<VLCMediaLibraryItemProtocol>)libraryItem
=====================================
modules/gui/macosx/playqueue/VLCPlayQueueTableCellView.m
=====================================
@@ -29,6 +29,7 @@
#import "library/VLCLibraryImageCache.h"
#import "library/VLCInputItem.h"
+#import "library/VLCLibraryDataTypes.h"
#import "main/VLCMain.h"
@@ -120,15 +121,17 @@ NSString * const VLCDisplayTrackNumberPlayQueueSettingChanged = @"VLCDisplayTrac
const BOOL validArtistString = item.artistName && item.artistName.length > 0;
const BOOL validAlbumString = item.albumName && item.albumName.length > 0;
- const BOOL validTitleString = item.inputItem && item.inputItem.title && (item.inputItem.title.length > 0);
+ VLCInputItem * const inputItem = item.inputItem;
+ VLCMediaLibraryMediaItem * const mediaItem = item.mediaLibraryItem;
+ NSString * const libraryTitle = mediaItem.title;
+ NSString * const inputTitle = inputItem.title;
+ const BOOL validTitleString = libraryTitle.length > 0 || inputTitle.length > 0;
- NSString *playTitle = item.title;
+ NSString *playTitle = libraryTitle.length > 0 ? libraryTitle : inputTitle ?: item.title;
if (validTitleString) {
- NSString * const trackNumberString = item.inputItem.trackNumber;
+ NSString * const trackNumberString = inputItem.trackNumber;
if ([NSUserDefaults.standardUserDefaults boolForKey:VLCDisplayTrackNumberPlayQueueKey] && trackNumberString && trackNumberString.length > 0 && ![trackNumberString isEqualToString:@"0"]) {
- playTitle = [NSString stringWithFormat:@"%@ · %@", trackNumberString, item.inputItem.title];
- } else {
- playTitle = item.inputItem.title;
+ playTitle = [NSString stringWithFormat:@"%@ · %@", trackNumberString, playTitle];
}
}
=====================================
modules/gui/macosx/windows/controlsbar/VLCControlsBarCommon.m
=====================================
@@ -28,6 +28,7 @@
#import "extensions/NSString+Helpers.h"
#import "library/VLCInputItem.h"
+#import "library/VLCLibraryImageCache.h"
#import "main/VLCMain.h"
@@ -544,19 +545,35 @@
VLCMediaLibraryMediaItem * const mediaItem =
[VLCMediaLibraryMediaItem mediaItemForURL:_playerController.URLOfCurrentMediaItem];
- self.playingItemDisplayField.stringValue = inputItem.name ?: _NS("No current item");
+ NSString * const displayTitle = mediaItem.title.length > 0 ? mediaItem.title : inputItem.name;
+ self.playingItemDisplayField.stringValue = displayTitle ?: _NS("No current item");
self.detailLabel.hidden =
mediaItem == nil ||
[mediaItem.primaryDetailString isEqualToString:@""] ||
[mediaItem.primaryDetailString isEqualToString:mediaItem.durationString];
self.detailLabel.stringValue = mediaItem.primaryDetailString ?: @"";
- NSURL * const artworkURL = inputItem.artworkURL;
NSImage * const placeholderImage = NSImage.VLCNoArtImage;
- if (artworkURL) {
- [self.artworkImageView setImageURL:inputItem.artworkURL placeholderImage:placeholderImage];
+ self.artworkImageView.image = placeholderImage;
+ if (inputItem == nil) {
+ return;
+ }
+
+ __weak typeof(self) weakSelf = self;
+ void (^completionHandler)(NSImage * const) = ^(NSImage * const thumbnail) {
+ VLCControlsBarCommon * const strongSelf = weakSelf;
+ if (!strongSelf || inputItem != strongSelf->_playerController.currentMedia) {
+ return;
+ }
+ strongSelf.artworkImageView.image = thumbnail ?: placeholderImage;
+ };
+
+ if (mediaItem.smallArtworkGenerated && mediaItem.smallArtworkMRL.length > 0) {
+ [VLCLibraryImageCache thumbnailForLibraryItem:mediaItem
+ withCompletion:completionHandler];
} else {
- self.artworkImageView.image = placeholderImage;
+ [VLCLibraryImageCache thumbnailForInputItem:inputItem
+ withCompletion:completionHandler];
}
}
=====================================
modules/gui/macosx/windows/controlsbar/VLCMainWindowControlsBar.m
=====================================
@@ -32,6 +32,7 @@
#import "extensions/NSView+VLCAdditions.h"
#import "library/VLCInputItem.h"
+#import "library/VLCLibraryDataTypes.h"
#import "library/VLCLibraryWindow.h"
#import "main/VLCMain.h"
@@ -210,7 +211,9 @@
NSFont * const boldSystemFont = [NSFont boldSystemFontOfSize:12.];
NSDictionary<NSString *, id> * const boldAttribute = @{NSFontAttributeName: boldSystemFont};
- NSMutableAttributedString * const displayString = [[NSMutableAttributedString alloc] initWithString:inputItem.name attributes:boldAttribute];
+ VLCMediaLibraryMediaItem * const mediaItem = _playerController.currentMediaLibraryItem;
+ NSString * const displayTitle = mediaItem.title.length > 0 ? mediaItem.title : inputItem.name;
+ NSMutableAttributedString * const displayString = [[NSMutableAttributedString alloc] initWithString:displayTitle attributes:boldAttribute];
if (inputItem.artist.length != 0) {
NSAttributedString * const separator = [[NSAttributedString alloc] initWithString:@" · " attributes:boldAttribute];
=====================================
modules/gui/macosx/windows/video/VLCMainVideoViewAudioMediaDecorativeView.m
=====================================
@@ -98,15 +98,25 @@
VLCPlayerController * const controller =
VLCMain.sharedInstance.playQueueController.playerController;
VLCInputItem * const currentInputItem = controller.currentMedia;
- if (controller.currentMedia) {
- __weak typeof(self) weakSelf = self;
+ if (!currentInputItem) {
+ return;
+ }
+
+ VLCMediaLibraryMediaItem * const mediaItem = controller.currentMediaLibraryItem;
+ __weak typeof(self) weakSelf = self;
+ void (^completionHandler)(NSImage * const) = ^(NSImage * const thumbnail) {
+ if (currentInputItem != controller.currentMedia) {
+ return;
+ }
+ [weakSelf setCoverArt:thumbnail];
+ };
+
+ if (mediaItem.smallArtworkGenerated && mediaItem.smallArtworkMRL.length > 0) {
+ [VLCLibraryImageCache thumbnailForLibraryItem:mediaItem
+ withCompletion:completionHandler];
+ } else {
[VLCLibraryImageCache thumbnailForInputItem:currentInputItem
- withCompletion:^(NSImage * const thumbnail) {
- if (currentInputItem != controller.currentMedia) {
- return;
- }
- [weakSelf setCoverArt:thumbnail];
- }];
+ withCompletion:completionHandler];
}
}
View it on GitLab: https://code.videolan.org/videolan/vlc/-/compare/11b36ad142cde9354864625c6d5cbde1c21c9538...37168adfa337f6ff999530c86d44526a0f14966e
--
View it on GitLab: https://code.videolan.org/videolan/vlc/-/compare/11b36ad142cde9354864625c6d5cbde1c21c9538...37168adfa337f6ff999530c86d44526a0f14966e
You're receiving this email because of your account on code.videolan.org. Manage all notifications: https://code.videolan.org/-/profile/notifications | Help: https://code.videolan.org/help
More information about the vlc-commits
mailing list