From a31d272bcaad1d9dab997ae56d0238808f6d7b21 Mon Sep 17 00:00:00 2001
From: Claudio Cambra <developer@claudiocambra.com>
Date: Sun, 26 May 2024 18:20:58 +0800
Subject: [PATCH] macosx: Change represented object properties in library menu
 controller to use arrays

Signed-off-by: Claudio Cambra <developer@claudiocambra.com>
---
 .../library/VLCLibraryCollectionViewItem.m    |  4 +-
 .../macosx/library/VLCLibraryMenuController.h |  4 +-
 .../macosx/library/VLCLibraryMenuController.m | 59 ++++++++++---------
 .../gui/macosx/library/VLCLibraryTableView.m  |  4 +-
 .../VLCMediaSourceCollectionViewItem.m        |  4 +-
 5 files changed, 38 insertions(+), 37 deletions(-)

diff --git a/modules/gui/macosx/library/VLCLibraryCollectionViewItem.m b/modules/gui/macosx/library/VLCLibraryCollectionViewItem.m
index 1bb2e0c49dca..9b8f001fc37e 100644
--- a/modules/gui/macosx/library/VLCLibraryCollectionViewItem.m
+++ b/modules/gui/macosx/library/VLCLibraryCollectionViewItem.m
@@ -290,7 +290,7 @@ const CGFloat VLCLibraryCollectionViewItemMaximumDisplayedProgress = 0.95;
             _menuController = [[VLCLibraryMenuController alloc] init];
         }
 
-        [_menuController setRepresentedItem:self.representedItem];
+        [_menuController setRepresentedItems:@[self.representedItem]];
         [_menuController popupMenuWithEvent:theEvent forView:self.view];
     } else if (self.deselectWhenClickedIfSelected && 
                self.selected &&
@@ -320,7 +320,7 @@ const CGFloat VLCLibraryCollectionViewItemMaximumDisplayedProgress = 0.95;
         _menuController = [[VLCLibraryMenuController alloc] init];
     }
 
-    [_menuController setRepresentedItem:self.representedItem];
+    [_menuController setRepresentedItems:@[self.representedItem]];
     [_menuController popupMenuWithEvent:theEvent forView:self.view];
 
     [super rightMouseDown:theEvent];
diff --git a/modules/gui/macosx/library/VLCLibraryMenuController.h b/modules/gui/macosx/library/VLCLibraryMenuController.h
index ec40ba3a1e90..ccf696e332ad 100644
--- a/modules/gui/macosx/library/VLCLibraryMenuController.h
+++ b/modules/gui/macosx/library/VLCLibraryMenuController.h
@@ -31,8 +31,8 @@ NS_ASSUME_NONNULL_BEGIN
 @interface VLCLibraryMenuController : NSObject
 
 @property (readonly) NSMenu *libraryMenu;
-@property (readwrite, strong, nonatomic) VLCLibraryRepresentedItem *representedItem;
-@property (readwrite, strong, nonatomic) VLCInputItem *representedInputItem;
+@property (readwrite, strong, nonatomic) NSArray<VLCLibraryRepresentedItem *> *representedItems;
+@property (readwrite, strong, nonatomic) NSArray<VLCInputItem *> *representedInputItems;
 
 - (void)popupMenuWithEvent:(NSEvent *)theEvent forView:(NSView *)theView;
 
diff --git a/modules/gui/macosx/library/VLCLibraryMenuController.m b/modules/gui/macosx/library/VLCLibraryMenuController.m
index 2c7ee7303616..cba6b4370425 100644
--- a/modules/gui/macosx/library/VLCLibraryMenuController.m
+++ b/modules/gui/macosx/library/VLCLibraryMenuController.m
@@ -108,15 +108,16 @@
 
 - (void)updateMenuItems
 {
-    if (_representedItem != nil) {
+    if (self.representedItems != nil && self.representedItems.count > 0) {
         [self menuItems:_inputItemRequiringMenuItems setHidden:YES];
         [self menuItems:_localInputItemRequiringMenuItems setHidden:YES];
         [self menuItems:_mediaItemRequiringMenuItems setHidden:NO];
-    } else if (_representedInputItem != nil) {
+    } else if (_representedInputItems != nil && self.representedInputItems.count > 0) {
         [self menuItems:_mediaItemRequiringMenuItems setHidden:YES];
         [self menuItems:_inputItemRequiringMenuItems setHidden:NO];
 
-        [self menuItems:_localInputItemRequiringMenuItems setHidden:_representedInputItem.isStream];
+        [self menuItems:_localInputItemRequiringMenuItems 
+              setHidden:self.representedInputItems.firstObject.isStream];
     }
 }
 
@@ -131,27 +132,27 @@
                playImmediately:(BOOL)playImmediately
 {
     NSParameterAssert(inputItem);
-    [VLCMain.sharedInstance.playlistController addInputItem:_representedInputItem.vlcInputItem
+    [VLCMain.sharedInstance.playlistController addInputItem:_representedInputItems.firstObject.vlcInputItem
                                                  atPosition:-1
                                               startPlayback:playImmediately];
 }
 
 - (void)play:(id)sender
 {
-    if (self.representedItem != nil) {
-        [self.representedItem play];
-    } else if (self.representedInputItem != nil) {
-        [self addInputItemToPlaylist:self.representedInputItem
+    if (self.representedItems != nil && self.representedItems.count > 0) {
+        [self.representedItems.firstObject play];
+    } else if (self.representedInputItems != nil && self.representedInputItems.count > 0) {
+        [self addInputItemToPlaylist:self.representedInputItems.firstObject
                      playImmediately:YES];
     }
 }
 
 - (void)appendToPlaylist:(id)sender
 {
-    if (self.representedInputItem != nil) {
-        [self.representedItem queue];
-    } else if (self.representedInputItem != nil) {
-        [self addInputItemToPlaylist:self.representedInputItem
+    if (self.representedInputItems != nil && self.representedInputItems.count > 0) {
+        [self.representedItems.firstObject queue];
+    } else if (self.representedInputItems != nil && self.representedInputItems.count > 0) {
+        [self addInputItemToPlaylist:self.representedInputItems.firstObject
                      playImmediately:NO];
     }
 }
@@ -175,19 +176,19 @@
 
 - (void)revealInFinder:(id)sender
 {
-    if (self.representedItem != nil) {
-        [self.representedItem revealInFinder];
-    } else if (_representedInputItem != nil) {
-        [_representedInputItem revealInFinder];
+    if (self.representedItems != nil && self.representedItems.count > 0) {
+        [self.representedItems.firstObject revealInFinder];
+    } else if (self.representedInputItems != nil && self.representedInputItems.count > 0) {
+        [self.representedInputItems.firstObject revealInFinder];
     }
 }
 
 - (void)moveToTrash:(id)sender
 {
-    if (self.representedItem != nil) {
-        [self.representedItem moveToTrash];
-    } else if (_representedInputItem != nil) {
-        [_representedInputItem moveToTrash];
+    if (self.representedItems != nil && self.representedItems.count > 0) {
+        [self.representedItems.firstObject moveToTrash];
+    } else if (self.representedInputItems != nil && self.representedInputItems.count > 0) {
+        [self.representedInputItems.firstObject moveToTrash];
     }
 }
 
@@ -197,31 +198,31 @@
         _informationWindowController = [[VLCInformationWindowController alloc] init];
     }
 
-    const id<VLCMediaLibraryItemProtocol> actualItem = self.representedItem.item;
+    const id<VLCMediaLibraryItemProtocol> actualItem = self.representedItems.firstObject.item;
     if (actualItem != nil) {
         if ([actualItem isKindOfClass:VLCAbstractMediaLibraryAudioGroup.class]) {
             [_informationWindowController setRepresentedMediaLibraryAudioGroup:(VLCAbstractMediaLibraryAudioGroup *)actualItem];
         } else {
             [_informationWindowController setRepresentedInputItem:actualItem.firstMediaItem.inputItem];
         }
-    } else if (_representedInputItem != nil) {
-        _informationWindowController.representedInputItem = _representedInputItem;
+    } else if (self.representedInputItems != nil && self.representedInputItems.count > 0) {
+        _informationWindowController.representedInputItem = self.representedInputItems.firstObject;
     }
 
     [_informationWindowController toggleWindow:sender];
 }
 
-- (void)setRepresentedItem:(VLCLibraryRepresentedItem *)item
+- (void)setRepresentedItems:(NSArray<VLCLibraryRepresentedItem *> *)items
 {
-    _representedItem = item;
-    _representedInputItem = nil;
+    _representedItems = items;
+    _representedInputItems = nil;
     [self updateMenuItems];
 }
 
-- (void)setRepresentedInputItem:(VLCInputItem *)representedInputItem
+- (void)setRepresentedInputItem:(NSArray<VLCInputItem *> *)representedInputItems
 {
-    _representedInputItem = representedInputItem;
-    _representedItem = nil;
+    _representedInputItems = representedInputItems;
+    _representedItems = nil;
     [self updateMenuItems];
 }
 
diff --git a/modules/gui/macosx/library/VLCLibraryTableView.m b/modules/gui/macosx/library/VLCLibraryTableView.m
index ec57b7dfba2e..2d55072ec7f6 100644
--- a/modules/gui/macosx/library/VLCLibraryTableView.m
+++ b/modules/gui/macosx/library/VLCLibraryTableView.m
@@ -89,7 +89,7 @@
                 [[VLCLibraryRepresentedItem alloc] initWithItem:mediaItem parentType:parentType];
             [representedItems addObject:representedItem];
         }];
-        [_menuController setRepresentedItem:representedItems.firstObject];
+        _menuController.representedItems = representedItems;
 
     } else if (self.dataSource.class == VLCMediaSourceDataSource.class) {
         NSMutableArray<VLCInputItem *> * const mediaSourceInputItems = NSMutableArray.array;
@@ -102,7 +102,7 @@
                 [mediaSourceDataSource mediaSourceInputItemAtRow:index];
             [mediaSourceInputItems addObject:mediaSourceInputItem];
         }];
-        [_menuController setRepresentedInputItem:mediaSourceInputItems.firstObject];
+        _menuController.representedInputItems = mediaSourceInputItems;
     }
 }
 
diff --git a/modules/gui/macosx/library/media-source/VLCMediaSourceCollectionViewItem.m b/modules/gui/macosx/library/media-source/VLCMediaSourceCollectionViewItem.m
index f1b9c0567c23..15384a4cab8a 100644
--- a/modules/gui/macosx/library/media-source/VLCMediaSourceCollectionViewItem.m
+++ b/modules/gui/macosx/library/media-source/VLCMediaSourceCollectionViewItem.m
@@ -171,7 +171,7 @@ NSString *VLCMediaSourceCellIdentifier = @"VLCLibraryCellIdentifier";
             _menuController = [[VLCLibraryMenuController alloc] init];
         }
 
-        [_menuController setRepresentedInputItem:_representedInputItem];
+        [_menuController setRepresentedInputItems:@[_representedInputItem]];
         [_menuController popupMenuWithEvent:theEvent forView:self.view];
     }
 
@@ -184,7 +184,7 @@ NSString *VLCMediaSourceCellIdentifier = @"VLCLibraryCellIdentifier";
         _menuController = [[VLCLibraryMenuController alloc] init];
     }
 
-    [_menuController setRepresentedInputItem:_representedInputItem];
+    [_menuController setRepresentedInputItems:@[_representedInputItem]];
     [_menuController popupMenuWithEvent:theEvent forView:self.view];
 
     [super rightMouseDown:theEvent];
-- 
GitLab