[vlc-commits] [Git][videolan/vlc][master] macosx: Display internal track titles from cue/m3u files in playqueue

Steve Lhomme (@robUx4) gitlab at videolan.org
Mon Jun 16 12:12:45 UTC 2025



Steve Lhomme pushed to branch master at VideoLAN / VLC


Commits:
70de580e by Astrom Cheng at 2025-06-16T12:12:37+00:00
macosx: Display internal track titles from cue/m3u files in playqueue

- - - - -


4 changed files:

- modules/gui/macosx/playqueue/VLCPlayQueueController.m
- modules/gui/macosx/playqueue/VLCPlayQueueModel.h
- modules/gui/macosx/playqueue/VLCPlayQueueModel.m
- modules/gui/macosx/playqueue/VLCPlayQueueTableCellView.m


Changes:

=====================================
modules/gui/macosx/playqueue/VLCPlayQueueController.m
=====================================
@@ -337,11 +337,19 @@ static const struct vlc_playlist_callbacks playlist_callbacks = {
 
 - (void)playQueueUpdatedForIndex:(size_t)firstUpdatedIndex items:(vlc_playlist_item_t *const *)items count:(size_t)numberOfItems
 {
-    VLC_UNUSED(items);
-    for (size_t i = firstUpdatedIndex; i < firstUpdatedIndex + numberOfItems; i++) {
-        [_playQueueModel updateItemAtIndex:i];
+    vlc_playlist_Lock(_p_playlist);
+    for (size_t i = 0; i < numberOfItems; i++) {
+        size_t replaceIndex = firstUpdatedIndex + i;
+        if (replaceIndex < vlc_playlist_Count(_p_playlist)) {
+            vlc_playlist_item_t *currentItem = vlc_playlist_Get(_p_playlist, replaceIndex);
+            VLCPlayQueueItem *newItem = [[VLCPlayQueueItem alloc] initWithPlaylistItem:currentItem];
+            [_playQueueModel replaceItemAtIndex:replaceIndex withItem:newItem];
+        }
     }
+    vlc_playlist_Unlock(_p_playlist);
+
     [_playQueueDataSource playQueueUpdated];
+
 }
 
 - (void)playQueuePlaybackRepeatUpdated:(enum vlc_playlist_playback_repeat)currentRepeatMode


=====================================
modules/gui/macosx/playqueue/VLCPlayQueueModel.h
=====================================
@@ -40,7 +40,7 @@ NS_ASSUME_NONNULL_BEGIN
 - (void)moveItemAtIndex:(size_t)index toTarget:(size_t)target;
 - (void)removeItemsInRange:(NSRange)range;
 - (void)updateItemAtIndex:(size_t)index;
-
+- (void)replaceItemAtIndex:(size_t)index withItem:(VLCPlayQueueItem *)newItem;
 @end
 
 NS_ASSUME_NONNULL_END


=====================================
modules/gui/macosx/playqueue/VLCPlayQueueModel.m
=====================================
@@ -90,5 +90,10 @@
     VLCPlayQueueItem * const item = _playQueueArray[index];
     [item updateRepresentation];
 }
-
+- (void)replaceItemAtIndex:(size_t)index withItem:(VLCPlayQueueItem *)newItem
+{
+    NSParameterAssert(index >= 0 && index < _playQueueArray.count);
+    NSParameterAssert(newItem != nil);
+    [_playQueueArray replaceObjectAtIndex:index withObject:newItem];
+}
 @end


=====================================
modules/gui/macosx/playqueue/VLCPlayQueueTableCellView.m
=====================================
@@ -28,6 +28,7 @@
 #import "extensions/NSString+Helpers.h"
 
 #import "library/VLCLibraryImageCache.h"
+#import "library/VLCInputItem.h"
 
 #import "main/VLCMain.h"
 
@@ -35,6 +36,7 @@
 
 #import "views/VLCImageView.h"
 
+#import <vlc_common.h>
 #import <vlc_configuration.h>
 
 @implementation VLCPlayQueueTableCellView
@@ -91,6 +93,16 @@
 
     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);
+
+    NSString *playTitle = item.title;
+    if (validTitleString) {
+        if (item.inputItem.trackNumber && item.inputItem.trackNumber.length > 0) {
+            playTitle = [NSString stringWithFormat:@"%@ · %@", item.inputItem.trackNumber, item.inputItem.title];
+        } else {
+            playTitle = item.inputItem.title;
+        }
+    }
 
     NSString *songDetailString = @"";
 
@@ -104,7 +116,7 @@
         self.mediaTitleTextField.hidden = YES;
         self.secondaryMediaTitleTextField.hidden = NO;
         self.artistTextField.hidden = NO;
-        self.secondaryMediaTitleTextField.stringValue = item.title;
+        self.secondaryMediaTitleTextField.stringValue = playTitle;
         self.artistTextField.stringValue = songDetailString;
         self.audioMediaTypeIndicator.hidden = NO;
 
@@ -114,7 +126,7 @@
         self.mediaTitleTextField.hidden = NO;
         self.secondaryMediaTitleTextField.hidden = YES;
         self.artistTextField.hidden = YES;
-        self.mediaTitleTextField.stringValue = item.title;
+        self.mediaTitleTextField.stringValue = playTitle;
         self.audioMediaTypeIndicator.hidden = YES;
 
         self.audioArtworkImageView.hidden = YES;



View it on GitLab: https://code.videolan.org/videolan/vlc/-/commit/70de580e9b8231fd0bb1da614ccbd95dcce9884a

-- 
View it on GitLab: https://code.videolan.org/videolan/vlc/-/commit/70de580e9b8231fd0bb1da614ccbd95dcce9884a
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