[vlc-commits] [Git][videolan/vlc][master] macosx: Add menu entry to mark recent media items as unseen

Steve Lhomme (@robUx4) gitlab at videolan.org
Tue Jul 1 06:31:23 UTC 2025



Steve Lhomme pushed to branch master at VideoLAN / VLC


Commits:
e0f3c14d by Claudio Cambra at 2025-07-01T06:05:05+00:00
macosx: Add menu entry to mark recent media items as unseen

Signed-off-by: Claudio Cambra <developer at claudiocambra.com>

- - - - -


1 changed file:

- modules/gui/macosx/library/VLCLibraryMenuController.m


Changes:

=====================================
modules/gui/macosx/library/VLCLibraryMenuController.m
=====================================
@@ -27,6 +27,7 @@
 
 #import "library/VLCInputItem.h"
 #import "library/VLCLibraryController.h"
+#import "library/VLCLibraryModel.h"
 #import "library/VLCLibraryRepresentedItem.h"
 #import "library/VLCLibrarySegment.h"
 
@@ -44,6 +45,7 @@
     VLCInformationWindowController *_informationWindowController;
 
     NSHashTable<NSMenuItem*> *_mediaItemRequiringMenuItems;
+    NSHashTable<NSMenuItem*> *_recentsMediaItemRequiringMenuItems;
     NSHashTable<NSMenuItem*> *_inputItemRequiringMenuItems;
     NSHashTable<NSMenuItem*> *_localInputItemRequiringMenuItems;
     NSHashTable<NSMenuItem*> *_folderInputItemRequiringMenuItems;
@@ -78,6 +80,9 @@
     NSMenuItem *deleteItem = [[NSMenuItem alloc] initWithTitle:_NS("Delete from Library") action:@selector(moveToTrash:) keyEquivalent:@""];
     deleteItem.target = self;
 
+    NSMenuItem *markUnseenItem = [[NSMenuItem alloc] initWithTitle:_NS("Mark as Unseen") action:@selector(markUnseen:) keyEquivalent:@""];
+    markUnseenItem.target = self;
+
     NSMenuItem *informationItem = [[NSMenuItem alloc] initWithTitle:_NS("Information...") action:@selector(showInformation:) keyEquivalent:@""];
     informationItem.target = self;
 
@@ -93,6 +98,7 @@
         bookmarkItem,
         revealItem,
         deleteItem,
+        markUnseenItem,
         informationItem,
         [NSMenuItem separatorItem], 
         addItem
@@ -105,6 +111,9 @@
     [_mediaItemRequiringMenuItems addObject:deleteItem];
     [_mediaItemRequiringMenuItems addObject:informationItem];
 
+    _recentsMediaItemRequiringMenuItems = [NSHashTable weakObjectsHashTable];
+    [_recentsMediaItemRequiringMenuItems addObject:markUnseenItem];
+
     _inputItemRequiringMenuItems = [NSHashTable weakObjectsHashTable];
     [_inputItemRequiringMenuItems addObject:playItem];
     [_inputItemRequiringMenuItems addObject:appendItem];
@@ -127,11 +136,26 @@
 
 - (void)updateMenuItems
 {
+    VLCLibraryModel * const libraryModel = VLCMain.sharedInstance.libraryController.libraryModel;
+    NSArray<VLCMediaLibraryMediaItem *> * const recents = libraryModel.listOfRecentMedia;
+
     if (self.representedItems != nil && self.representedItems.count > 0) {
         [self menuItems:_inputItemRequiringMenuItems setHidden:YES];
         [self menuItems:_localInputItemRequiringMenuItems setHidden:YES];
         [self menuItems:_folderInputItemRequiringMenuItems setHidden:YES];
         [self menuItems:_mediaItemRequiringMenuItems setHidden:NO];
+
+        BOOL anyNonRecent = NO;
+        for (VLCLibraryRepresentedItem * const item in self.representedItems) {
+            if ([recents indexOfObjectPassingTest:^BOOL(VLCMediaLibraryMediaItem * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
+                return obj.libraryID == item.item.libraryID;
+            }] == NSNotFound) {
+                anyNonRecent = YES;
+                break;
+            }
+        }
+        [self menuItems:_recentsMediaItemRequiringMenuItems setHidden:anyNonRecent];
+
     } else if (_representedInputItems != nil && self.representedInputItems.count > 0) {
         [self menuItems:_mediaItemRequiringMenuItems setHidden:YES];
         [self menuItems:_inputItemRequiringMenuItems setHidden:NO];
@@ -284,6 +308,14 @@
     [defaultCenter postNotificationName:VLCLibraryBookmarkedLocationsChanged object:inputItemMRL];
 }
 
+- (void)markUnseen:(id)sender
+{
+    vlc_medialibrary_t * const p_ml = vlc_ml_instance_get(getIntf());
+    for (VLCLibraryRepresentedItem * const item in self.representedItems) {
+        vlc_ml_media_set_played(p_ml, item.item.libraryID, false);
+    }
+}
+
 - (void)setRepresentedItems:(NSArray<VLCLibraryRepresentedItem *> *)items
 {
     _representedItems = items;



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

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