[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