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
403 results
Show changes
Commits on Source (15)
......@@ -955,7 +955,7 @@
<rect key="frame" x="0.0" y="0.0" width="528" height="371"/>
<autoresizingMask key="autoresizingMask"/>
<subviews>
<tableView verticalHuggingPriority="750" allowsExpansionToolTips="YES" columnAutoresizingStyle="lastColumnOnly" columnReordering="NO" columnSelection="YES" multipleSelection="NO" autosaveColumns="NO" viewBased="YES" id="vpJ-Oz-Ebz">
<tableView verticalHuggingPriority="750" allowsExpansionToolTips="YES" columnAutoresizingStyle="lastColumnOnly" columnReordering="NO" columnSelection="YES" multipleSelection="NO" autosaveColumns="NO" viewBased="YES" id="vpJ-Oz-Ebz" customClass="VLCLibraryTableView">
<rect key="frame" x="0.0" y="0.0" width="528" height="371"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<size key="intercellSpacing" width="3" height="2"/>
......
......@@ -43,6 +43,7 @@ extern NSString *VLCInputItemPreparsingSucceeded;
@property (readonly) struct input_item_t *vlcInputItem;
@property (readonly) NSString *MRL;
@property (readonly) NSString *decodedMRL;
@property (readonly) NSString *path;
@property (readwrite) NSString *name;
@property (readwrite) NSString *title;
@property (readwrite) NSString *artist;
......
......@@ -450,6 +450,25 @@ static const struct input_preparser_callbacks_t preparseCallbacks = {
return nil;
}
- (NSString*)path
{
if (_vlcInputItem || (_vlcInputItem && _vlcInputItem->b_net)) {
char *psz_url = input_item_GetURI(_vlcInputItem);
if (!psz_url) {
return @"";
}
char *psz_path = vlc_uri2path(psz_url);
NSString *path = toNSStr(psz_path);
free(psz_url);
free(psz_path);
return path;
}
return @"";
}
- (vlc_tick_t)duration
{
if (_vlcInputItem) {
......
......@@ -24,14 +24,16 @@
NS_ASSUME_NONNULL_BEGIN
@class VLCInputItem;
@protocol VLCMediaLibraryItemProtocol;
@interface VLCLibraryMenuController : NSObject
@property (readonly) NSMenu *libraryMenu;
@property (readwrite, strong, nonatomic) id<VLCMediaLibraryItemProtocol> representedItem;
@property (readwrite, strong, nonatomic) VLCInputItem *representedInputItem;
- (void)popupMenuWithEvent:(NSEvent *)theEvent forView:(NSView *)theView;
- (void)setRepresentedItem:(id<VLCMediaLibraryItemProtocol>)item;
@end
......
......@@ -22,20 +22,28 @@
#import "VLCLibraryMenuController.h"
#import "main/VLCMain.h"
#import "extensions/NSMenu+VLCAdditions.h"
#import "extensions/NSString+Helpers.h"
#import "library/VLCInputItem.h"
#import "library/VLCLibraryController.h"
#import "library/VLCLibraryDataTypes.h"
#import "library/VLCLibraryInformationPanel.h"
#import "extensions/NSString+Helpers.h"
#import "extensions/NSMenu+VLCAdditions.h"
#import "main/VLCMain.h"
#import "playlist/VLCPlaylistController.h"
#import <vlc_input.h>
#import <vlc_url.h>
@interface VLCLibraryMenuController ()
{
VLCLibraryInformationPanel *_informationPanel;
id<VLCMediaLibraryItemProtocol> _representedItem;
NSHashTable<NSMenuItem*> *_mediaItemRequiringMenuItems;
NSHashTable<NSMenuItem*> *_inputItemRequiringMenuItems;
NSHashTable<NSMenuItem*> *_localInputItemRequiringMenuItems;
}
@end
......@@ -79,21 +87,35 @@
[_mediaItemRequiringMenuItems addObject:revealItem];
[_mediaItemRequiringMenuItems addObject:deleteItem];
[_mediaItemRequiringMenuItems addObject:informationItem];
_inputItemRequiringMenuItems = [NSHashTable weakObjectsHashTable];
[_inputItemRequiringMenuItems addObject:playItem];
[_inputItemRequiringMenuItems addObject:appendItem];
_localInputItemRequiringMenuItems = [NSHashTable weakObjectsHashTable];
[_localInputItemRequiringMenuItems addObject:revealItem];
[_localInputItemRequiringMenuItems addObject:deleteItem];
}
- (void)setMediaItemRequiringMenuItemsHidden:(BOOL)hidden
- (void)menuItems:(NSHashTable<NSMenuItem*>*)menuItems
setHidden:(BOOL)hidden
{
for (NSMenuItem *menuItem in _mediaItemRequiringMenuItems) {
for (NSMenuItem *menuItem in menuItems) {
menuItem.hidden = hidden;
}
}
- (void)updateLibraryMenuItems
- (void)updateMenuItems
{
if (_representedItem) {
[self setMediaItemRequiringMenuItemsHidden:NO];
} else {
[self setMediaItemRequiringMenuItemsHidden:YES];
if (_representedItem != nil) {
[self menuItems:_inputItemRequiringMenuItems setHidden:YES];
[self menuItems:_localInputItemRequiringMenuItems setHidden:YES];
[self menuItems:_mediaItemRequiringMenuItems setHidden:NO];
} else if (_representedInputItem != nil) {
[self menuItems:_mediaItemRequiringMenuItems setHidden:YES];
[self menuItems:_inputItemRequiringMenuItems setHidden:NO];
[self menuItems:_localInputItemRequiringMenuItems setHidden:_representedInputItem.isStream];
}
}
......@@ -105,16 +127,27 @@
#pragma mark - actions
- (void)addToPlaylist:(BOOL)playImmediately
{
if(_representedItem == nil) {
return;
if (_representedItem != nil) {
[self addMediaLibraryItemToPlaylist:_representedItem
playImmediately:playImmediately];
} else if (_representedInputItem != nil) {
[self addInputItemToPlaylist:_representedInputItem
playImmediately:playImmediately];
}
}
- (void)addMediaLibraryItemToPlaylist:(id<VLCMediaLibraryItemProtocol>)mediaLibraryItem
playImmediately:(BOOL)playImmediately
{
NSParameterAssert(mediaLibraryItem);
// We want to add all the tracks to the playlist but only play the first one immediately,
// otherwise we will skip straight to the last track of the last album from the artist
__block BOOL beginPlayImmediately = playImmediately;
[_representedItem iterateMediaItemsWithBlock:^(VLCMediaLibraryMediaItem* mediaItem) {
[[[VLCMain sharedInstance] libraryController] appendItemToPlaylist:mediaItem playImmediately:beginPlayImmediately];
[mediaLibraryItem iterateMediaItemsWithBlock:^(VLCMediaLibraryMediaItem* childMediaItem) {
[VLCMain.sharedInstance.libraryController appendItemToPlaylist:childMediaItem
playImmediately:beginPlayImmediately];
if(beginPlayImmediately) {
beginPlayImmediately = NO;
......@@ -122,6 +155,16 @@
}];
}
- (void)addInputItemToPlaylist:(VLCInputItem*)inputItem
playImmediately:(BOOL)playImmediately
{
NSParameterAssert(inputItem);
[VLCMain.sharedInstance.playlistController addInputItem:_representedInputItem.vlcInputItem
atPosition:-1
startPlayback:playImmediately];
}
- (void)play:(id)sender
{
[self addToPlaylist:YES];
......@@ -151,31 +194,76 @@
- (void)revealInFinder:(id)sender
{
if(_representedItem == nil) {
return;
if (_representedItem != nil) {
[self revealMediaLibraryItemInFinder:_representedItem];
} else if (_representedInputItem != nil && (!_representedInputItem.isStream)) {
[self revealInputItemInFinder:_representedInputItem];
}
}
VLCMediaLibraryMediaItem *firstMediaItem = _representedItem.firstMediaItem;
- (void)revealMediaLibraryItemInFinder:(id<VLCMediaLibraryItemProtocol>)mediaLibraryItem
{
NSParameterAssert(mediaLibraryItem);
VLCMediaLibraryMediaItem *firstMediaItem = mediaLibraryItem.firstMediaItem;
if(firstMediaItem) {
[[[VLCMain sharedInstance] libraryController] showItemInFinder:firstMediaItem];
[VLCMain.sharedInstance.libraryController showItemInFinder:firstMediaItem];
}
}
- (void)moveToTrash:(id)sender
- (void)revealInputItemInFinder:(VLCInputItem*)inputItem
{
if(_representedItem == nil) {
NSParameterAssert(inputItem);
NSAssert(!inputItem.isStream, @"Cannot reveal a stream input item in Finder");
NSString *path = inputItem.path;
if (!path || path.length == 0) {
return;
}
[NSWorkspace.sharedWorkspace selectFile:path inFileViewerRootedAtPath:path];
}
- (void)moveToTrash:(id)sender
{
if (_representedItem != nil) {
[self moveMediaLibraryItemToTrash:_representedItem];
} else if (_representedInputItem != nil && (!_representedInputItem.isStream)) {
[self moveInputItemToTrash:_representedInputItem];
}
}
- (void)moveMediaLibraryItemToTrash:(id<VLCMediaLibraryItemProtocol>)mediaLibraryItem
{
NSParameterAssert(mediaLibraryItem);
NSFileManager *fileManager = [NSFileManager defaultManager];
[_representedItem iterateMediaItemsWithBlock:^(VLCMediaLibraryMediaItem* mediaItem) {
for (VLCMediaLibraryFile *fileToTrash in mediaItem.files) {
[fileManager trashItemAtURL:fileToTrash.fileURL resultingItemURL:nil error:nil];
[mediaLibraryItem iterateMediaItemsWithBlock:^(VLCMediaLibraryMediaItem* childMediaItem) {
for (VLCMediaLibraryFile *fileToTrash in childMediaItem.files) {
[fileManager trashItemAtURL:fileToTrash.fileURL
resultingItemURL:nil
error:nil];
}
}];
}
- (void)moveInputItemToTrash:(VLCInputItem*)inputItem
{
NSParameterAssert(inputItem);
NSAssert(!inputItem.isStream, @"Cannot move a stream input item to trash");
NSString *path = inputItem.path;
if (!path || path.length == 0) {
return;
}
[NSFileManager.defaultManager trashItemAtURL:[NSURL URLWithString:path]
resultingItemURL:nil
error:nil];
}
- (void)showInformation:(id)sender
{
if (!_informationPanel) {
......@@ -190,7 +278,15 @@
- (void)setRepresentedItem:(id<VLCMediaLibraryItemProtocol>)item
{
_representedItem = item;
[self updateLibraryMenuItems];
_representedInputItem = nil;
[self updateMenuItems];
}
- (void)setRepresentedInputItem:(VLCInputItem *)representedInputItem
{
_representedInputItem = representedInputItem;
_representedItem = nil;
[self updateMenuItems];
}
@end
......@@ -21,8 +21,9 @@
*****************************************************************************/
#import "VLCLibraryTableView.h"
#import <library/VLCLibraryDataTypes.h>
#import "library/VLCLibraryDataTypes.h"
#import "library/VLCLibraryMenuController.h"
#import "media-source/VLCMediaSourceDataSource.h"
@interface VLCLibraryTableView ()
{
......@@ -47,7 +48,8 @@
{
[super setDataSource:dataSource];
if([self.dataSource conformsToProtocol:@protocol(VLCLibraryTableViewDataSource)]) {
if([self.dataSource conformsToProtocol:@protocol(VLCLibraryTableViewDataSource)] ||
self.dataSource.class == VLCMediaSourceDataSource.class) {
_vlcDataSourceConforming = YES;
[self setupMenu];
} else {
......@@ -65,7 +67,17 @@
return;
}
[_menuController setRepresentedItem:[(id<VLCLibraryTableViewDataSource>)self.dataSource libraryItemAtRow:self.clickedRow forTableView:self]];
if([self.dataSource conformsToProtocol:@protocol(VLCLibraryTableViewDataSource)]) {
id<VLCLibraryTableViewDataSource> vlcLibraryDataSource = (id<VLCLibraryTableViewDataSource>)self.dataSource;
id<VLCMediaLibraryItemProtocol> mediaLibraryItem = [vlcLibraryDataSource libraryItemAtRow:self.clickedRow
forTableView:self];
[_menuController setRepresentedItem:mediaLibraryItem];
} else if (self.dataSource.class == VLCMediaSourceDataSource.class) {
VLCMediaSourceDataSource *mediaSourceDataSource = (VLCMediaSourceDataSource*)self.dataSource;
NSAssert(mediaSourceDataSource != nil, @"This should be a valid pointer");
VLCInputItem *mediaSourceInputItem = [mediaSourceDataSource mediaSourceInputItemAtRow:self.clickedRow];
[_menuController setRepresentedInputItem:mediaSourceInputItem];
}
}
@end
......@@ -23,17 +23,28 @@
#import "VLCMediaSourceCollectionViewItem.h"
#import "main/VLCMain.h"
#import "views/VLCImageView.h"
#import "views/VLCTrackingView.h"
#import "extensions/NSString+Helpers.h"
#import "extensions/NSFont+VLCAdditions.h"
#import "extensions/NSColor+VLCAdditions.h"
#import "extensions/NSView+VLCAdditions.h"
#import "library/VLCInputItem.h"
#import "library/VLCLibraryMenuController.h"
#import "playlist/VLCPlaylistController.h"
#import "views/VLCImageView.h"
#import "views/VLCTrackingView.h"
NSString *VLCMediaSourceCellIdentifier = @"VLCLibraryCellIdentifier";
@interface VLCMediaSourceCollectionViewItem()
{
VLCLibraryMenuController *_menuController;
}
@end
@implementation VLCMediaSourceCollectionViewItem
- (instancetype)initWithNibName:(NSNibName)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
......@@ -185,4 +196,30 @@ NSString *VLCMediaSourceCellIdentifier = @"VLCLibraryCellIdentifier";
[[[VLCMain sharedInstance] playlistController] addInputItem:_representedInputItem.vlcInputItem atPosition:-1 startPlayback:NO];
}
-(void)mouseDown:(NSEvent *)theEvent
{
if (theEvent.modifierFlags & NSControlKeyMask) {
if (!_menuController) {
_menuController = [[VLCLibraryMenuController alloc] init];
}
[_menuController setRepresentedInputItem:_representedInputItem];
[_menuController popupMenuWithEvent:theEvent forView:self.view];
}
[super mouseDown:theEvent];
}
- (void)rightMouseDown:(NSEvent *)theEvent
{
if (!_menuController) {
_menuController = [[VLCLibraryMenuController alloc] init];
}
[_menuController setRepresentedInputItem:_representedInputItem];
[_menuController popupMenuWithEvent:theEvent forView:self.view];
[super rightMouseDown:theEvent];
}
@end
......@@ -24,6 +24,7 @@
NS_ASSUME_NONNULL_BEGIN
@class VLCInputItem;
@class VLCInputNode;
@class VLCMediaSource;
......@@ -37,6 +38,7 @@ NS_ASSUME_NONNULL_BEGIN
@property (readwrite) BOOL gridViewMode;
- (void)setupViews;
- (VLCInputItem*)mediaSourceInputItemAtRow:(NSInteger)tableViewRow;
@end
......
......@@ -120,12 +120,7 @@
cellView.identifier = @"VLCMediaSourceTableViewCellIdentifier";
}
VLCInputNode *rootNode = _nodeToDisplay;
NSArray *nodeChildren = rootNode.children;
VLCInputNode *childNode = nodeChildren[row];
VLCInputItem *childRootInput = childNode.inputItem;
cellView.representedInputItem = childRootInput;
cellView.representedInputItem = [self mediaSourceInputItemAtRow:row];
return cellView;
}
......@@ -135,10 +130,8 @@
if (selectedIndex < 0) {
return;
}
VLCInputNode *rootNode = self.nodeToDisplay;
NSArray *nodeChildren = rootNode.children;
VLCInputNode *childNode = nodeChildren[selectedIndex];
VLCInputNode *childNode = [self mediaSourceInputNodeAtRow:selectedIndex];
[self performActionForNode:childNode allowPlayback:NO];
}
......@@ -149,11 +142,35 @@
return;
}
VLCInputNode *rootNode = self.nodeToDisplay;
VLCInputNode *childNode = [self mediaSourceInputNodeAtRow:selectedIndex];
[self performActionForNode:childNode allowPlayback:YES];
}
- (VLCInputNode*)mediaSourceInputNodeAtRow:(NSInteger)tableViewRow
{
if (_nodeToDisplay == nil) {
return nil;
}
VLCInputNode *rootNode = _nodeToDisplay;
NSArray *nodeChildren = rootNode.children;
VLCInputNode *childNode = nodeChildren[selectedIndex];
[self performActionForNode:childNode allowPlayback:YES];
if (nodeChildren == nil || nodeChildren.count == 0) {
return nil;
}
return nodeChildren[tableViewRow];
}
- (VLCInputItem*)mediaSourceInputItemAtRow:(NSInteger)tableViewRow
{
VLCInputNode *childNode = [self mediaSourceInputNodeAtRow:tableViewRow];
if (childNode == nil) {
return nil;
}
return childNode.inputItem;
}
#pragma mark - generic actions
......