]> cloud.milkyroute.net Git - dolphin.git/commitdiff
Make it possible to open archives via the command line
authorFrank Reininghaus <frank78ac@googlemail.com>
Sun, 31 Aug 2014 22:06:18 +0000 (00:06 +0200)
committerFrank Reininghaus <frank78ac@googlemail.com>
Sun, 31 Aug 2014 22:06:18 +0000 (00:06 +0200)
This used to work before afcf8961f6666a912e0e6e5072a000837f7cf6aa (only
if "Open archives as folder" was enabled in the settings though). The
reason why this commit broke it is that the mime type of a file is not
determined automatically any more before asking
KProtocolManager::protocolForArchiveMimetype for the correct protocol,
so the determination of the protocol may fail.

Keeping the isMimeTypeKnown() check in DolphinView::openItemAsFolderUrl
still makes sense, because it prevents GUI blocking if the user tries
to open many files at the same time.

Therefore, we now call determineMimeType() in
DolphinViewContainer::slotUrlIsFileError(const KUrl&) and then try to
determine the correct protocol and use it to open the archive in the
view, rather than hoping that slotItemActivated(item) will do the right
thing.

BUG: 333078
REVIEW: 119877
FIXED-IN: 4.14.1

src/dolphinviewcontainer.cpp

index 93af3e8fbc547d128ab8f6750177cf75149558b1..a11ba4202c637df6689169a62296aa73427a7c12 100644 (file)
@@ -463,7 +463,16 @@ void DolphinViewContainer::slotDirectoryLoadingCanceled()
 void DolphinViewContainer::slotUrlIsFileError(const KUrl& url)
 {
     const KFileItem item(KFileItem::Unknown, KFileItem::Unknown, url);
-    slotItemActivated(item);
+
+    // Find out if the file can be opened in the view (for example, this is the
+    // case if the file is an archive). The mime type must be known for that.
+    item.determineMimeType();
+    const KUrl& folderUrl = DolphinView::openItemAsFolderUrl(item, true);
+    if (!folderUrl.isEmpty()) {
+        m_view->setUrl(folderUrl);
+    } else {
+        slotItemActivated(item);
+    }
 }
 
 void DolphinViewContainer::slotItemActivated(const KFileItem& item)