[vlc-commits] macosx/playlist: expose export feature

Felix Paul Kühne git at videolan.org
Thu Apr 11 19:26:42 CEST 2019


vlc | branch: master | Felix Paul Kühne <felix at feepk.net> | Thu Apr 11 18:35:29 2019 +0200| [45111cc13cc63a259e577328dca9771ff676f762] | committer: Felix Paul Kühne

macosx/playlist: expose export feature

> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=45111cc13cc63a259e577328dca9771ff676f762
---

 .../gui/macosx/playlist/VLCPlaylistController.h    | 22 ++++++++++++
 .../gui/macosx/playlist/VLCPlaylistController.m    | 39 ++++++++++++++++++++++
 2 files changed, 61 insertions(+)

diff --git a/modules/gui/macosx/playlist/VLCPlaylistController.h b/modules/gui/macosx/playlist/VLCPlaylistController.h
index 3b878ddec6..79b8b9e391 100644
--- a/modules/gui/macosx/playlist/VLCPlaylistController.h
+++ b/modules/gui/macosx/playlist/VLCPlaylistController.h
@@ -28,6 +28,7 @@ NS_ASSUME_NONNULL_BEGIN
 @class VLCPlaylistModel;
 @class VLCPlaylistDataSource;
 @class VLCPlayerController;
+ at class VLCPlaylistExportModuleDescription;
 
 extern NSString *VLCPlaybackOrderChanged;
 extern NSString *VLCPlaybackRepeatChanged;
@@ -168,6 +169,27 @@ extern NSString *VLCPlaylistCurrentItemChanged;
  */
 - (void)resumePlayback;
 
+/**
+ * returns an array of module descriptions available for export a playlist. Content may vary
+ */
+ at property (readonly) NSArray <VLCPlaylistExportModuleDescription *> *availablePlaylistExportModules;
+
+/**
+ * exports the playlist owned by the controller to a given file using the provided module
+ * @param path the file path to store the file in
+ * @param exportModule the VLCPlaylistExportModuleDescription for the respective export module
+ * @return VLC_SUCCESS or an error
+ */
+- (int)exportPlaylistToPath:(NSString *)path exportModule:(VLCPlaylistExportModuleDescription *)exportModule;
+
+ at end
+
+ at interface VLCPlaylistExportModuleDescription : NSObject
+
+ at property (readwrite, retain) NSString *humanReadableName;
+ at property (readwrite, retain) NSString *fileExtension;
+ at property (readwrite, retain) NSString *moduleName;
+
 @end
 
 NS_ASSUME_NONNULL_END
diff --git a/modules/gui/macosx/playlist/VLCPlaylistController.m b/modules/gui/macosx/playlist/VLCPlaylistController.m
index 887b761557..076bb6d39a 100644
--- a/modules/gui/macosx/playlist/VLCPlaylistController.m
+++ b/modules/gui/macosx/playlist/VLCPlaylistController.m
@@ -529,4 +529,43 @@ static const struct vlc_playlist_callbacks playlist_callbacks = {
     return p_input;
 }
 
+- (NSArray<VLCPlaylistExportModuleDescription *> *)availablePlaylistExportModules
+{
+    VLCPlaylistExportModuleDescription *xspf = [[VLCPlaylistExportModuleDescription alloc] init];
+    xspf.humanReadableName = _NS("XSPF playlist");
+    xspf.fileExtension = @"xspf";
+    xspf.moduleName = @"export-xspf";
+
+    VLCPlaylistExportModuleDescription *m3u = [[VLCPlaylistExportModuleDescription alloc] init];
+    m3u.humanReadableName = _NS("M3U playlist");
+    m3u.fileExtension = @"m3u";
+    m3u.moduleName = @"export-m3u";
+
+    VLCPlaylistExportModuleDescription *m3u8 = [[VLCPlaylistExportModuleDescription alloc] init];
+    m3u8.humanReadableName = _NS("M3U8 playlist");
+    m3u8.fileExtension = @"m3u8";
+    m3u8.moduleName = @"export-m3u8";
+
+    VLCPlaylistExportModuleDescription *html = [[VLCPlaylistExportModuleDescription alloc] init];
+    html.humanReadableName = _NS("HTML playlist");
+    html.fileExtension = @"html";
+    html.moduleName = @"export-html";
+
+    return @[xspf, m3u, m3u8, html];
+}
+
+- (int)exportPlaylistToPath:(NSString *)path exportModule:(VLCPlaylistExportModuleDescription *)exportModule
+{
+    vlc_playlist_Lock(_p_playlist);
+    int ret = vlc_playlist_Export(_p_playlist,
+                                  path.fileSystemRepresentation,
+                                  exportModule.moduleName.UTF8String);
+    vlc_playlist_Unlock(_p_playlist);
+    return ret;
+}
+
+ at end
+
+ at implementation VLCPlaylistExportModuleDescription
+
 @end



More information about the vlc-commits mailing list