Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found

Target

Select target project
  • videolan/vlc
  • chouquette/vlc
  • bakiewicz.marek122/vlc
  • devnexen/vlc
  • rohanrajpal/vlc
  • blurrrb/vlc
  • gsoc/gsoc2019/darkapex/vlc
  • b1ue/vlc
  • fkuehne/vlc
  • magsoft/vlc
  • chub/vlc
  • cramiro9/vlc
  • robUx4/vlc
  • rom1v/vlc
  • akshayaky/vlc
  • tmk907/vlc
  • akymaster/vlc
  • govind.sharma/vlc
  • psilokos/vlc
  • xjbeta/vlc
  • jahan/vlc
  • 1480c1/vlc
  • amanchande/vlc
  • aaqib/vlc
  • rist/vlc
  • apol/vlc
  • mindfreeze/vlc
  • alexandre-janniaux/vlc
  • sandsmark/vlc
  • jagannatharjun/vlc
  • gsoc/gsoc2020/matiaslgonzalez/vlc
  • gsoc/gsoc2020/jagannatharjun/vlc
  • mstorsjo/vlc
  • gsoc/gsoc2020/vedenta/vlc
  • gsoc/gsoc2020/arnav-ishaan/vlc
  • gsoc/gsoc2020/andreduong/vlc
  • fuzun/vlc
  • gsoc/gsoc2020/vatsin/vlc
  • gsoc/gsoc2020/sagid/vlc
  • yaron/vlc
  • Phoenix/vlc
  • Garf/vlc
  • ePiratWorkarounds/vlc
  • tguillem/vlc
  • jnqnfe/vlc
  • mdc/vlc
  • Vedaa/vlc
  • rasa/vlc
  • quink/vlc
  • yealo/vlc
  • aleksey_ak/vlc
  • ePirat/vlc
  • ilya.yanok/vlc
  • asenat/vlc
  • m/vlc
  • bunjee/vlc
  • BLumia/vlc
  • sagudev/vlc
  • hamedmonji30/vlc
  • nullgemm/vlc
  • DivyamAhuja/vlc
  • thesamesam/vlc
  • dag7/vlc
  • snehil101/vlc
  • haasn/vlc
  • jbk/vlc
  • ValZapod/vlc
  • mfkl/vlc
  • WangChuan/vlc
  • core1024/vlc
  • GhostVaibhav/vlc
  • dfuhrmann/vlc
  • davide.prade/vlc
  • tmatth/vlc
  • Courmisch/vlc
  • zouya/vlc
  • hpi/vlc
  • EwoutH/vlc
  • aleung27/vlc
  • hengwu0/vlc
  • saladin/vlc
  • ashuio/vlc
  • richselwood/vlc
  • verma16Ayush/vlc
  • chemicalflash/vlc
  • PoignardAzur/vlc
  • huangjieNT/vlc
  • Blake-Haydon/vlc
  • AnuthaDev/vlc
  • gsoc/gsoc2021/mpd/vlc
  • nicolas_lequec/vlc
  • sambassaly/vlc
  • thresh/vlc
  • bonniegong/vlc
  • myaashish/vlc
  • stavros.vagionitis/vlc
  • ileoo/vlc
  • louis-santucci/vlc
  • cchristiansen/vlc
  • sabyasachi07/vlc
  • AbduAmeen/vlc
  • ashishb0410/vlc
  • urbanhusky/vlc
  • davidepietrasanta/vlc
  • riksleutelstad/vlc
  • jeremyVignelles/vlc
  • komh/vlc
  • iamjithinjohn/vlc
  • JohannesKauffmann/vlc2
  • kunglao/vlc
  • natzberg/vlc
  • jill/vlc
  • cwendling/vlc
  • adufou/vlc
  • ErwanAirone/vlc
  • HasinduDilshan10/vlc
  • vagrantc/vlc
  • rafiv/macos-bigsur-icon
  • Aymeriic/vlc
  • saranshg20/vlc
  • metzlove24/vlc
  • linkfanel/vlc
  • Ds886/vlc
  • metehan-arslan/vlc
  • Skantes/vlc
  • kgsandundananjaya96/vlc
  • mitchcapper/vlc
  • advaitgupta/vlc
  • StefanBruens/vlc
  • ratajs/vlc
  • T.M.F.B.3761/vlc
  • m222059/vlc
  • casemerrick/vlc
  • joshuaword2alt/vlc
  • sjwaddy/vlc
  • dima/vlc
  • Ybalrid/vlc
  • umxprime/vlc
  • eschmidt/vlc
  • vannieuwenhuysenmichelle/vlc
  • badcf00d/vlc
  • wesinator/vlc
  • louis/vlc
  • xqq/vlc
  • EmperorYP7/vlc
  • NicoLiam/vlc
  • loveleen/vlc
  • rofferom/vlc
  • rbultje/vlc
  • TheUnamed/vlc
  • pratiksharma341/vlc
  • Saurab17/vlc
  • purist.coder/vlc
  • Shuicheng/vlc
  • mdrrubel292/vlc
  • silverbleu00/vlc
  • metif12/vlc
  • asher-m/vlc
  • jeffk/vlc
  • Brandonbr1/vlc
  • beautyyuyanli/vlc
  • rego21/vlc
  • muyangren907/vlc
  • collectionbylawrencejason/vlc
  • evelez/vlc
  • GSMgeeth/vlc
  • Oneric/vlc
  • TJ5/vlc
  • XuanTung95/vlc
  • darrenjenny21/vlc
  • Trenly/vlc
  • RockyTDR/vlc
  • mjakubowski/vlc
  • caprica/vlc
  • ForteFrankie/vlc
  • seannamiller19/vlc
  • junlon2006/vlc
  • kiwiren6666/vlc
  • iuseiphonexs/vlc
  • fenngtun/vlc
  • Rajdutt999/vlc
  • typx/vlc
  • leon.vitanos/vlc
  • robertogarci0938/vlc
  • gsoc/gsoc2022/luc65r/vlc-mpd
  • skeller/vlc
  • MCJack123/vlc
  • luc65r/vlc-mpd
  • popov895/vlc
  • claucambra/vlc
  • brad/vlc
  • matthewmurua88/vlc
  • Tomas8874/vlc
  • philenotfound/vlc
  • makita-do3/vlc
  • LZXCorp/vlc
  • mar0x/vlc
  • senojetkennedy0102/vlc
  • shaneb243/vlc
  • ahmadbader/vlc
  • rajduttcse26/vlc-audio-filters
  • Juniorzito8415/vlc
  • achernyakov/vlc
  • lucasjetgroup/vlc
  • pupdoggy666/vlc
  • gmde9363/vlc
  • alexnwayne/vlc
  • bahareebrahimi781/vlc
  • hamad633666/vlc
  • umghof3112/vlc
  • joe0199771874/vlc
  • Octocats66666666/vlc
  • jjm_223/vlc
  • btech10110.19/vlc
  • sunnykfc028/vlc-audio-filters
  • loic/vlc
  • nguyenminhducmx1/vlc
  • JanekKrueger/vlc
  • bstubbington2/vlc
  • rcombs/vlc
  • Ordissimo/vlc
  • king7532/vlc
  • noobsauce101/vlc
  • schong0525/vlc
  • myQwil/vlc
  • apisbg91/vlc
  • geeboy0101017/vlc
  • kim.faughey/vlc
  • nurupo/vlc
  • yyusea/vlc
  • 0711235879.khco/vlc
  • ialo/vlc
  • iloveyeye2/vlc
  • gdtdftdqtd/vlc
  • leandroconsiglio/vlc
  • AndyHTML2012/vlc
  • ncz/vlc
  • lucenticus/vlc
  • knr1931/vlc
  • kjoonlee/vlc
  • chandrakant100/vlc-qt
  • johge42/vlc
  • polter/vlc
  • hexchain/vlc
  • Tushwrld/vlc
  • mztea928/vlc
  • jbelloncastro/vlc
  • alvinhochun/vlc
  • ghostpiratecrow/vlc
  • ujjwaltwitx/vlc
  • alexsonarin06/vlc
  • adrianbon76/vlc
  • altsod/vlc
  • damien.lucas44/vlc
  • dmytrivtaisa/vlc
  • utk202/vlc
  • aaxhrj/vlc
  • thomas.hermes/vlc
  • structurenewworldorder/vlc
  • slomo/vlc
  • wantlamy/vlc
  • musc.o3cminc/vlc
  • thebarshablog/vlc
  • kerrick/vlc
  • kratos142518/vlc
  • leogps/vlc
  • vacantron/vlc
  • luna_koly/vlc
  • Ratio2/vlc
  • anuoshemohammad/vlc
  • apsun/vlc
  • aaa1115910/vlc
  • alimotmoyo/vlc
  • Ambossmann/vlc
  • Sam-LearnsToCode/vlc
  • Chilledheart/vlc
  • Labnann/vlc
  • ktcoooot1/vlc
  • mohit-marathe/vlc
  • johnddx/vlc
  • manstabuk/vlc
  • Omar-ahmed314/vlc
  • vineethkm/vlc
  • 9Enemi86/vlc
  • radoslav.m.panteleev/vlc
  • ashishami2002/vlc
  • Corbax/vlc
  • firnasahmed/vlc
  • pelayarmalam4/vlc
  • c0ff330k/vlc
  • shikhindahikar/vlc
  • l342723951/vlc
  • christianschwandner/vlc
  • douniwan5788/vlc
  • 7damian7/vlc
  • ferdnyc/vlc
  • f.ales1/vlc
  • pandagby/vlc
  • BaaBaa/vlc
  • jewe37/vlc
  • w00drow/vlc
  • russelltg/vlc
  • ironicallygod/vlc
  • soumyaDghosh/vlc
  • linzihao1999/vlc
  • deyayush6/vlc
  • mibi88/vlc
  • newabdallah10/vlc
  • jhorbincolombia/vlc
  • rimvihaqueshupto/vlc
  • andrewkhon98/vlc
  • fab78/vlc
  • lapaz17/vlc
  • amanna13/vlc
  • mdakram28/vlc
  • 07jw1980/vlc
  • sohamgupta/vlc
  • Eson-Jia1/vlc
  • Sumou/vlc
  • vikram-kangotra/vlc
  • chalice191/vlc
  • olivercalder/vlc
  • aaasg4001/vlc
  • zipdox/vlc
  • kwizart/vlc
  • Dragon-S/vlc
  • jdemeule/vlc
  • gabriel_lt/vlc
  • locutusofborg/vlc
  • sammirata/vlc-librist
  • another/vlc
  • Benjamin_Loison/vlc
  • ahmedmoselhi/vlc
  • petergaal/vlc
  • huynhsontung/vlc
  • dariusmihut/vlc
  • tvermaashutosh/vlc
  • buti/vlc
  • Niram7777/vlc
  • rohan-here/vlc
  • balaji-sivasakthi/vlc
  • rlindner81/vlc
  • Kakadus/vlc
  • djain/vlc
  • ABBurmeister/vlc
  • craighuggins/vlc
  • orbea/vlc
  • maxos/vlc
  • aakarshmj/vlc
  • kblaschke/vlc
  • ankitm/vlc
  • advait-0/vlc
  • mohak2003/vlc
  • yselkowitz/vlc
  • AZM999/vlc-azm
  • andrey.turkin/vlc
  • Disha-Baghel/vlc
  • nowrep/vlc
  • Apeng/vlc
  • Choucroute_melba/vlc
  • autra/vlc
  • eclipseo/vlc
  • fhuber/vlc
  • olafhering/vlc
  • sdasda7777/vlc
  • 1div0/vlc
  • skosnits/vlc-extended-playlist-support
  • dnicolson/vlc
  • Timshel/vlc
  • octopols/vlc
  • MangalK/vlc
  • nima64/vlc
  • misawai/vlc
  • Alexander-Wilms/vlc
  • Maxime2/vlc-fork-for-visualizer
  • ww/vlc
  • jeske/vlc
  • sgross-emlix/vlc
  • morenonatural/vlc
  • freakingLovesVLC/vlc
  • borisgolovnev/vlc
  • mpromonet/vlc
  • diogo.simao-marques/vlc
  • masstock/vlc
  • pratikpatel8982/vlc
  • hugok79/vlc
  • longervision/vlc
  • abhiudaysurya/vlc
  • rishabhgarg/vlc
  • tumic/vlc
  • cart/vlc
  • shubham442/vlc
  • Aditya692005/vlc
  • sammirata/vlc4
  • syrykh/vlc
  • Vvorcun/macos-new-icon
  • AyaanshC/vlc
  • nasso/vlc
  • Quark/vlc
  • sebastinas/vlc
  • rhstone/vlc
  • talregev/vlc
  • Managor/vlc
  • abdsaber000/vlc
  • falbrechtskirchinger/vlc
  • b.sullender/vlc
  • hulxv/vlc
  • zyad-ayad/vlc
408 results
Show changes
Commits on Source (19)
Showing
with 215 additions and 57 deletions
......@@ -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 */,
......
......@@ -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 \
......
/*****************************************************************************
* NSImage+VLCAdditions.h: MacOS X interface module
*****************************************************************************
* Copyright (C) 2023 VLC authors and VideoLAN
*
* Authors: Claudio Cambra <developer@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
@interface NSImage (VLCAdditions)
+ (instancetype)quickLookPreviewForLocalPath:(NSString*)path withSize:(NSSize)size;
+ (instancetype)quickLookPreviewForLocalURL:(NSURL*)url withSize:(NSSize)size;
@end
NS_ASSUME_NONNULL_END
/*****************************************************************************
* NSImage+VLCAdditions.m: MacOS X interface module
*****************************************************************************
* Copyright (C) 2023 VLC authors and VideoLAN
*
* Authors: Claudio Cambra <developer@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>
@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;
}
@end
......@@ -79,6 +79,8 @@ extern NSString *VLCInputItemPreparsingSucceeded;
- (int)preparseInputItem;
- (int)writeMetadataToFile;
- (NSImage*)thumbnailWithSize:(NSSize)size;
@end
@interface VLCInputNode : NSObject
......
......@@ -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
......
......@@ -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
......
......@@ -24,11 +24,13 @@
NS_ASSUME_NONNULL_BEGIN
@class VLCInputItem;
@protocol VLCMediaLibraryItemProtocol;
@interface VLCLibraryImageCache : NSObject
+ (nullable NSImage *)thumbnailForLibraryItem:(id<VLCMediaLibraryItemProtocol>)libraryItem;
+ (nullable NSImage *)thumbnailForInputItem:(VLCInputItem*)inputItem;
@end
......
......@@ -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
......@@ -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];
......
/*****************************************************************************
* 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
......
/*****************************************************************************
* 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;
}
......
......@@ -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
......