From 274aa4d39a688858a438824ea7a7f951b2e98802 Mon Sep 17 00:00:00 2001 From: Nikhil Tanwar <2002nikhiltanwar@gmail.com> Date: Wed, 2 Aug 2023 17:03:51 +0530 Subject: [PATCH] Add "Open Folder" context menu option Added an option to open the zim's location in the OS's file manager --- resources/i18n/en.json | 5 ++++- src/contentmanager.cpp | 18 ++++++++++++++++++ 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/resources/i18n/en.json b/resources/i18n/en.json index 60b02537..a9624ec1 100644 --- a/resources/i18n/en.json +++ b/resources/i18n/en.json @@ -148,5 +148,8 @@ "open-book": "Open book", "download-book": "Download book", "pause-download": "Pause download", - "resume-download": "Resume download" + "resume-download": "Resume download", + "open-folder": "Open folder", + "couldnt-open-location": "Couldn't open location", + "couldnt-open-location-text": "Kiwix is not able to open folder {{FOLDER}}" } diff --git a/src/contentmanager.cpp b/src/contentmanager.cpp index a465b9b2..5be499b8 100644 --- a/src/contentmanager.cpp +++ b/src/contentmanager.cpp @@ -21,6 +21,7 @@ #include "kiwixconfirmbox.h" #include #include "contentmanagerheader.h" +#include ContentManager::ContentManager(Library* library, kiwix::Downloader* downloader, QObject *parent) : QObject(parent), @@ -99,6 +100,7 @@ void ContentManager::onCustomContextMenu(const QPoint &point) QAction menuPauseBook(gt("pause-download"), this); QAction menuResumeBook(gt("resume-download"), this); QAction menuCancelBook(gt("cancel-download"), this); + QAction menuOpenFolder(gt("open-folder"), this); if (bookNode->isDownloading()) { if (bookNode->getDownloadInfo().paused) { @@ -110,8 +112,24 @@ void ContentManager::onCustomContextMenu(const QPoint &point) } else { try { const auto book = KiwixApp::instance()->getLibrary()->getBookById(id); + auto bookPath = QString::fromStdString(book.getPath()); contextMenu.addAction(&menuOpenBook); contextMenu.addAction(&menuDeleteBook); + contextMenu.addAction(&menuOpenFolder); + connect(&menuOpenFolder, &QAction::triggered, [=]() { + QFileInfo fileInfo(bookPath); + QDir bookDir = fileInfo.absoluteDir(); + bool dirOpen = bookDir.exists() && bookDir.isReadable() && QDesktopServices::openUrl(bookDir.absolutePath()); + if (!dirOpen) { + QString failedText = gt("couldnt-open-location-text"); + failedText = failedText.replace("{{FOLDER}}", "" + bookDir.absolutePath() + ""); + KiwixConfirmBox *dialog = new KiwixConfirmBox(gt("couldnt-open-location"), failedText, true, mp_view); + dialog->show(); + connect(dialog, &KiwixConfirmBox::okClicked, [=]() { + dialog->deleteLater(); + }); + } + }); } catch (...) { contextMenu.addAction(&menuDownloadBook); }