[vlc-devel] [PATCH] Adding "save to playlist" menu item in submenu Recents.

bl3nder bl3nderb at aol.com
Sat Oct 12 23:24:18 CEST 2013


adding RecentsMRL::toPlaylist()
refactoring functions to eliminate repeating code
refactoring public DialogProvider::saveAPlaylist() to private DialogProvider::saveAPlaylist(playlist_t *p_playlist, playlist_item_t *p_node)
and making new DialogProvider::savePlayingToPlaylist() and DialogProvider::saveRecentsToPlaylist()

this commit includes fixes related to Jean-Baptiste Kempf code review.
 - fixing whitespace problem
 - RecentsMRL::toPlaylist null handling
---
 modules/gui/qt4/dialogs_provider.cpp |   25 ++++++++++++++++++++++---
 modules/gui/qt4/dialogs_provider.hpp |    4 +++-
 modules/gui/qt4/menus.cpp            |    3 ++-
 modules/gui/qt4/recents.cpp          |   17 +++++++++++++++++
 modules/gui/qt4/recents.hpp          |    2 +-
 5 files changed, 45 insertions(+), 6 deletions(-)

diff --git a/modules/gui/qt4/dialogs_provider.cpp b/modules/gui/qt4/dialogs_provider.cpp
index 524f476..cc68160 100644
--- a/modules/gui/qt4/dialogs_provider.cpp
+++ b/modules/gui/qt4/dialogs_provider.cpp
@@ -580,7 +580,7 @@ void DialogsProvider::openAPlaylist()
     }
 }
 
-void DialogsProvider::saveAPlaylist()
+void DialogsProvider::saveAPlaylist(playlist_t *p_playlist, playlist_item_t *p_node)
 {
     static const struct
     {
@@ -646,12 +646,31 @@ void DialogsProvider::saveAPlaylist()
 
     if ( psz_selected_module )
     {
-        playlist_Export( THEPL, qtu( toNativeSeparators( file ) ),
-                         THEPL->p_playing, psz_selected_module );
+        playlist_Export( p_playlist, qtu( toNativeSeparators( file ) ),
+                         p_node, psz_selected_module );
         getSettings()->setValue( "last-playlist-ext", psz_last_playlist_ext );
     }
 }
 
+void DialogsProvider::savePlayingToPlaylist()
+{
+    saveAPlaylist(THEPL, THEPL->p_playing);
+}
+
+void DialogsProvider::saveRecentsToPlaylist()
+{
+    playlist_item_t *p_node_recents = RecentsMRL::getInstance(p_intf)->toPlaylist(0);
+
+    if (p_node_recents == NULL)
+    {
+        msg_Warn(p_intf, "cannot create playlist from recents");
+        return;
+    }
+
+    saveAPlaylist(THEPL, p_node_recents);
+    playlist_NodeDelete(THEPL, p_node_recents, true, false);
+}
+
 /****************************************************************************
  * Sout emulation
  ****************************************************************************/
diff --git a/modules/gui/qt4/dialogs_provider.hpp b/modules/gui/qt4/dialogs_provider.hpp
index ef23c4b..00bd37c 100644
--- a/modules/gui/qt4/dialogs_provider.hpp
+++ b/modules/gui/qt4/dialogs_provider.hpp
@@ -111,6 +111,7 @@ private:
 
     void openDialog( int );
     void addFromSimple( bool, bool );
+    void saveAPlaylist(playlist_t *p_playlist, playlist_item_t *p_node);
 
 public slots:
     void playMRL( const QString & );
@@ -161,7 +162,8 @@ public slots:
     void openAndTranscodingDialogs();
 
     void openAPlaylist();
-    void saveAPlaylist();
+    void savePlayingToPlaylist();
+    void saveRecentsToPlaylist();
 
     void loadSubtitlesFile();
 
diff --git a/modules/gui/qt4/menus.cpp b/modules/gui/qt4/menus.cpp
index 6e10bcb..cace7e8 100644
--- a/modules/gui/qt4/menus.cpp
+++ b/modules/gui/qt4/menus.cpp
@@ -374,7 +374,7 @@ QMenu *VLCMenuBar::FileMenu( intf_thread_t *p_intf, QWidget *parent, MainInterfa
     }
     menu->addSeparator();
 
-    addDPStaticEntry( menu, qtr( I_PL_SAVE ), "", SLOT( saveAPlaylist() ),
+    addDPStaticEntry( menu, qtr( I_PL_SAVE ), "", SLOT( savePlayingToPlaylist() ),
         "Ctrl+Y" );
 
 #ifdef ENABLE_SOUT
@@ -1624,6 +1624,7 @@ void VLCMenuBar::updateRecents( intf_thread_t *p_intf )
 
             recentsMenu->addSeparator();
             recentsMenu->addAction( qtr("&Clear"), rmrl, SLOT( clear() ) );
+            addDPStaticEntry( recentsMenu, qtr("&Save To Playlist"), "", SLOT( saveRecentsToPlaylist() ), "" );
             recentsMenu->setEnabled( true );
         }
     }
diff --git a/modules/gui/qt4/recents.cpp b/modules/gui/qt4/recents.cpp
index 75839e8..316b6ee 100755
--- a/modules/gui/qt4/recents.cpp
+++ b/modules/gui/qt4/recents.cpp
@@ -149,3 +149,20 @@ void RecentsMRL::save()
     getSettings()->setValue( "RecentsMRL/list", *stack );
 }
 
+playlist_item_t *RecentsMRL::toPlaylist(int length)
+{
+    playlist_item_t *p_node_recent = playlist_NodeCreate(THEPL, _("Recently Played"), THEPL->p_root, PLAYLIST_END, PLAYLIST_RO_FLAG, NULL);
+
+    if ( p_node_recent == NULL )  return NULL;
+
+    if (length == 0 || stack->count() < length)
+        length = stack->count();
+
+    for (int i = 0; i < length; i++)
+    {
+        input_item_t *p_input = input_item_New(qtu(stack->at(i)), NULL);
+        playlist_NodeAddInput(THEPL, p_input, p_node_recent, PLAYLIST_APPEND, PLAYLIST_END, false);
+    }
+
+    return p_node_recent;
+}
diff --git a/modules/gui/qt4/recents.hpp b/modules/gui/qt4/recents.hpp
index 30bd7c9..ebcf747 100644
--- a/modules/gui/qt4/recents.hpp
+++ b/modules/gui/qt4/recents.hpp
@@ -52,7 +52,7 @@ public:
 
     void addRecent( const QString & );
     QStringList recents();
-
+    playlist_item_t *toPlaylist(int length);
     QSignalMapper *signalMapper;
 
 private:
-- 
1.7.9.5




More information about the vlc-devel mailing list