[vlc-commits] [Git][videolan/vlc][master] 3 commits: macosx: Add method to set specific favorite value on media library item
Felix Paul Kühne (@fkuehne)
gitlab at videolan.org
Sun Jul 6 08:12:28 UTC 2025
Felix Paul Kühne pushed to branch master at VideoLAN / VLC
Commits:
1b614165 by Claudio Cambra at 2025-07-06T07:58:56+00:00
macosx: Add method to set specific favorite value on media library item
Signed-off-by: Claudio Cambra <developer at claudiocambra.com>
- - - - -
b67ad854 by Claudio Cambra at 2025-07-06T07:58:56+00:00
macosx: Add table view row swipe action to append item to play queue
Signed-off-by: Claudio Cambra <developer at claudiocambra.com>
- - - - -
87247e6c by Claudio Cambra at 2025-07-06T07:58:56+00:00
macosx: Add favorite swipe action from trailing edge of table view
Signed-off-by: Claudio Cambra <developer at claudiocambra.com>
- - - - -
3 changed files:
- modules/gui/macosx/library/VLCLibraryDataTypes.h
- modules/gui/macosx/library/VLCLibraryDataTypes.m
- modules/gui/macosx/library/VLCLibraryTableViewDelegate.m
Changes:
=====================================
modules/gui/macosx/library/VLCLibraryDataTypes.h
=====================================
@@ -335,6 +335,7 @@ typedef NS_ENUM(NSUInteger, VLCMediaLibraryParentGroupType) {
@property (readonly) int trackNumber;
@property (readonly) int discNumber;
+- (int)setFavorite:(BOOL)favorite;
- (int)toggleFavorite;
@end
=====================================
modules/gui/macosx/library/VLCLibraryDataTypes.m
=====================================
@@ -1576,19 +1576,23 @@ static NSString *genreArrayDisplayString(NSArray<VLCMediaLibraryGenre *> * const
return self.internalLabels;
}
-- (int)toggleFavorite
+- (int)setFavorite:(BOOL)favorite
{
const int64_t mediaItemId = self.libraryID;
- const bool b_favorite = self.favorited;
vlc_medialibrary_t * const p_ml = vlc_ml_instance_get(getIntf());
- const int result = vlc_ml_media_set_favorite(p_ml, mediaItemId, !b_favorite);
+ const int result = vlc_ml_media_set_favorite(p_ml, mediaItemId, favorite);
if (result == VLC_SUCCESS)
- _favorited = !_favorited;
+ _favorited = favorite;
else
NSLog(@"Unable to set favorite status of media item: %lli", mediaItemId);
return result;
}
+- (int)toggleFavorite
+{
+ return [self setFavorite:!self.favorited];
+}
+
@end
@implementation VLCMediaLibraryShow
=====================================
modules/gui/macosx/library/VLCLibraryTableViewDelegate.m
=====================================
@@ -22,11 +22,20 @@
#import "VLCLibraryTableViewDelegate.h"
+#import "extensions/NSColor+VLCAdditions.h"
+#import "extensions/NSString+Helpers.h"
+
+#import "library/VLCInputItem.h"
+#import "library/VLCLibraryController.h"
+#import "library/VLCLibraryDataTypes.h"
+#import "library/VLCLibraryRepresentedItem.h"
#import "library/VLCLibraryTableCellView.h"
#import "library/VLCLibraryTableCellViewProtocol.h"
#import "library/VLCLibraryTableViewDataSource.h"
-#import "library/VLCLibraryDataTypes.h"
-#import "library/VLCLibraryRepresentedItem.h"
+
+#include "main/VLCMain.h"
+
+#import "playqueue/VLCPlayQueueController.h"
@implementation VLCLibraryTableViewDelegate
@@ -66,4 +75,58 @@
return cellView;
}
+- (NSArray<NSTableViewRowAction *> *)tableView:(NSTableView *)tableView
+ rowActionsForRow:(NSInteger)row
+ edge:(NSTableRowActionEdge)edge
+{
+ if (![tableView.dataSource conformsToProtocol:@protocol(VLCLibraryTableViewDataSource)]) {
+ return @[];
+ }
+
+ NSObject<VLCLibraryTableViewDataSource> * const vlcDataSource =
+ (NSObject<VLCLibraryTableViewDataSource>*)tableView.dataSource;
+ NSAssert(vlcDataSource != nil, @"Should be a valid data source");
+
+ NSObject<VLCMediaLibraryItemProtocol> * const libraryItem =
+ [vlcDataSource libraryItemAtRow:row forTableView:tableView];
+
+ if (edge == NSTableRowActionEdgeLeading) {
+ NSTableViewRowAction * const appendToPlayQueueAction =
+ [NSTableViewRowAction rowActionWithStyle:NSTableViewRowActionStyleRegular
+ title:_NS("Append to Play Queue")
+ handler:^(NSTableViewRowAction *action, NSInteger r) {
+ VLCLibraryController * const libraryController = VLCMain.sharedInstance.libraryController;
+ for (VLCMediaLibraryMediaItem *mediaItem in libraryItem.mediaItems) {
+ [libraryController appendItemToPlayQueue:mediaItem playImmediately:NO];
+ }
+ }];
+ appendToPlayQueueAction.backgroundColor = NSColor.VLCAccentColor;
+ return @[appendToPlayQueueAction];
+ } else if (edge == NSTableRowActionEdgeTrailing) {
+ __block BOOL anyUnfavorited = NO;
+ for (VLCMediaLibraryMediaItem * const item in libraryItem.mediaItems) {
+ if (!item.favorited) {
+ anyUnfavorited = YES;
+ break;
+ }
+ }
+ NSString * const displayString =
+ anyUnfavorited ? _NS("Add to Favorites") : _NS("Remove from Favorites");
+
+ NSTableViewRowAction * const favoriteAction =
+ [NSTableViewRowAction rowActionWithStyle:NSTableViewRowActionStyleRegular
+ title:displayString
+ handler:^(NSTableViewRowAction *action, NSInteger r) {
+ [libraryItem iterateMediaItemsWithBlock:^(VLCMediaLibraryMediaItem *const mediaItem) {
+ const BOOL setFavorited = !mediaItem.favorited;
+ [mediaItem setFavorite:setFavorited];
+ }];
+ }];
+ favoriteAction.backgroundColor =
+ anyUnfavorited ? NSColor.systemRedColor : NSColor.systemBlueColor;
+ return @[favoriteAction];
+ }
+ return @[];
+}
+
@end
View it on GitLab: https://code.videolan.org/videolan/vlc/-/compare/fe2328a408cec775a9fc2bc7fcbfd1f1d50c083f...87247e6cf3a275680ebf50304969c3b72f0826a5
--
View it on GitLab: https://code.videolan.org/videolan/vlc/-/compare/fe2328a408cec775a9fc2bc7fcbfd1f1d50c083f...87247e6cf3a275680ebf50304969c3b72f0826a5
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