Hugo Beauzée-Luyssen pushed to branch master at VideoLAN / VLC
Commits:
21819cb0 by Claudio Cambra at 2022-08-02T17:24:24+00:00
macosx: Reload audio data source more cleanly, only when needed
Signed-off-by: Claudio Cambra <[email protected]>
- - - - -
2 changed files:
- modules/gui/macosx/library/VLCLibraryAudioDataSource.h
- modules/gui/macosx/library/VLCLibraryAudioDataSource.m
Changes:
=====================================
modules/gui/macosx/library/VLCLibraryAudioDataSource.h
=====================================
@@ -44,6 +44,7 @@ NS_ASSUME_NONNULL_BEGIN
- (void)setupAppearance;
- (void)reloadAppearance;
- (void)reloadEmptyViewAppearance;
+- (void)reloadData;
@end
=====================================
modules/gui/macosx/library/VLCLibraryAudioDataSource.m
=====================================
@@ -54,9 +54,67 @@
- (instancetype)init
{
self = [super init];
+ if(self) {
+ NSNotificationCenter *notificationCenter = [NSNotificationCenter
defaultCenter];
+ [notificationCenter addObserver:self
+ selector:@selector(libraryModelUpdated:)
+ name:VLCLibraryModelAudioMediaListUpdated
+ object:nil];
+ [notificationCenter addObserver:self
+ selector:@selector(libraryModelUpdated:)
+ name:VLCLibraryModelArtistListUpdated
+ object:nil];
+ [notificationCenter addObserver:self
+ selector:@selector(libraryModelUpdated:)
+ name:VLCLibraryModelAlbumListUpdated
+ object:nil];
+ [notificationCenter addObserver:self
+ selector:@selector(libraryModelUpdated:)
+ name:VLCLibraryModelGenreListUpdated
+ object:nil];
+ }
+
return self;
}
+- (void)libraryModelUpdated:(NSNotification *)aNotification
+{
+ if(self.libraryModel == nil) {
+ return;
+ }
+
+ NSArray *collectionToDisplay;
+
+ switch(_currentParentType) {
+ case VLC_ML_PARENT_UNKNOWN:
+ collectionToDisplay = [self.libraryModel listOfAudioMedia];
+ break;
+ case VLC_ML_PARENT_ALBUM:
+ collectionToDisplay = [self.libraryModel listOfAlbums];
+ break;
+ case VLC_ML_PARENT_ARTIST:
+ collectionToDisplay = [self.libraryModel listOfArtists];
+ break;
+ case VLC_ML_PARENT_GENRE:
+ collectionToDisplay = [self.libraryModel listOfGenres];
+ break;
+ default:
+ return;
+ }
+
+ dispatch_async(dispatch_get_main_queue(), ^{
+ NSSet* originalCollectionSet = [[NSSet alloc]
initWithArray:_displayedCollection];
+ NSSet* newCollectionSet = [[NSSet alloc]
initWithArray:collectionToDisplay];
+
+ if([originalCollectionSet isEqual:newCollectionSet]) {
+ return;
+ }
+
+ _displayedCollection = collectionToDisplay;
+ [self reloadData];
+ });
+}
+
- (void)setupAppearance
{
NSArray *availableCollections = [VLCLibraryModel
availableAudioCollections];
@@ -84,7 +142,7 @@
_collectionSelectionTableView.target = self;
_collectionSelectionTableView.doubleAction =
@selector(collectionSelectionDoubleClickAction:);
- _currentSelectedSegment = _segmentedControl.indexOfSelectedItem;
+ _currentSelectedSegment = -1; // Force segmentedControlAction to do what
it must
_placeholderImageNames = @[@"placeholder-group2", @"placeholder-music",
@"placeholder-music", @"placeholder-music"];
_placeholderLabelStrings = @[
_NS("Your favorite artists will appear here.\nGo to the Browse section
to add artists you love."),
@@ -101,23 +159,36 @@
{
[self.segmentedControl setTarget:self];
[self.segmentedControl setAction:@selector(segmentedControlAction:)];
- [self segmentedControlAction:nil];
+ [self segmentedControlAction:self];
+}
- [self.collectionSelectionTableView reloadData];
- [self.groupSelectionTableView reloadData];
+- (void)reloadEmptyViewAppearance
+{
+ if(_currentSelectedSegment < _placeholderImageNames.count &&
_currentSelectedSegment >= 0) {
+ _placeholderImageView.image = [NSImage
imageNamed:_placeholderImageNames[_currentSelectedSegment]];
+ }
- [self.collectionView reloadData];
+ if(_currentSelectedSegment < _placeholderLabelStrings.count &&
_currentSelectedSegment >= 0) {
+ _placeholderLabel.stringValue =
_placeholderLabelStrings[_currentSelectedSegment];
+ }
}
-- (void)reloadEmptyViewAppearance
+- (void)reloadData
{
- _placeholderImageView.image = [NSImage
imageNamed:_placeholderImageNames[_currentSelectedSegment]];
- _placeholderLabel.stringValue =
_placeholderLabelStrings[_currentSelectedSegment];
+ [_collectionViewFlowLayout resetLayout];
+ [self.collectionView reloadData];
+ [self.collectionSelectionTableView reloadData];
+ [self.groupSelectionTableView reloadData];
}
- (IBAction)segmentedControlAction:(id)sender
{
- enum vlc_ml_parent_type oldParentType = _currentParentType;
+ if (_libraryModel.listOfAudioMedia.count == 0) {
+ [self reloadEmptyViewAppearance];
+ return;
+ } else if (_segmentedControl.selectedSegment == _currentSelectedSegment) {
+ return;
+ }
_currentSelectedSegment = _segmentedControl.selectedSegment;
switch (_currentSelectedSegment) {
@@ -142,21 +213,8 @@
NSAssert(1, @"reached the unreachable");
break;
}
-
- if (_libraryModel.listOfAudioMedia.count == 0) {
- [self reloadEmptyViewAppearance];
- return;
- }
- if(oldParentType == _currentParentType) {
- return;
- }
-
- [_collectionViewFlowLayout resetLayout];
-
- [self.collectionView reloadData];
- [self.collectionSelectionTableView reloadData];
- [self.groupSelectionTableView reloadData];
+ [self reloadData];
if(sender != [[[VLCMain sharedInstance] libraryWindow] navigationStack]) {
[[[[VLCMain sharedInstance] libraryWindow] navigationStack]
appendCurrentLibraryState];
View it on GitLab:
https://code.videolan.org/videolan/vlc/-/commit/21819cb0cde13f8212471d76244930325d13b86a
--
View it on GitLab:
https://code.videolan.org/videolan/vlc/-/commit/21819cb0cde13f8212471d76244930325d13b86a
You're receiving this email because of your account on code.videolan.org.
VideoLAN code repository instance_______________________________________________
vlc-commits mailing list
[email protected]
https://mailman.videolan.org/listinfo/vlc-commits