Steve Lhomme pushed to branch master at VideoLAN / VLC


Commits:
659c46e2 by Claudio Cambra at 2025-02-08T13:17:00+00:00
macosx: Add VLCLibraryItemPresentingCapable

Signed-off-by: Claudio Cambra <[email protected]>

- - - - -
a56d3983 by Claudio Cambra at 2025-02-08T13:17:00+00:00
macosx: Mark library view controllers that already implement 
presentLibraryItem: as VLCLibraryItemPresentingCapable conforming

Signed-off-by: Claudio Cambra <[email protected]>

- - - - -
c6fca279 by Claudio Cambra at 2025-02-08T13:17:00+00:00
macosx: Mark VLCLibraryWindow as VLCLibraryItemPresentingCapable

Signed-off-by: Claudio Cambra <[email protected]>

- - - - -
532ed0ff by Claudio Cambra at 2025-02-08T13:17:00+00:00
macosx: Add method to get relevant library segment for a given library item

Signed-off-by: Claudio Cambra <[email protected]>

- - - - -
840affe8 by Claudio Cambra at 2025-02-08T13:17:00+00:00
macosx: Split application of a segment's relevant view into a different 
method in library window

Signed-off-by: Claudio Cambra <[email protected]>

- - - - -
db1ef0ee by Claudio Cambra at 2025-02-08T13:17:00+00:00
macosx: Deduplicate library item presentation procedure in library window

Signed-off-by: Claudio Cambra <[email protected]>

- - - - -
0c06c384 by Claudio Cambra at 2025-02-08T13:17:00+00:00
macosx: Make VLCLibraryGroupsViewController VLCLibraryItemPresentingCapable 
conforming

Signed-off-by: Claudio Cambra <[email protected]>

- - - - -


13 changed files:

- extras/package/macosx/VLC.xcodeproj/project.pbxproj
- modules/gui/macosx/Makefile.am
- + modules/gui/macosx/library/VLCLibraryItemPresentingCapable.h
- modules/gui/macosx/library/VLCLibrarySegment.h
- modules/gui/macosx/library/VLCLibrarySegment.m
- modules/gui/macosx/library/VLCLibraryWindow.h
- modules/gui/macosx/library/VLCLibraryWindow.m
- modules/gui/macosx/library/audio-library/VLCLibraryAudioViewController.h
- modules/gui/macosx/library/groups-library/VLCLibraryGroupsViewController.h
- modules/gui/macosx/library/groups-library/VLCLibraryGroupsViewController.m
- 
modules/gui/macosx/library/home-library/VLCLibraryHomeViewStackViewController.h
- modules/gui/macosx/library/home-library/VLCLibraryHomeViewVideoContainerView.h
- modules/gui/macosx/library/video-library/VLCLibraryVideoViewController.h


Changes:

=====================================
extras/package/macosx/VLC.xcodeproj/project.pbxproj
=====================================
@@ -331,6 +331,7 @@
                532CBCFD2C8E025F00899413 /* VLCLibraryDataSource.h */ = {isa = 
PBXFileReference; lastKnownFileType = sourcecode.c.h; path = 
VLCLibraryDataSource.h; sourceTree = "<group>"; };
                533B5D2A29CF94C6003DE887 /* VLCBookmarksTableViewDataSource.h 
*/ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = 
VLCBookmarksTableViewDataSource.h; sourceTree = "<group>"; };
                533B5D2B29CF94C6003DE887 /* VLCBookmarksTableViewDataSource.m 
*/ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = 
VLCBookmarksTableViewDataSource.m; sourceTree = "<group>"; };
+               533D20432D549D2400AB146F /* VLCLibraryItemPresentingCapable.h 
*/ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = 
VLCLibraryItemPresentingCapable.h; sourceTree = "<group>"; };
                5341F1472C96E544003BDF0A /* VLCLibraryWindowChaptersView.xib */ 
= {isa = PBXFileReference; lastKnownFileType = file.xib; path = 
VLCLibraryWindowChaptersView.xib; sourceTree = "<group>"; };
                5341F1482C9757EF003BDF0A /* 
VLCLibraryWindowChaptersSidebarViewController.h */ = {isa = PBXFileReference; 
lastKnownFileType = sourcecode.c.h; path = 
VLCLibraryWindowChaptersSidebarViewController.h; sourceTree = "<group>"; };
                5341F1492C9757EF003BDF0A /* 
VLCLibraryWindowChaptersSidebarViewController.m */ = {isa = PBXFileReference; 
lastKnownFileType = sourcecode.c.objc; path = 
VLCLibraryWindowChaptersSidebarViewController.m; sourceTree = "<group>"; };
@@ -1384,6 +1385,7 @@
                                7DFBDCAA2269E77F00B700A5 /* VLCLibraryModel.m 
*/,
                                53D8ED982B583AAF00142EAD /* 
VLCLibraryModelChangeDelegate.h */,
                                53D8ED992B583AAF00142EAD /* 
VLCLibraryModelChangeDelegate.m */,
+                               533D20432D549D2400AB146F /* 
VLCLibraryItemPresentingCapable.h */,
                                530771F22AEBB80C00656D3D /* 
VLCLibraryRepresentedItem.h */,
                                530771F32AEBBD5B00656D3D /* 
VLCLibraryRepresentedItem.m */,
                                531343E82A8E8965007AEDFA /* VLCLibrarySegment.h 
*/,


=====================================
modules/gui/macosx/Makefile.am
=====================================
@@ -135,6 +135,7 @@ libmacosx_plugin_la_SOURCES = \
        gui/macosx/library/VLCLibraryImageCache.m \
        gui/macosx/library/VLCLibraryItemInternalMediaItemsDataSource.h \
        gui/macosx/library/VLCLibraryItemInternalMediaItemsDataSource.m \
+       gui/macosx/library/VLCLibraryItemPresentingCapable.h \
        gui/macosx/library/VLCLibraryMasterDetailViewTableViewDataSource.h \
        gui/macosx/library/VLCLibraryMasterDetailViewTableViewDelegate.h \
        gui/macosx/library/VLCLibraryMasterDetailViewTableViewDelegate.m \


=====================================
modules/gui/macosx/library/VLCLibraryItemPresentingCapable.h
=====================================
@@ -0,0 +1,35 @@
+/*****************************************************************************
+ * VLCLibraryItemPresentingCapable.h: MacOS X interface module
+ *****************************************************************************
+ * Copyright (C) 2025 VLC authors and VideoLAN
+ *
+ * Authors: Claudio Cambra <[email protected]>
+ *
+ * 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 <Foundation/Foundation.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+@protocol VLCMediaLibraryItemProtocol;
+
+@protocol VLCLibraryItemPresentingCapable
+
+- (void)presentLibraryItem:(id<VLCMediaLibraryItemProtocol>)libraryItem;
+
+@end
+
+NS_ASSUME_NONNULL_END


=====================================
modules/gui/macosx/library/VLCLibrarySegment.h
=====================================
@@ -25,6 +25,7 @@
 NS_ASSUME_NONNULL_BEGIN
 
 @class VLCLibraryAbstractSegmentViewController;
+@protocol VLCMediaLibraryItemProtocol;
 
 extern NSString * const VLCLibraryBookmarkedLocationsKey;
 extern NSString * const VLCLibraryBookmarkedLocationsChanged;
@@ -63,6 +64,7 @@ typedef NS_ENUM(NSInteger, VLCLibrarySegmentType) {
 @property (readonly) NSUInteger toolbarDisplayFlags;
 
 + (instancetype)segmentWithSegmentType:(VLCLibrarySegmentType)segmentType;
++ 
(instancetype)segmentForLibraryItem:(id<VLCMediaLibraryItemProtocol>)libraryItem;
 - (nullable VLCLibraryAbstractSegmentViewController *)newLibraryViewController;
 - 
(void)presentLibraryViewUsingController:(VLCLibraryAbstractSegmentViewController
 *)controller;
 


=====================================
modules/gui/macosx/library/VLCLibrarySegment.m
=====================================
@@ -26,6 +26,7 @@
 
 #import "library/VLCInputItem.h"
 #import "library/VLCLibraryController.h"
+#import "library/VLCLibraryDataTypes.h"
 #import "library/VLCLibraryModel.h"
 #import "library/VLCLibrarySegmentBookmarkedLocation.h"
 #import "library/VLCLibraryWindow.h"
@@ -855,6 +856,33 @@ NSArray<NSString *> *defaultBookmarkedLocations()
     }
 }
 
++ 
(instancetype)segmentForLibraryItem:(id<VLCMediaLibraryItemProtocol>)libraryItem
+{
+    if ([libraryItem isKindOfClass:VLCMediaLibraryAlbum.class]) {
+        return [VLCLibrarySegment 
segmentWithSegmentType:VLCLibraryAlbumsMusicSubSegmentType];
+    } else if ([libraryItem isKindOfClass:VLCMediaLibraryArtist.class]) {
+        return [VLCLibrarySegment 
segmentWithSegmentType:VLCLibraryArtistsMusicSubSegmentType];
+    } else if ([libraryItem isKindOfClass:VLCMediaLibraryGenre.class]) {
+        return [VLCLibrarySegment 
segmentWithSegmentType:VLCLibraryGenresMusicSubSegmentType];
+    } else if ([libraryItem isKindOfClass:VLCMediaLibraryGroup.class]) {
+        return [VLCLibrarySegment 
segmentWithSegmentType:VLCLibraryGroupsSegmentType];
+    }
+
+    VLCMediaLibraryMediaItem * const mediaItem = (VLCMediaLibraryMediaItem 
*)libraryItem;
+    const BOOL validMediaItem = mediaItem != nil;
+    if (validMediaItem && mediaItem.mediaType == VLC_ML_MEDIA_TYPE_AUDIO) {
+        return [VLCLibrarySegment 
segmentWithSegmentType:VLCLibraryMusicSegmentType];
+    } else if (validMediaItem && mediaItem.mediaType == 
VLC_ML_MEDIA_TYPE_VIDEO) {
+        if (mediaItem.mediaSubType == VLC_ML_MEDIA_SUBTYPE_SHOW_EPISODE) {
+            return [VLCLibrarySegment 
segmentWithSegmentType:VLCLibraryShowsVideoSubSegmentType];
+        }
+        return [VLCLibrarySegment 
segmentWithSegmentType:VLCLibraryVideoSegmentType];
+    }
+
+    NSLog(@"Unknown library item type provided, cannot find segment for it: 
%@", libraryItem.displayString);
+    return nil;
+}
+
 - (instancetype)initWithSegmentType:(VLCLibrarySegmentType)segmentType
 {
     return [VLCLibrarySegment treeNodeWithRepresentedObject:@(segmentType)];


=====================================
modules/gui/macosx/library/VLCLibraryWindow.h
=====================================
@@ -24,6 +24,8 @@
 
 #import "views/VLCDragDropView.h"
 
+#import "library/VLCLibraryItemPresentingCapable.h"
+
 NS_ASSUME_NONNULL_BEGIN
 
 @class VLCMainWindowControlsBar;
@@ -50,7 +52,7 @@ typedef NS_ENUM(NSInteger, VLCLibraryViewModeSegment) {
     VLCLibraryLargestSentinelViewModeSegment
 };
 
-@interface VLCLibraryWindow : 
VLCFullVideoViewWindow<NSUserInterfaceItemIdentification, VLCDragDropTarget>
+@interface VLCLibraryWindow : 
VLCFullVideoViewWindow<NSUserInterfaceItemIdentification, VLCDragDropTarget, 
VLCLibraryItemPresentingCapable>
 
 extern const CGFloat VLCLibraryWindowMinimalWidth;
 extern const CGFloat VLCLibraryWindowMinimalHeight;
@@ -137,7 +139,6 @@ extern const NSUserInterfaceItemIdentifier 
VLCLibraryWindowIdentifier;
                               usingConstraints:(NSArray<NSLayoutConstraint *> 
*)constraints
                              displayingMessage:(NSString *)message;
 - (void)displayNoResultsMessage;
-- (void)presentLibraryItem:(id<VLCMediaLibraryItemProtocol>)libraryItem;
 - (void)goToLocalFolderMrl:(NSString *)mrl;
 
 - (IBAction)goToBrowseSection:(id)sender;


=====================================
modules/gui/macosx/library/VLCLibraryWindow.m
=====================================
@@ -232,7 +232,11 @@ static void addShadow(NSImageView *__unsafe_unretained 
imageView)
 {
     const VLCLibrarySegmentType segmentType = self.librarySegmentType;
     VLCLibrarySegment * const segment = [VLCLibrarySegment 
segmentWithSegmentType:segmentType];
+    [self applySegmentView:segment];
+}
 
+- (void)applySegmentView:(VLCLibrarySegment *)segment
+{
     [self.toolbarDelegate applyVisiblityFlags:segment.toolbarDisplayFlags];
     if (![self.librarySegmentViewController 
isKindOfClass:segment.libraryViewControllerClass]) {
         _librarySegmentViewController = [segment newLibraryViewController];
@@ -316,49 +320,13 @@ static void addShadow(NSImageView *__unsafe_unretained 
imageView)
     ]];
 }
 
-- (void)presentAudioLibraryItem:(id<VLCMediaLibraryItemProtocol>)libraryItem
-{
-    self.librarySegmentType = VLCLibraryMusicSegmentType;
-    [(VLCLibraryAudioViewController *)self.librarySegmentViewController 
presentLibraryItem:libraryItem];
-}
-
-- (void)presentVideoLibraryItem:(id<VLCMediaLibraryItemProtocol>)libraryItem
-{
-    self.librarySegmentType = VLCLibraryVideoSegmentType;
-    [(VLCLibraryVideoViewController *)self.librarySegmentViewController 
presentLibraryItem:libraryItem];
-}
-
-- (void)presentGroupLibraryItem:(id<VLCMediaLibraryItemProtocol>)libraryItem
-{
-    self.librarySegmentType = VLCLibraryGroupsSegmentType;
-    [(VLCLibraryGroupsViewController *)self.librarySegmentViewController 
presentGroup:libraryItem];
-}
-
 - (void)presentLibraryItem:(id<VLCMediaLibraryItemProtocol>)libraryItem
 {
-    const BOOL isAudioGroup = [libraryItem 
isKindOfClass:VLCMediaLibraryAlbum.class] ||
-                              [libraryItem 
isKindOfClass:VLCMediaLibraryArtist.class] ||
-                              [libraryItem 
isKindOfClass:VLCMediaLibraryGenre.class];
-
-    if (isAudioGroup) {
-        [self presentAudioLibraryItem:libraryItem];
-        return;
-    } else if ([libraryItem isKindOfClass:VLCMediaLibraryGroup.class]) {
-        [self presentGroupLibraryItem:libraryItem];
-        return;
+    VLCLibrarySegment * const segment = [VLCLibrarySegment 
segmentForLibraryItem:libraryItem];
+    [self applySegmentView:segment];
+    if ([self.librarySegmentViewController 
conformsToProtocol:@protocol(VLCLibraryItemPresentingCapable)]) {
+        
[(VLCLibraryAbstractSegmentViewController<VLCLibraryItemPresentingCapable> 
*)self.librarySegmentViewController presentLibraryItem:libraryItem];
     }
-
-    VLCMediaLibraryMediaItem * const mediaItem = (VLCMediaLibraryMediaItem 
*)libraryItem;
-    const BOOL validMediaItem = mediaItem != nil;
-    if (validMediaItem && mediaItem.mediaType == VLC_ML_MEDIA_TYPE_AUDIO) {
-        [self presentAudioLibraryItem:libraryItem];
-        return;
-    } else if (validMediaItem && mediaItem.mediaType == 
VLC_ML_MEDIA_TYPE_VIDEO) {
-        [self presentVideoLibraryItem:libraryItem];
-        return;
-    }
-
-    NSLog(@"Unknown kind of library item provided, cannot present library view 
for it: %@", libraryItem.displayString);
 }
 
 - (void)goToLocalFolderMrl:(NSString *)mrl


=====================================
modules/gui/macosx/library/audio-library/VLCLibraryAudioViewController.h
=====================================
@@ -24,6 +24,7 @@
 
 #import "library/VLCLibrarySegment.h"
 #import "library/VLCLibraryAbstractMediaLibrarySegmentViewController.h"
+#import "library/VLCLibraryItemPresentingCapable.h"
 
 @class VLCLibraryAudioDataSource;
 @class VLCLibraryAudioGroupDataSource;
@@ -34,7 +35,7 @@
 
 NS_ASSUME_NONNULL_BEGIN
 
-@interface VLCLibraryAudioViewController : 
VLCLibraryAbstractMediaLibrarySegmentViewController
+@interface VLCLibraryAudioViewController : 
VLCLibraryAbstractMediaLibrarySegmentViewController<VLCLibraryItemPresentingCapable>
 
 @property (readonly, weak) NSView *audioLibraryView;
 @property (readonly, weak) NSSplitView *audioLibrarySplitView;
@@ -59,7 +60,6 @@ NS_ASSUME_NONNULL_BEGIN
 
 - (void)presentAudioView;
 - (void)reloadData;
-- (void)presentLibraryItem:(id<VLCMediaLibraryItemProtocol>)libraryItem;
 
 @end
 


=====================================
modules/gui/macosx/library/groups-library/VLCLibraryGroupsViewController.h
=====================================
@@ -23,6 +23,7 @@
 #import <Cocoa/Cocoa.h>
 
 #import "library/VLCLibraryAbstractMediaLibrarySegmentViewController.h"
+#import "library/VLCLibraryItemPresentingCapable.h"
 
 NS_ASSUME_NONNULL_BEGIN
 
@@ -34,7 +35,7 @@ NS_ASSUME_NONNULL_BEGIN
 @class VLCLibraryWindow;
 @class VLCMediaLibraryGroup;
 
-@interface VLCLibraryGroupsViewController : 
VLCLibraryAbstractMediaLibrarySegmentViewController<NSSplitViewDelegate>
+@interface VLCLibraryGroupsViewController : 
VLCLibraryAbstractMediaLibrarySegmentViewController<NSSplitViewDelegate, 
VLCLibraryItemPresentingCapable>
 
 @property (readonly) NSScrollView *collectionViewScrollView;
 @property (readonly) VLCLibraryCollectionView *collectionView;
@@ -51,7 +52,6 @@ NS_ASSUME_NONNULL_BEGIN
 - (instancetype)initWithLibraryWindow:(VLCLibraryWindow *)libraryWindow;
 
 - (void)presentGroupsView;
-- (void)presentGroup:(VLCMediaLibraryGroup *)group;
 
 @end
 


=====================================
modules/gui/macosx/library/groups-library/VLCLibraryGroupsViewController.m
=====================================
@@ -254,19 +254,19 @@
     }
 }
 
-- (void)presentGroup:(VLCMediaLibraryGroup *)group
+- (void)presentLibraryItem:(id<VLCMediaLibraryItemProtocol>)libraryItem
 {
     [self presentGroupsView];
     
     const VLCLibraryViewModeSegment viewModeSegment =
         
VLCLibraryWindowPersistentPreferences.sharedInstance.groupsLibraryViewMode;
     if (viewModeSegment == VLCLibraryGridViewModeSegment) {
-        NSIndexPath * const groupIndexPath = [self.dataSource 
indexPathForLibraryItem:group];
+        NSIndexPath * const groupIndexPath = [self.dataSource 
indexPathForLibraryItem:libraryItem];
         NSSet<NSIndexPath *> * const groupIndexPathSet = [NSSet 
setWithObject:groupIndexPath];
         [self.collectionView scrollToItemsAtIndexPaths:groupIndexPathSet
                                         
scrollPosition:NSCollectionViewScrollPositionTop];
     } else {
-        const NSInteger groupRow = [self.dataSource rowForLibraryItem:group];
+        const NSInteger groupRow = [self.dataSource 
rowForLibraryItem:libraryItem];
         [self.groupsTableView selectRowIndexes:[NSIndexSet 
indexSetWithIndex:groupRow]
                           byExtendingSelection:NO];
         [self.groupsTableView scrollRowToVisible:groupRow];


=====================================
modules/gui/macosx/library/home-library/VLCLibraryHomeViewStackViewController.h
=====================================
@@ -22,6 +22,8 @@
 
 #import <Cocoa/Cocoa.h>
 
+#import "library/VLCLibraryItemPresentingCapable.h"
+
 NS_ASSUME_NONNULL_BEGIN
 
 @class VLCLibraryHeroView;
@@ -30,7 +32,7 @@ NS_ASSUME_NONNULL_BEGIN
 @class VLCLibraryHomeViewVideoCarouselContainerView;
 @protocol VLCMediaLibraryItemProtocol;
 
-@interface VLCLibraryHomeViewStackViewController : NSObject
+@interface VLCLibraryHomeViewStackViewController : 
NSObject<VLCLibraryItemPresentingCapable>
 
 @property (readwrite, assign, nonatomic) NSSize collectionViewItemSize;
 @property (readwrite, assign, nonatomic) CGFloat 
collectionViewMinimumLineSpacing;
@@ -48,7 +50,6 @@ NS_ASSUME_NONNULL_BEGIN
 - (void)reloadData;
 - (void)connectContainers;
 - (void)disconnectContainers;
-- (void)presentLibraryItem:(id<VLCMediaLibraryItemProtocol>)libraryItem;
 
 @end
 


=====================================
modules/gui/macosx/library/home-library/VLCLibraryHomeViewVideoContainerView.h
=====================================
@@ -22,6 +22,7 @@
 
 #import <Cocoa/Cocoa.h>
 
+#import "library/VLCLibraryItemPresentingCapable.h"
 #import "library/home-library/VLCLibraryHomeViewContainerView.h"
 #import "library/video-library/VLCLibraryVideoGroupDescriptor.h"
 
@@ -29,14 +30,13 @@
 
 NS_ASSUME_NONNULL_BEGIN
 
-@protocol VLCLibraryHomeViewVideoContainerView 
<VLCLibraryHomeViewContainerView>
+@protocol VLCLibraryHomeViewVideoContainerView 
<VLCLibraryHomeViewContainerView, VLCLibraryItemPresentingCapable>
 
 @property (readonly) VLCLibraryVideoCollectionViewGroupDescriptor 
*groupDescriptor;
 @property (readwrite, assign, nonatomic) VLCMediaLibraryParentGroupType 
videoGroup;
 @property (readonly) VLCLibraryHomeViewVideoContainerViewDataSource 
*dataSource;
 
 - (void)setVideoGroup:(VLCMediaLibraryParentGroupType)group;
-- (void)presentLibraryItem:(id<VLCMediaLibraryItemProtocol>)libraryItem;
 
 @end
 


=====================================
modules/gui/macosx/library/video-library/VLCLibraryVideoViewController.h
=====================================
@@ -23,6 +23,7 @@
 #import <Cocoa/Cocoa.h>
 
 #import "library/VLCLibraryAbstractMediaLibrarySegmentViewController.h"
+#import "library/VLCLibraryItemPresentingCapable.h"
 
 @class VLCLibraryCollectionView;
 @class VLCLibraryWindow;
@@ -34,8 +35,7 @@
 NS_ASSUME_NONNULL_BEGIN
 
 // Controller for the video library views
-
-@interface VLCLibraryVideoViewController : 
VLCLibraryAbstractMediaLibrarySegmentViewController
+@interface VLCLibraryVideoViewController : 
VLCLibraryAbstractMediaLibrarySegmentViewController<VLCLibraryItemPresentingCapable>
 
 @property (readonly, weak) NSView *videoLibraryView;
 @property (readonly, weak) NSSplitView *videoLibrarySplitView;



View it on GitLab: 
https://code.videolan.org/videolan/vlc/-/compare/3d0e73a0e9c2e3f7b66f52a159e41233dcb866ba...0c06c384bc443ba37aae11a96e28fd6abf821b96

-- 
View it on GitLab: 
https://code.videolan.org/videolan/vlc/-/compare/3d0e73a0e9c2e3f7b66f52a159e41233dcb866ba...0c06c384bc443ba37aae11a96e28fd6abf821b96
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

Reply via email to