]> git.sesse.net Git - vlc/commitdiff
Qt4: simplify and improve playlist item folder exploration
authorRémi Denis-Courmont <remi@remlab.net>
Sun, 25 Sep 2011 12:48:34 +0000 (15:48 +0300)
committerRémi Denis-Courmont <remi@remlab.net>
Sun, 25 Sep 2011 12:50:00 +0000 (15:50 +0300)
Unfortunately, there is currently no way to determine whether the
MRL scheme uses file paths (e.g. file, dir, vdr, zip...) or not, so
we always try.

Anyway, the folder browsing menu item should not be visible at all when
the item is not a local file. So there is no need to deal with that
failure care here.

modules/gui/qt4/components/playlist/playlist_model.cpp

index 1985a2d208ca2a9e8c2e72f61280b45f9ec9e32a..7b36a0669495d075fbc3cc2b62965a9442f06a77 100644 (file)
@@ -1045,39 +1045,29 @@ void PLModel::popupSave()
 
 void PLModel::popupExplore()
 {
+    char *uri = NULL, *path = NULL;
+
     PL_LOCK;
     playlist_item_t *p_item = playlist_ItemGetById( p_playlist, i_popup_item );
     if( p_item )
     {
         input_item_t *p_input = p_item->p_input;
-        char *psz_meta = input_item_GetURI( p_input );
-        PL_UNLOCK;
-        if( psz_meta )
-        {
-            const char *psz_access;
-            const char *psz_demux;
-            char  *psz_path;
-            input_SplitMRL( &psz_access, &psz_demux, &psz_path, psz_meta );
-
-            if( !EMPTY_STR( psz_access ) && (
-                   !strncasecmp( psz_access, "file", 4 ) ||
-                   !strncasecmp( psz_access, "dire", 4 ) ))
-            {
-#if defined( WIN32 ) || defined( __OS2__ )
-                /* Qt openURL doesn't know to open files that starts with a / or \ */
-                if( psz_path[0] == '/' || psz_path[0] == '\\'  )
-                    psz_path++;
-#endif
+        uri = input_item_GetURI( p_input );
+    }
+    PL_UNLOCK;
 
-                QFileInfo info( qfu( decode_URI( psz_path ) ) );
-                QDesktopServices::openUrl(
-                        QUrl::fromLocalFile( info.absolutePath() ) );
-            }
-            free( psz_meta );
-        }
+    if( uri != NULL )
+    {
+        path = make_path( uri );
+        free( uri );
     }
-    else
-        PL_UNLOCK;
+    if( path == NULL )
+        return;
+
+    QFileInfo info( qfu( path ) );
+    free( path );
+
+    QDesktopServices::openUrl( QUrl::fromLocalFile( info.absolutePath() ) );
 }
 
 void PLModel::popupAddNode()