[vlc-commits] [Git][videolan/vlc][master] 19 commits: macosx: Use actual filetype icons in browse collection view items

Jean-Baptiste Kempf (@jbk) gitlab at videolan.org
Mon Jan 9 21:03:09 UTC 2023



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


Commits:
aad3a0a2 by Claudio Cambra at 2023-01-09T20:51:20+00:00
macosx: Use actual filetype icons in browse collection view items

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

- - - - -
70fd9c8b by Claudio Cambra at 2023-01-09T20:51:20+00:00
macosx: Use QuickLook to create thumbnails for collection view items in Browse

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

- - - - -
411afa9c by Claudio Cambra at 2023-01-09T20:51:20+00:00
macosx: Add NSImage+VLCAdditions extension

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

- - - - -
9297c861 by Claudio Cambra at 2023-01-09T20:51:20+00:00
macosx: Add QuickLook preview image helper methods to NSImage extension

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

- - - - -
598b8691 by Claudio Cambra at 2023-01-09T20:51:20+00:00
macosx: Use NSImage extension QuickLook preview method to acquire file thumbnail in VLCMediaSourceCollectionViewItem

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

- - - - -
d5486fc9 by Claudio Cambra at 2023-01-09T20:51:20+00:00
macosx: Rename dynamic library collection view item values in VLCLibraryUIUnits to be more accurate in their purpose

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

- - - - -
aa6f7ef9 by Claudio Cambra at 2023-01-09T20:51:20+00:00
macosx: Fix blurriness in QuickLook previews used in VLCMediaSourceCollectionViewItem

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

- - - - -
b8a2bafd by Claudio Cambra at 2023-01-09T20:51:20+00:00
macosx: Fix blurry icons in browse collection view

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

- - - - -
a84bd4ce by Claudio Cambra at 2023-01-09T20:51:20+00:00
macosx: Use NSImage extension QuickLook preview method to acquire file thumbnail for VLCInputItems in VLCLibraryTableCellView

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

- - - - -
cb877531 by Claudio Cambra at 2023-01-09T20:51:20+00:00
macosx: Add thmbnailWithSize method to VLCInputItem

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

- - - - -
ec2a4380 by Claudio Cambra at 2023-01-09T20:51:20+00:00
macosx: Use VLCInputItem's thumbnailWithSize method for placeholder image when representing VLCInputItems in VLCLibraryTableCellView

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

- - - - -
ae6f92c2 by Claudio Cambra at 2023-01-09T20:51:20+00:00
macosx: Use VLCInputItem's thumbnailWithSize method for placeholder image in VLCMediaSourceCollectionViewItem

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

- - - - -
4dea9612 by Claudio Cambra at 2023-01-09T20:51:20+00:00
macosx: Add thumbnailForInputItem method to VLCLibraryImageCache

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

- - - - -
a8076eda by Claudio Cambra at 2023-01-09T20:51:20+00:00
macosx: Use VLCLibraryImageCache to get VLCMediaSourceCollectionViewItem image

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

- - - - -
ee3ea76f by Claudio Cambra at 2023-01-09T20:51:20+00:00
macosx: Use VLCLibraryImageCache to get VLCLibraryTableCellView image for inputItem

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

- - - - -
7fce0792 by Claudio Cambra at 2023-01-09T20:51:20+00:00
macosx: Make QLThumbnailImageCreate dictionary a literal

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

- - - - -
51074032 by Claudio Cambra at 2023-01-09T20:51:20+00:00
macosx: Make sure qlThumbnailRef is released even if we cannot generate the QuickLook thumbnail

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

- - - - -
646f437a by Claudio Cambra at 2023-01-09T20:51:20+00:00
macosx: Generate thumbnail for VLCInputItem in concurrent thread in VLCLibraryTableCellView

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

- - - - -
ef6f465b by Claudio Cambra at 2023-01-09T20:51:20+00:00
macosx: Generate thumbnail in concurrent thread in VLCMediaSourceCollectionViewItem

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

- - - - -


13 changed files:

- extras/package/macosx/VLC.xcodeproj/project.pbxproj
- modules/gui/macosx/Makefile.am
- + modules/gui/macosx/extensions/NSImage+VLCAdditions.h
- + modules/gui/macosx/extensions/NSImage+VLCAdditions.m
- modules/gui/macosx/library/VLCInputItem.h
- modules/gui/macosx/library/VLCInputItem.m
- modules/gui/macosx/library/VLCLibraryCollectionViewDelegate.m
- modules/gui/macosx/library/VLCLibraryImageCache.h
- modules/gui/macosx/library/VLCLibraryImageCache.m
- modules/gui/macosx/library/VLCLibraryTableCellView.m
- modules/gui/macosx/library/VLCLibraryUIUnits.h
- modules/gui/macosx/library/VLCLibraryUIUnits.m
- modules/gui/macosx/media-source/VLCMediaSourceCollectionViewItem.m


Changes:

=====================================
extras/package/macosx/VLC.xcodeproj/project.pbxproj
=====================================
@@ -77,6 +77,7 @@
 		1CCC89052078A3D500E5626F /* TextfieldPanel.xib in Sources */ = {isa = PBXBuildFile; fileRef = 6B8224151E4D2A9000833BE1 /* TextfieldPanel.xib */; };
 		1CCC89062078A3D500E5626F /* TimeSelectionPanel.xib in Sources */ = {isa = PBXBuildFile; fileRef = 6B8224161E4D2A9000833BE1 /* TimeSelectionPanel.xib */; };
 		1CFE8D591EA0D42A00E94451 /* VLCErrorWindowController.m in Sources */ = {isa = PBXBuildFile; fileRef = 1CFE8D581EA0D42A00E94451 /* VLCErrorWindowController.m */; };
+		5307A6F52967859F001E0C6A /* NSImage+VLCAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = 5307A6F42967859F001E0C6A /* NSImage+VLCAdditions.m */; };
 		5317FE04294E3DD3001702F0 /* VLCLibraryCollectionViewDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 5317FE03294E3DD3001702F0 /* VLCLibraryCollectionViewDelegate.m */; };
 		5325C57D29302E6800B2B63A /* VLCLibraryAudioViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 5325C57B29302E6800B2B63A /* VLCLibraryAudioViewController.m */; };
 		5362550D293FD639005D64FA /* VLCLibraryWindowController.m in Sources */ = {isa = PBXBuildFile; fileRef = 5362550C293FD639005D64FA /* VLCLibraryWindowController.m */; };
@@ -239,6 +240,8 @@
 		1CFE8D561EA0D3D300E94451 /* ErrorPanel.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = ErrorPanel.xib; sourceTree = "<group>"; };
 		1CFE8D571EA0D42A00E94451 /* VLCErrorWindowController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = VLCErrorWindowController.h; sourceTree = "<group>"; };
 		1CFE8D581EA0D42A00E94451 /* VLCErrorWindowController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = VLCErrorWindowController.m; sourceTree = "<group>"; };
+		5307A6F32967859F001E0C6A /* NSImage+VLCAdditions.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "NSImage+VLCAdditions.h"; sourceTree = "<group>"; };
+		5307A6F42967859F001E0C6A /* NSImage+VLCAdditions.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = "NSImage+VLCAdditions.m"; sourceTree = "<group>"; };
 		5317FE02294E3DD3001702F0 /* VLCLibraryCollectionViewDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = VLCLibraryCollectionViewDelegate.h; sourceTree = "<group>"; };
 		5317FE03294E3DD3001702F0 /* VLCLibraryCollectionViewDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = VLCLibraryCollectionViewDelegate.m; sourceTree = "<group>"; };
 		5317FE05294E8D1A001702F0 /* VLCLibraryCollectionViewDataSource.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = VLCLibraryCollectionViewDataSource.h; sourceTree = "<group>"; };
@@ -1103,6 +1106,8 @@
 				7D404ABE2281892C00B28EF4 /* NSView+VLCAdditions.m */,
 				7DF0994D23E71E5B007CA6EE /* NSMenu+VLCAdditions.h */,
 				7DF0994E23E71E76007CA6EE /* NSMenu+VLCAdditions.m */,
+				5307A6F32967859F001E0C6A /* NSImage+VLCAdditions.h */,
+				5307A6F42967859F001E0C6A /* NSImage+VLCAdditions.m */,
 			);
 			path = extensions;
 			sourceTree = "<group>";
@@ -1870,6 +1875,7 @@
 				7D67318622C8F4060000AD40 /* VLCMediaSourceCollectionViewItem.m in Sources */,
 				536283F0291146BC00640C15 /* VLCLibraryTableView.m in Sources */,
 				536283F1291146BC00640C15 /* VLCLibraryAlbumTracksDataSource.m in Sources */,
+				5307A6F52967859F001E0C6A /* NSImage+VLCAdditions.m in Sources */,
 				1CCC89042078A3D500E5626F /* StreamOutput.xib in Sources */,
 				536283F7291146BC00640C15 /* VLCLibraryNavigationState.m in Sources */,
 				1CCC89052078A3D500E5626F /* TextfieldPanel.xib in Sources */,


=====================================
modules/gui/macosx/Makefile.am
=====================================
@@ -23,6 +23,7 @@ libmacosx_plugin_la_LDFLAGS = $(AM_LDFLAGS) -rpath '$(guidir)' \
 	-Wl,-framework,QuartzCore \
 	-Wl,-framework,ScriptingBridge \
 	-Wl,-framework,WebKit \
+	-Wl,-framework,QuickLook \
 	-Wl,-weak_framework,MediaPlayer
 
 if HAVE_SPARKLE
@@ -40,6 +41,8 @@ libmacosx_plugin_la_SOURCES = \
 	gui/macosx/extensions/NSColor+VLCAdditions.m \
 	gui/macosx/extensions/NSFont+VLCAdditions.h \
 	gui/macosx/extensions/NSFont+VLCAdditions.m \
+	gui/macosx/extensions/NSImage+VLCAdditions.h \
+	gui/macosx/extensions/NSImage+VLCAdditions.m \
 	gui/macosx/extensions/NSMenu+VLCAdditions.h \
 	gui/macosx/extensions/NSMenu+VLCAdditions.m \
 	gui/macosx/extensions/NSScreen+VLCAdditions.h \


=====================================
modules/gui/macosx/extensions/NSImage+VLCAdditions.h
=====================================
@@ -0,0 +1,34 @@
+/*****************************************************************************
+ * NSImage+VLCAdditions.h: MacOS X interface module
+ *****************************************************************************
+ * Copyright (C) 2023 VLC authors and VideoLAN
+ *
+ * Authors: Claudio Cambra <developer at claudiocambra.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
+ *****************************************************************************/
+
+#import <Cocoa/Cocoa.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+ at interface NSImage (VLCAdditions)
+
++ (instancetype)quickLookPreviewForLocalPath:(NSString*)path withSize:(NSSize)size;
++ (instancetype)quickLookPreviewForLocalURL:(NSURL*)url withSize:(NSSize)size;
+
+ at end
+
+NS_ASSUME_NONNULL_END


=====================================
modules/gui/macosx/extensions/NSImage+VLCAdditions.m
=====================================
@@ -0,0 +1,64 @@
+/*****************************************************************************
+ * NSImage+VLCAdditions.m: MacOS X interface module
+ *****************************************************************************
+ * Copyright (C) 2023 VLC authors and VideoLAN
+ *
+ * Authors: Claudio Cambra <developer at claudiocambra.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
+ *****************************************************************************/
+
+#import "NSImage+VLCAdditions.h"
+
+#import <QuickLook/QuickLook.h>
+
+ at implementation NSImage(VLCAdditions)
+
++ (instancetype)quickLookPreviewForLocalPath:(NSString *)path withSize:(NSSize)size
+{
+    NSURL *pathUrl = [NSURL fileURLWithPath:path];
+    return [self quickLookPreviewForLocalURL:pathUrl withSize:size];
+}
+
++ (instancetype)quickLookPreviewForLocalURL:(NSURL *)url withSize:(NSSize)size
+{
+    NSDictionary *dict = @{(NSString*)kQLThumbnailOptionIconModeKey : [NSNumber numberWithBool:NO]};
+    CFDictionaryRef dictRef = CFBridgingRetain(dict);
+    CFURLRef urlRef = CFBridgingRetain(url);
+    CGImageRef qlThumbnailRef = QLThumbnailImageCreate(kCFAllocatorDefault,
+                                                       urlRef,
+                                                       size,
+                                                       dictRef);
+
+    CFRelease(dictRef);
+    CFRelease(urlRef);
+
+    if (qlThumbnailRef == NULL) {
+        return nil;
+    }
+
+    NSBitmapImageRep *bitmapImageRep = [[NSBitmapImageRep alloc] initWithCGImage:qlThumbnailRef];
+    if (bitmapImageRep == nil) {
+        CFRelease(qlThumbnailRef);
+        return nil;
+    }
+
+    NSImage *image = [[NSImage alloc] initWithSize:[bitmapImageRep size]];
+    [image addRepresentation:bitmapImageRep];
+    CFRelease(qlThumbnailRef);
+    return image;
+}
+
+ at end


=====================================
modules/gui/macosx/library/VLCInputItem.h
=====================================
@@ -79,6 +79,8 @@ extern NSString *VLCInputItemPreparsingSucceeded;
 - (int)preparseInputItem;
 - (int)writeMetadataToFile;
 
+- (NSImage*)thumbnailWithSize:(NSSize)size;
+
 @end
 
 @interface VLCInputNode : NSObject


=====================================
modules/gui/macosx/library/VLCInputItem.m
=====================================
@@ -23,6 +23,8 @@
 #import "VLCInputItem.h"
 
 #import "main/VLCMain.h"
+
+#import "extensions/NSImage+VLCAdditions.h"
 #import "extensions/NSString+Helpers.h"
 
 #import <vlc_url.h>
@@ -590,6 +592,34 @@ static const struct input_preparser_callbacks_t preparseCallbacks = {
     return input_item_WriteMeta(VLC_OBJECT(getIntf()), _vlcInputItem);
 }
 
+- (NSImage*)thumbnailWithSize:(NSSize)size
+{
+    NSImage *image;
+    if (!self.isStream && _vlcInputItem != NULL) {
+        char *psz_url = input_item_GetURI(_vlcInputItem);
+        if (psz_url) {
+            char *psz_path = vlc_uri2path(psz_url);
+            NSString *path = toNSStr(psz_path);
+
+            free(psz_url);
+            free(psz_path);
+
+            image = [NSImage quickLookPreviewForLocalPath:path
+                                                 withSize:size];
+
+            if (!image) {
+                image = [[NSWorkspace sharedWorkspace] iconForFile:path];
+                image.size = size;
+            }
+        }
+    }
+
+    if (!image) {
+        image = [NSImage imageNamed: @"noart.png"];
+    }
+    return image;
+}
+
 @end
 
 


=====================================
modules/gui/macosx/library/VLCLibraryCollectionViewDelegate.m
=====================================
@@ -93,13 +93,13 @@
                                            withLayout:collectionViewLayout
                                withNumberOfItemsInRow:numItemsInRow];
 
-    while (itemSize.width > [VLCLibraryUIUnits dynamicCollectionViewItemMaximumSize]) {
+    while (itemSize.width > [VLCLibraryUIUnits dynamicCollectionViewItemMaximumWidth]) {
         ++numItemsInRow;
         itemSize = [self itemSizeForCollectionView:collectionView
                                         withLayout:collectionViewLayout
                             withNumberOfItemsInRow:numItemsInRow];
     }
-    while (itemSize.width < [VLCLibraryUIUnits dynamicCollectionViewItemMinimumSize]) {
+    while (itemSize.width < [VLCLibraryUIUnits dynamicCollectionViewItemMinimumWidth]) {
         --numItemsInRow;
         itemSize = [self itemSizeForCollectionView:collectionView
                                         withLayout:collectionViewLayout


=====================================
modules/gui/macosx/library/VLCLibraryImageCache.h
=====================================
@@ -24,11 +24,13 @@
 
 NS_ASSUME_NONNULL_BEGIN
 
+ at class VLCInputItem;
 @protocol VLCMediaLibraryItemProtocol;
 
 @interface VLCLibraryImageCache : NSObject
 
 + (nullable NSImage *)thumbnailForLibraryItem:(id<VLCMediaLibraryItemProtocol>)libraryItem;
++ (nullable NSImage *)thumbnailForInputItem:(VLCInputItem*)inputItem;
 
 @end
 


=====================================
modules/gui/macosx/library/VLCLibraryImageCache.m
=====================================
@@ -21,12 +21,15 @@
 *****************************************************************************/
 
 #import "VLCLibraryImageCache.h"
+
+#import "library/VLCInputItem.h"
 #import "library/VLCLibraryDataTypes.h"
+
 #import "main/VLCMain.h"
 
 NSUInteger kVLCMaximumLibraryImageCacheSize = 50;
 uint32_t kVLCDesiredThumbnailWidth = 512;
-uint32_t kVLCDesiredThumbnailHeight = 320;
+uint32_t kVLCDesiredThumbnailHeight = 512;
 float kVLCDefaultThumbnailPosition = .15;
 
 @interface VLCLibraryImageCache()
@@ -105,4 +108,39 @@ float kVLCDefaultThumbnailPosition = .15;
                                     kVLCDefaultThumbnailPosition);
 }
 
++ (NSImage *)thumbnailForInputItem:(VLCInputItem *)inputItem
+{
+    return [VLCLibraryImageCache.sharedImageCache imageForInputItem:inputItem];
+}
+
+- (NSImage *)imageForInputItem:(VLCInputItem *)inputItem
+{
+    NSImage *cachedImage = [_imageCache objectForKey:inputItem.MRL];
+    if (cachedImage) {
+        return cachedImage;
+    }
+    return [self generateImageForInputItem:inputItem];
+}
+
+- (NSImage *)generateImageForInputItem:(VLCInputItem *)inputItem
+{
+    NSImage *image;
+    NSURL *artworkURL = inputItem.artworkURL;
+    NSSize imageSize = NSMakeSize(kVLCDesiredThumbnailWidth, kVLCDesiredThumbnailHeight);
+
+    if (artworkURL) {
+        image = [[NSImage alloc] initWithContentsOfURL:artworkURL];
+    }
+
+    if (image == nil) {
+        image = [inputItem thumbnailWithSize:imageSize];
+    }
+
+    if (image) {
+        [_imageCache setObject:image forKey:inputItem.MRL];
+    }
+
+    return image;
+}
+
 @end


=====================================
modules/gui/macosx/library/VLCLibraryTableCellView.m
=====================================
@@ -25,15 +25,21 @@
 #import "extensions/NSFont+VLCAdditions.h"
 #import "extensions/NSString+Helpers.h"
 #import "extensions/NSView+VLCAdditions.h"
-#import "views/VLCImageView.h"
-#import "views/VLCTrackingView.h"
-#import "main/VLCMain.h"
+
+#import "library/VLCInputItem.h"
 #import "library/VLCLibraryController.h"
 #import "library/VLCLibraryDataTypes.h"
-#import "library/VLCInputItem.h"
+#import "library/VLCLibraryImageCache.h"
+
 #import "library/video-library/VLCLibraryVideoGroupDescriptor.h"
+
+#import "main/VLCMain.h"
+
 #import "playlist/VLCPlaylistController.h"
 
+#import "views/VLCImageView.h"
+#import "views/VLCTrackingView.h"
+
 @implementation VLCLibraryTableCellView
 
 + (instancetype)fromNibWithOwner:(id)owner
@@ -90,13 +96,12 @@
     self.singlePrimaryTitleTextField.hidden = NO;
     self.singlePrimaryTitleTextField.stringValue = _representedInputItem.name;
 
-    NSURL *artworkURL = _representedInputItem.artworkURL;
-    NSImage *placeholderImage = [self imageForInputItem];
-    if (artworkURL) {
-        [self.representedImageView setImageURL:artworkURL placeholderImage:placeholderImage];
-    } else {
-        self.representedImageView.image = placeholderImage;
-    }
+    dispatch_async(dispatch_get_global_queue(QOS_CLASS_USER_INTERACTIVE, 0), ^{
+        NSImage *image = [VLCLibraryImageCache thumbnailForInputItem:self->_representedInputItem];
+        dispatch_async(dispatch_get_main_queue(), ^{
+            self.representedImageView.image = image;
+        });
+    });
 
     self.trackingView.viewToHide = self.playInstantlyButton;
     self.playInstantlyButton.action = @selector(playInputItemInstantly:);
@@ -123,19 +128,6 @@
     self.representedImageView.image = [NSImage imageNamed: @"noart.png"];
 }
 
-- (NSImage *)imageForInputItem
-{
-    NSImage *image;
-    if (_representedInputItem.inputType == ITEM_TYPE_DIRECTORY) {
-        image = [NSImage imageNamed:NSImageNameFolder];
-    }
-
-    if (!image) {
-        image = [NSImage imageNamed: @"noart.png"];
-    }
-    return image;
-}
-
 - (void)playMediaItemInstantly:(id)sender
 {
     [[[VLCMain sharedInstance] libraryController] appendItemToPlaylist:_representedItem playImmediately:YES];


=====================================
modules/gui/macosx/library/VLCLibraryUIUnits.h
=====================================
@@ -1,5 +1,5 @@
 /*****************************************************************************
- * VLCLibraryAudioViewController.h: MacOS X interface module
+ * VLCLibraryUIUnits.h: MacOS X interface module
  *****************************************************************************
  * Copyright (C) 2022 VLC authors and VideoLAN
  *
@@ -41,8 +41,8 @@ NS_ASSUME_NONNULL_BEGIN
 + (const CGFloat)mediumDetailSupplementaryViewCollectionViewHeight;
 + (const CGFloat)largeDetailSupplementaryViewCollectionViewHeight;
 
-+ (const CGFloat)dynamicCollectionViewItemMinimumSize;
-+ (const CGFloat)dynamicCollectionViewItemMaximumSize;
++ (const CGFloat)dynamicCollectionViewItemMinimumWidth;
++ (const CGFloat)dynamicCollectionViewItemMaximumWidth;
 
 @end
 


=====================================
modules/gui/macosx/library/VLCLibraryUIUnits.m
=====================================
@@ -1,5 +1,5 @@
 /*****************************************************************************
- * VLCLibraryAudioViewController.m: MacOS X interface module
+ * VLCLibraryUIUnits.m: MacOS X interface module
  *****************************************************************************
  * Copyright (C) 2022 VLC authors and VideoLAN
  *
@@ -69,12 +69,12 @@
     return 500;
 }
 
-+ (const CGFloat)dynamicCollectionViewItemMinimumSize
++ (const CGFloat)dynamicCollectionViewItemMinimumWidth
 {
     return 180;
 }
 
-+ (const CGFloat)dynamicCollectionViewItemMaximumSize
++ (const CGFloat)dynamicCollectionViewItemMaximumWidth
 {
     return 280;
 }


=====================================
modules/gui/macosx/media-source/VLCMediaSourceCollectionViewItem.m
=====================================
@@ -22,15 +22,16 @@
 
 #import "VLCMediaSourceCollectionViewItem.h"
 
-#import "main/VLCMain.h"
-
-#import "extensions/NSString+Helpers.h"
-#import "extensions/NSFont+VLCAdditions.h"
 #import "extensions/NSColor+VLCAdditions.h"
+#import "extensions/NSFont+VLCAdditions.h"
+#import "extensions/NSString+Helpers.h"
 #import "extensions/NSView+VLCAdditions.h"
 
 #import "library/VLCInputItem.h"
 #import "library/VLCLibraryMenuController.h"
+#import "library/VLCLibraryImageCache.h"
+
+#import "main/VLCMain.h"
 
 #import "playlist/VLCPlaylistController.h"
 
@@ -137,13 +138,12 @@ NSString *VLCMediaSourceCellIdentifier = @"VLCLibraryCellIdentifier";
     }
 
     _mediaTitleTextField.stringValue = _representedInputItem.name;
-    NSURL *artworkURL = _representedInputItem.artworkURL;
-    NSImage *placeholderImage = [self imageForInputItem];
-    if (artworkURL) {
-        [_mediaImageView setImageURL:artworkURL placeholderImage:placeholderImage];
-    } else {
-        _mediaImageView.image = placeholderImage;
-    }
+    dispatch_async(dispatch_get_global_queue(QOS_CLASS_USER_INTERACTIVE, 0), ^{
+        NSImage *image = [VLCLibraryImageCache thumbnailForInputItem:self->_representedInputItem];
+        dispatch_async(dispatch_get_main_queue(), ^{
+            self->_mediaImageView.image = image;
+        });
+    });
 
     switch (_representedInputItem.inputType) {
         case ITEM_TYPE_DIRECTORY:
@@ -171,19 +171,6 @@ NSString *VLCMediaSourceCellIdentifier = @"VLCLibraryCellIdentifier";
     }
 }
 
-- (NSImage *)imageForInputItem
-{
-    NSImage *image;
-    if (_representedInputItem.inputType == ITEM_TYPE_DIRECTORY) {
-        image = [NSImage imageNamed:NSImageNameFolder];
-    }
-
-    if (!image) {
-        image = [NSImage imageNamed: @"noart.png"];
-    }
-    return image;
-}
-
 #pragma mark - actions
 
 - (IBAction)playInstantly:(id)sender



View it on GitLab: https://code.videolan.org/videolan/vlc/-/compare/d641b2b25d773d4dab482a97fdfbf32a053ae356...ef6f465bea701e9f2693ddf321aadf6177e68d68

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