]> git.sesse.net Git - vlc/blobdiff - modules/gui/qt4/dialogs_provider.cpp
New recently played menu.
[vlc] / modules / gui / qt4 / dialogs_provider.cpp
index e3be94e952214e582e6392ffe2eb54ffcd3d09b3..53970ecf119de31146d5e2b4eeedb9e6faf5c1ac 100644 (file)
@@ -37,6 +37,7 @@
 #include "menus.hpp"
 #include <vlc_intf_strings.h>
 #include "input_manager.hpp"
+#include "recents.hpp"
 
 /* The dialogs */
 #include "dialogs/playlist.hpp"
@@ -58,8 +59,6 @@ DialogsProvider::DialogsProvider( intf_thread_t *_p_intf ) :
                                   QObject( NULL ), p_intf( _p_intf )
 {
     b_isDying = false;
-    fixed_timer = new QTimer( this );
-    fixed_timer->start( 150 /* milliseconds */ );
 
     menusMapper = new QSignalMapper();
     CONNECT( menusMapper, mapped(QObject *), this, menuAction( QObject *) );
@@ -85,7 +84,6 @@ DialogsProvider::~DialogsProvider()
     UpdateDialog::killInstance();
 #endif
 
-    fixed_timer->stop();
     delete menusMapper;
     delete menusUpdateMapper;
     delete SDMapper;
@@ -370,8 +368,8 @@ QStringList DialogsProvider::showSimpleOpen( QString help,
     fileTypes.replace(QString(";*"), QString(" *"));
 
     return QFileDialog::getOpenFileNames( NULL,
-        help.isNull() ? qfu(I_OP_SEL_FILES ) : help,
-        path.isNull() ? qfu( p_intf->p_sys->psz_filepath ) : path,
+        help.isEmpty() ? qfu(I_OP_SEL_FILES ) : help,
+        path.isEmpty() ? qfu( p_intf->p_sys->psz_filepath ) : path,
         fileTypes );
 }
 
@@ -386,13 +384,14 @@ void DialogsProvider::addFromSimple( bool pl, bool go)
     int i = 0;
     foreach( QString file, files )
     {
-        const char * psz_utf8 = qtu( toNativeSeparators( file ) );
-        playlist_Add( THEPL, psz_utf8, NULL,
+        playlist_Add( THEPL, qtu( toNativeSeparators( file ) ), NULL,
                       go ? ( PLAYLIST_APPEND | ( i ? 0 : PLAYLIST_GO ) |
                                                ( i ? PLAYLIST_PREPARSE : 0 ) )
                          : ( PLAYLIST_APPEND | PLAYLIST_PREPARSE ),
                       PLAYLIST_END,
                       pl ? true : false, false );
+        RecentsMRL::getInstance( p_intf )->addRecent(
+                toNativeSeparators( file ) );
         i++;
     }
 }
@@ -424,14 +423,17 @@ static void openDirectory( intf_thread_t *p_intf, bool pl, bool go )
 
     if (!dir.isEmpty() )
     {
-        input_item_t *p_input = input_item_NewExt( THEPL,
-                              qtu( "directory://" + toNativeSeparators(dir) ),
+        QString mrl = dir.endsWith( "VIDEO_TS", Qt::CaseInsensitive )
+            ? "dvd://" : "directory://" + toNativeSeparators( dir );
+        msg_Dbg( p_intf, "Directory opening: %s", qtu( dir ) );
+        input_item_t *p_input = input_item_NewExt( THEPL, qtu( mrl ),
                               NULL, 0, NULL, -1 );
 
         /* FIXME: playlist_AddInput() can fail */
         playlist_AddInput( THEPL, p_input,
                        go ? ( PLAYLIST_APPEND | PLAYLIST_GO ) : PLAYLIST_APPEND,
                        PLAYLIST_END, pl, pl_Unlocked );
+        RecentsMRL::getInstance( p_intf )->addRecent( mrl );
         if( !go )
             input_Read( THEPL, p_input, true );
         vlc_gc_decref( p_input );
@@ -530,6 +532,7 @@ void DialogsProvider::streamingDialog( QWidget *parent, QString mrl,
         playlist_AddExt( THEPL, qtu( mrl ), "Streaming",
                          PLAYLIST_APPEND | PLAYLIST_GO, PLAYLIST_END,
                         -1, &psz_option, 1, true, pl_Unlocked );
+        RecentsMRL::getInstance( p_intf )->addRecent( mrl );
     }
 }
 
@@ -642,3 +645,17 @@ void DialogsProvider::loadSubtitlesFile()
                       qtu( qsFile ) );
     }
 }
+
+/**
+ * Play the MRL contained in the Recently played menu.
+ **/
+void DialogsProvider::playMRL( const QString &mrl )
+{
+    input_item_t *p_input = input_item_New( p_intf, 
+            qtu( mrl ), NULL );
+    playlist_AddInput( THEPL, p_input, PLAYLIST_GO,
+            PLAYLIST_END, true, pl_Unlocked );
+    vlc_gc_decref( p_input );
+
+    RecentsMRL::getInstance( p_intf )->addRecent( mrl );
+}