[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