From 67ea7e407429c7301e05adbac323cbd4b9da7432 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Felix=20Paul=20K=C3=BChne?= <felix@feepk.net> Date: Sun, 30 Jun 2019 14:20:55 +0200 Subject: [PATCH] macosx/media source: show artwork if provided --- modules/gui/macosx/library/VLCInputItem.h | 1 + modules/gui/macosx/library/VLCInputItem.m | 13 +++++++++++++ .../media-source/VLCMediaSourceBaseDataSource.m | 8 ++++++++ .../media-source/VLCMediaSourceCollectionViewItem.m | 8 ++++---- .../macosx/media-source/VLCMediaSourceDataSource.m | 10 ++++++++++ 5 files changed, 36 insertions(+), 4 deletions(-) diff --git a/modules/gui/macosx/library/VLCInputItem.h b/modules/gui/macosx/library/VLCInputItem.h index a9e9690a9db7..5b5f1d221c8e 100644 --- a/modules/gui/macosx/library/VLCInputItem.h +++ b/modules/gui/macosx/library/VLCInputItem.h @@ -42,6 +42,7 @@ extern NSString *VLCInputItemSubtreeAdded; @property (readonly) vlc_tick_t duration; @property (readonly) enum input_item_type_e inputType; @property (readonly) struct input_item_node_t *subTree; +@property (readonly) NSURL *artworkURL; - (void)parseInputItem; - (void)cancelParsing; diff --git a/modules/gui/macosx/library/VLCInputItem.m b/modules/gui/macosx/library/VLCInputItem.m index 394114cef468..16e512cf708a 100644 --- a/modules/gui/macosx/library/VLCInputItem.m +++ b/modules/gui/macosx/library/VLCInputItem.m @@ -115,6 +115,19 @@ static const struct input_item_parser_cbs_t parserCallbacks = return ITEM_TYPE_UNKNOWN; } +- (NSURL *)artworkURL +{ + if (_vlcInputItem) { + char *p_artworkURL = input_item_GetArtworkURL(_vlcInputItem); + if (p_artworkURL) { + NSString *artworkURLString = toNSStr(p_artworkURL); + FREENULL(p_artworkURL); + return [NSURL URLWithString:artworkURLString]; + } + } + return nil; +} + - (void)parseInputItem { _p_parserID = input_item_Parse(_vlcInputItem, diff --git a/modules/gui/macosx/media-source/VLCMediaSourceBaseDataSource.m b/modules/gui/macosx/media-source/VLCMediaSourceBaseDataSource.m index 3f5ecdc433ec..885d26626872 100644 --- a/modules/gui/macosx/media-source/VLCMediaSourceBaseDataSource.m +++ b/modules/gui/macosx/media-source/VLCMediaSourceBaseDataSource.m @@ -119,6 +119,14 @@ VLCInputItem *childRootInput = childNode.inputItem; viewItem.titleTextField.stringValue = childRootInput.name; + NSURL *artworkURL = childRootInput.artworkURL; + NSImage *placeholder = [NSImage imageNamed:@"NSApplicationIcon"]; + if (artworkURL) { + [viewItem.mediaImageView setImageURL:artworkURL placeholderImage:placeholder]; + } else { + viewItem.mediaImageView.image = placeholder; + } + return viewItem; } diff --git a/modules/gui/macosx/media-source/VLCMediaSourceCollectionViewItem.m b/modules/gui/macosx/media-source/VLCMediaSourceCollectionViewItem.m index 29b7b9b71ad1..708fffb55ee3 100644 --- a/modules/gui/macosx/media-source/VLCMediaSourceCollectionViewItem.m +++ b/modules/gui/macosx/media-source/VLCMediaSourceCollectionViewItem.m @@ -31,10 +31,10 @@ NSString *VLCMediaSourceCellIdentifier = @"VLCMediaSourceCellIdentifier"; @implementation VLCMediaSourceCollectionViewItem -- (void)viewDidLoad { - [super viewDidLoad]; - - [self.mediaImageView setImage:[NSImage imageNamed:@"NSApplicationIcon"]]; +- (void)prepareForReuse +{ + [super prepareForReuse]; + self.mediaImageView.image = nil; } @end diff --git a/modules/gui/macosx/media-source/VLCMediaSourceDataSource.m b/modules/gui/macosx/media-source/VLCMediaSourceDataSource.m index 329f7977fe60..475efd47df18 100644 --- a/modules/gui/macosx/media-source/VLCMediaSourceDataSource.m +++ b/modules/gui/macosx/media-source/VLCMediaSourceDataSource.m @@ -27,6 +27,8 @@ #import "media-source/VLCMediaSource.h" #import "main/VLCMain.h" #import "playlist/VLCPlaylistController.h" +#import "views/VLCImageView.h" +#import "extensions/NSString+Helpers.h" @interface VLCMediaSourceDataSource() { @@ -71,6 +73,14 @@ VLCInputItem *childRootInput = childNode.inputItem; viewItem.titleTextField.stringValue = childRootInput.name; + NSURL *artworkURL = childRootInput.artworkURL; + NSImage *placeholder = [NSImage imageNamed:@"NSApplicationIcon"]; + if (artworkURL) { + [viewItem.mediaImageView setImageURL:artworkURL placeholderImage:placeholder]; + } else { + viewItem.mediaImageView.image = placeholder; + } + return viewItem; } -- GitLab