[vlc-commits] [Git][videolan/vlc][master] 6 commits: macosx: Extract view setup parts in VLCLibraryAudioDataSource into separate methods

Jean-Baptiste Kempf (@jbk) gitlab at videolan.org
Tue Dec 13 11:49:57 UTC 2022



Jean-Baptiste Kempf pushed to branch master at VideoLAN / VLC


Commits:
a9084b53 by Claudio Cambra at 2022-12-13T11:37:31+00:00
macosx: Extract view setup parts in VLCLibraryAudioDataSource into separate methods

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

- - - - -
0bd9b55c by Claudio Cambra at 2022-12-13T11:37:31+00:00
macosx: Define songs table column identifiers as static global NSStrings

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

- - - - -
cd272a2a by Claudio Cambra at 2022-12-13T11:37:31+00:00
macosx: Add NSSortDescriptors to songs table view

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

- - - - -
02e4203a by Claudio Cambra at 2022-12-13T11:37:31+00:00
macosx: Make song table view headers functional, change sort

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

- - - - -
855ea3ea by Claudio Cambra at 2022-12-13T11:37:31+00:00
macosx: Correctly set initial sort on song table view init

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

- - - - -
02343458 by Claudio Cambra at 2022-12-13T11:37:31+00:00
macosx: Ensure song table view headers are updated on library sort change

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

- - - - -


1 changed file:

- modules/gui/macosx/library/audio-library/VLCLibraryAudioDataSource.m


Changes:

=====================================
modules/gui/macosx/library/audio-library/VLCLibraryAudioDataSource.m
=====================================
@@ -44,6 +44,23 @@
 #import "views/VLCImageView.h"
 #import "views/VLCSubScrollView.h"
 
+static NSString *VLCLibrarySongsTableViewSongPlayingColumnIdentifier = @"VLCLibrarySongsTableViewSongPlayingColumnIdentifier";
+static NSString *VLCLibrarySongsTableViewTitleColumnIdentifier = @"VLCLibrarySongsTableViewTitleColumnIdentifier";
+static NSString *VLCLibrarySongsTableViewDurationColumnIdentifier = @"VLCLibrarySongsTableViewDurationColumnIdentifier";
+static NSString *VLCLibrarySongsTableViewArtistColumnIdentifier = @"VLCLibrarySongsTableViewArtistColumnIdentifier";
+static NSString *VLCLibrarySongsTableViewAlbumColumnIdentifier = @"VLCLibrarySongsTableViewAlbumColumnIdentifier";
+static NSString *VLCLibrarySongsTableViewGenreColumnIdentifier = @"VLCLibrarySongsTableViewGenreColumnIdentifier";
+static NSString *VLCLibrarySongsTableViewPlayCountColumnIdentifier = @"VLCLibrarySongsTableViewPlayCountColumnIdentifier";
+static NSString *VLCLibrarySongsTableViewYearColumnIdentifier = @"VLCLibrarySongsTableViewYearColumnIdentifier";
+
+static NSString *VLCLibraryTitleSortDescriptorKey = @"VLCLibraryTitleSortDescriptorKey";
+static NSString *VLCLibraryDurationSortDescriptorKey = @"VLCLibraryDurationSortDescriptorKey";
+static NSString *VLCLibraryArtistSortDescriptorKey = @"VLCLibraryArtistSortDescriptorKey";
+static NSString *VLCLibraryAlbumSortDescriptorKey = @"VLCLibraryAlbumSortDescriptorKey";
+static NSString *VLCLibraryPlayCountSortDescriptorKey = @"VLCLibraryPlayCountSortDescriptorKey";
+static NSString *VLCLibraryYearSortDescriptorKey = @"VLCLibraryYearSortDescriptorKey";
+// TODO: Add sorting by genre
+
 @interface VLCLibraryAudioDataSource ()
 {
     VLCLibraryCollectionViewFlowLayout *_collectionViewFlowLayout;
@@ -226,6 +243,14 @@
 }
 
 - (void)setup
+{
+    [self setupCollectionView];
+    [self setupTableViews];
+
+    _audioLibrarySegment = -1; // Force setAudioLibrarySegment to do something always on first try
+}
+
+- (void)setupCollectionView
 {
     _collectionView.dataSource = self;
     _collectionView.delegate = self;
@@ -234,12 +259,12 @@
 
     NSNib *albumSupplementaryDetailView = [[NSNib alloc] initWithNibNamed:@"VLCLibraryCollectionViewAlbumSupplementaryDetailView" bundle:nil];
     [_collectionView registerNib:albumSupplementaryDetailView
-      forSupplementaryViewOfKind:VLCLibraryCollectionViewAlbumSupplementaryDetailViewKind 
+      forSupplementaryViewOfKind:VLCLibraryCollectionViewAlbumSupplementaryDetailViewKind
                   withIdentifier:VLCLibraryCollectionViewAlbumSupplementaryDetailViewIdentifier];
 
     NSNib *audioGroupSupplementaryDetailView = [[NSNib alloc] initWithNibNamed:@"VLCLibraryCollectionViewAudioGroupSupplementaryDetailView" bundle:nil];
     [_collectionView registerNib:audioGroupSupplementaryDetailView
-      forSupplementaryViewOfKind:VLCLibraryCollectionViewAudioGroupSupplementaryDetailViewKind 
+      forSupplementaryViewOfKind:VLCLibraryCollectionViewAudioGroupSupplementaryDetailViewKind
                   withIdentifier:VLCLibraryCollectionViewAudioGroupSupplementaryDetailViewIdentifier];
 
     NSNib *mediaItemSupplementaryDetailView = [[NSNib alloc] initWithNibNamed:@"VLCLibraryCollectionViewMediaItemSupplementaryDetailView" bundle:nil];
@@ -249,15 +274,99 @@
 
     _collectionViewFlowLayout = [[VLCLibraryCollectionViewFlowLayout alloc] init];
     _collectionView.collectionViewLayout = _collectionViewFlowLayout;
+}
 
+- (void)setupTableViews
+{
     _groupSelectionTableView.target = self;
     _groupSelectionTableView.doubleAction = @selector(groubSelectionDoubleClickAction:);
+
     _collectionSelectionTableView.target = self;
     _collectionSelectionTableView.doubleAction = @selector(collectionSelectionDoubleClickAction:);
+
+    [self setupSongsTableView];
+}
+
+- (void)setupSongsTableView
+{
     _songsTableView.target = self;
     _songsTableView.doubleAction = @selector(songDoubleClickAction:);
 
-    _audioLibrarySegment = -1; // Force setAudioLibrarySegment to do something always on first try
+    [self setupPrototypeSortDescriptorsForTableView:_songsTableView];
+    [self setupExistingSortForTableView:_songsTableView];
+}
+
+- (void)setupPrototypeSortDescriptorsForTableView:(NSTableView *)tableView
+{
+    for(NSTableColumn *column in tableView.tableColumns) {
+        NSSortDescriptor * const columnSortDescriptor = [self sortDescriptorPrototypeForSongsTableViewColumnIdentifier:column.identifier];
+
+        if(columnSortDescriptor) {
+            column.sortDescriptorPrototype = columnSortDescriptor;
+        }
+    }
+}
+
+- (NSSortDescriptor *)sortDescriptorPrototypeForSongsTableViewColumnIdentifier:(NSString *)columnIdentifier
+{
+    if ([columnIdentifier isEqualToString:VLCLibrarySongsTableViewTitleColumnIdentifier]) {
+        return [[NSSortDescriptor alloc] initWithKey:VLCLibraryTitleSortDescriptorKey ascending:true];
+
+    } else if ([columnIdentifier isEqualToString:VLCLibrarySongsTableViewDurationColumnIdentifier]) {
+        return [[NSSortDescriptor alloc] initWithKey:VLCLibraryDurationSortDescriptorKey ascending:true];
+
+    } else if ([columnIdentifier isEqualToString:VLCLibrarySongsTableViewArtistColumnIdentifier]) {
+        return [[NSSortDescriptor alloc] initWithKey:VLCLibraryArtistSortDescriptorKey ascending:true];
+
+    } else if ([columnIdentifier isEqualToString:VLCLibrarySongsTableViewAlbumColumnIdentifier]) {
+        return [[NSSortDescriptor alloc] initWithKey:VLCLibraryAlbumSortDescriptorKey ascending:true];
+
+    } else if ([columnIdentifier isEqualToString:VLCLibrarySongsTableViewPlayCountColumnIdentifier]) {
+        return [[NSSortDescriptor alloc] initWithKey:VLCLibraryPlayCountSortDescriptorKey ascending:true];
+
+    } else if ([columnIdentifier isEqualToString:VLCLibrarySongsTableViewYearColumnIdentifier]) {
+        return [[NSSortDescriptor alloc] initWithKey:VLCLibraryYearSortDescriptorKey ascending:true];
+
+    }
+
+    return nil;
+}
+
+- (void)setupExistingSortForTableView:(NSTableView *)tableView
+{
+    const VLCLibraryController * const libraryController = VLCMain.sharedInstance.libraryController;
+    const vlc_ml_sorting_criteria_t existingSortCriteria = libraryController.lastSortingCriteria;
+
+    NSString *sortDescriptorKey = [self sortDescriptorKeyFromVlcMlSortingCriteria:existingSortCriteria];
+    const NSSortDescriptor * const sortDescriptor = [[NSSortDescriptor alloc] initWithKey:sortDescriptorKey
+                                                                                ascending:!libraryController.descendingLibrarySorting];
+
+    tableView.sortDescriptors = @[sortDescriptor];
+}
+
+- (NSString *)sortDescriptorKeyFromVlcMlSortingCriteria:(vlc_ml_sorting_criteria_t)existingSortCriteria
+{
+    if (existingSortCriteria == VLC_ML_SORTING_DEFAULT) {
+        return VLCLibraryTitleSortDescriptorKey;
+
+    } else if (existingSortCriteria == VLC_ML_SORTING_DURATION) {
+        return VLCLibraryDurationSortDescriptorKey;
+
+    } else if (existingSortCriteria == VLC_ML_SORTING_ARTIST) {
+        return VLCLibraryArtistSortDescriptorKey;
+
+    } else if (existingSortCriteria == VLC_ML_SORTING_ALBUM) {
+        return VLCLibraryAlbumSortDescriptorKey;
+
+    } else if (existingSortCriteria == VLC_ML_SORTING_PLAYCOUNT) {
+        return VLCLibraryPlayCountSortDescriptorKey;
+
+    } else if (existingSortCriteria == VLC_ML_SORTING_RELEASEDATE) {
+        return VLCLibraryYearSortDescriptorKey;
+
+    }
+
+    return VLCLibraryTitleSortDescriptorKey;
 }
 
 - (void)reloadData
@@ -274,6 +383,7 @@
     [self.collectionSelectionTableView reloadData];
     [self.groupSelectionTableView reloadData];
     [self.songsTableView reloadData];
+    [self setupExistingSortForTableView:_songsTableView];
 }
 
 - (void)setAudioLibrarySegment:(VLCAudioLibrarySegment)audioLibrarySegment
@@ -332,30 +442,30 @@
         NSString *cellText = @"";
         NSString *cellIdentifier = @"";
 
-        if ([columnIdentifier isEqualToString:@"VLCLibrarySongsTableViewSongPlayingColumnIdentifier"]) {
+        if ([columnIdentifier isEqualToString:VLCLibrarySongsTableViewSongPlayingColumnIdentifier]) {
             VLCLibrarySongsTableViewSongPlayingTableCellView *cellView = (VLCLibrarySongsTableViewSongPlayingTableCellView*)[tableView makeViewWithIdentifier:@"VLCLibrarySongsTableViewSongPlayingTableCellViewIdentifier" owner:self];
             NSAssert(cellView, @"Unexpectedly received null cellview");
             cellView.representedMediaItem = [self libraryItemAtRow:row];
             return cellView;
-        } else if ([columnIdentifier isEqualToString:@"VLCLibrarySongsTableViewTitleColumnIdentifier"]) {
+        } else if ([columnIdentifier isEqualToString:VLCLibrarySongsTableViewTitleColumnIdentifier]) {
             cellIdentifier = @"VLCLibrarySongsTableViewTitleTableCellViewIdentifier";
             cellText = mediaItem.title;
-        } else if ([columnIdentifier isEqualToString:@"VLCLibrarySongsTableViewDurationColumnIdentifier"]) {
+        } else if ([columnIdentifier isEqualToString:VLCLibrarySongsTableViewDurationColumnIdentifier]) {
             cellIdentifier = @"VLCLibrarySongsTableViewDurationTableCellViewIdentifier";
             cellText = mediaItem.durationString;
-        } else if ([columnIdentifier isEqualToString:@"VLCLibrarySongsTableViewArtistColumnIdentifier"]) {
+        } else if ([columnIdentifier isEqualToString:VLCLibrarySongsTableViewArtistColumnIdentifier]) {
             cellIdentifier = @"VLCLibrarySongsTableViewArtistTableCellViewIdentifier";
             cellText = album.artistName.length == 0 ? @"" : album.artistName;
-        } else if ([columnIdentifier isEqualToString:@"VLCLibrarySongsTableViewAlbumColumnIdentifier"]) {
+        } else if ([columnIdentifier isEqualToString:VLCLibrarySongsTableViewAlbumColumnIdentifier]) {
             cellIdentifier = @"VLCLibrarySongsTableViewAlbumTableCellViewIdentifier";
             cellText = album.title.length == 0 ? @"" : album.title;
-        } else if ([columnIdentifier isEqualToString:@"VLCLibrarySongsTableViewGenreColumnIdentifier"]) {
+        } else if ([columnIdentifier isEqualToString:VLCLibrarySongsTableViewGenreColumnIdentifier]) {
             cellIdentifier = @"VLCLibrarySongsTableViewGenreTableCellViewIdentifier";
             cellText = genre.name.length == 0 ? @"" : genre.name;
-        } else if ([columnIdentifier isEqualToString:@"VLCLibrarySongsTableViewPlayCountColumnIdentifier"]) {
+        } else if ([columnIdentifier isEqualToString:VLCLibrarySongsTableViewPlayCountColumnIdentifier]) {
             cellIdentifier = @"VLCLibrarySongsTableViewPlayCountTableCellViewIdentifier";
             cellText = [@(mediaItem.playCount) stringValue];
-        } else if ([columnIdentifier isEqualToString:@"VLCLibrarySongsTableViewYearColumnIdentifier"]) {
+        } else if ([columnIdentifier isEqualToString:VLCLibrarySongsTableViewYearColumnIdentifier]) {
             cellIdentifier = @"VLCLibrarySongsTableViewYearTableCellViewIdentifier";
             cellText = [@(mediaItem.year) stringValue];
         } else {
@@ -402,6 +512,40 @@
     [self.groupSelectionTableView reloadData];
 }
 
+- (void)tableView:(NSTableView *)tableView sortDescriptorsDidChange:(NSArray<NSSortDescriptor *> *)oldDescriptors
+{
+    const NSSortDescriptor * const sortDescriptor = tableView.sortDescriptors.firstObject;
+    const vlc_ml_sorting_criteria_t sortCriteria = [self sortDescriptorKeyToVlcMlSortingCriteria:sortDescriptor.key];
+
+    [VLCMain.sharedInstance.libraryController sortByCriteria:sortCriteria andDescending:!sortDescriptor.ascending];
+    [self reloadData];
+}
+
+- (vlc_ml_sorting_criteria_t)sortDescriptorKeyToVlcMlSortingCriteria:(NSString *)sortDescriptorKey
+{
+    if ([sortDescriptorKey isEqualToString:VLCLibraryTitleSortDescriptorKey]) {
+        return VLC_ML_SORTING_DEFAULT;
+
+    } else if ([sortDescriptorKey isEqualToString:VLCLibraryDurationSortDescriptorKey]) {
+        return VLC_ML_SORTING_DURATION;
+
+    } else if ([sortDescriptorKey isEqualToString:VLCLibraryArtistSortDescriptorKey]) {
+        return VLC_ML_SORTING_ARTIST;
+
+    } else if ([sortDescriptorKey isEqualToString:VLCLibraryAlbumSortDescriptorKey]) {
+        return VLC_ML_SORTING_ALBUM;
+
+    } else if ([sortDescriptorKey isEqualToString:VLCLibraryPlayCountSortDescriptorKey]) {
+        return VLC_ML_SORTING_PLAYCOUNT;
+
+    } else if ([sortDescriptorKey isEqualToString:VLCLibraryYearSortDescriptorKey]) {
+        return VLC_ML_SORTING_RELEASEDATE;
+
+    }
+
+    return VLC_ML_SORTING_DEFAULT;
+}
+
 #pragma mark - table view double click actions
 
 - (void)groubSelectionDoubleClickAction:(id)sender



View it on GitLab: https://code.videolan.org/videolan/vlc/-/compare/2d9100ed9c1780d5b1eada4d64712265f36a5139...02343458eadb9eccb4ba8befd4e470930d9913f3

-- 
View it on GitLab: https://code.videolan.org/videolan/vlc/-/compare/2d9100ed9c1780d5b1eada4d64712265f36a5139...02343458eadb9eccb4ba8befd4e470930d9913f3
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