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

bl3nder bl3nderb at aol.com
Sat Oct 12 18:21:19 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()
---
 modules/gui/qt4/dialogs_provider.cpp |   20 ++++++++++++++++----
 modules/gui/qt4/dialogs_provider.hpp |    4 +++-
 modules/gui/qt4/menus.cpp            |    3 ++-
 modules/gui/qt4/recents.cpp          |   15 +++++++++++++++
 modules/gui/qt4/recents.hpp          |    4 ++--
 5 files changed, 38 insertions(+), 8 deletions(-)

diff --git a/modules/gui/qt4/dialogs_provider.cpp b/modules/gui/qt4/dialogs_provider.cpp
index 524f476..fc7411a 100644
--- a/modules/gui/qt4/dialogs_provider.cpp
+++ b/modules/gui/qt4/dialogs_provider.cpp
@@ -81,7 +81,7 @@ DialogsProvider::DialogsProvider( intf_thread_t *_p_intf ) :
              this, menuUpdateAction( QObject *) );
 
     SDMapper = new QSignalMapper();
-    CONNECT( SDMapper, mapped (QString), this, SDMenuAction( QString ) );
+    CONNECT( SDMapper, mapped (QString), this, SDMenuAction( QString ) ); 
 
     new DialogHandler (p_intf, this );
 }
@@ -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,24 @@ 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);
+	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..aa789be 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..6388901 100755
--- a/modules/gui/qt4/recents.cpp
+++ b/modules/gui/qt4/recents.cpp
@@ -149,3 +149,18 @@ 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 (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..29805a3 100644
--- a/modules/gui/qt4/recents.hpp
+++ b/modules/gui/qt4/recents.hpp
@@ -52,9 +52,9 @@ public:
 
     void addRecent( const QString & );
     QStringList recents();
-
+    playlist_item_t *toPlaylist(int length);
+   
     QSignalMapper *signalMapper;
-
 private:
     RecentsMRL( intf_thread_t* _p_intf );
     virtual ~RecentsMRL();
-- 
1.7.9.5




More information about the vlc-devel mailing list