diff --git a/resources/i18n/en.json b/resources/i18n/en.json index 60b02537..c84e9bdf 100644 --- a/resources/i18n/en.json +++ b/resources/i18n/en.json @@ -148,5 +148,6 @@ "open-book": "Open book", "download-book": "Download book", "pause-download": "Pause download", - "resume-download": "Resume download" + "resume-download": "Resume download", + "open-folder": "Open folder" } diff --git a/src/contentmanager.cpp b/src/contentmanager.cpp index 9f71b445..2bc6dba8 100644 --- a/src/contentmanager.cpp +++ b/src/contentmanager.cpp @@ -22,6 +22,7 @@ #include "kiwixconfirmbox.h" #include #include "contentmanagerheader.h" +#include ContentManager::ContentManager(Library* library, kiwix::Downloader* downloader, QObject *parent) : QObject(parent), @@ -89,6 +90,7 @@ void ContentManager::onCustomContextMenu(const QPoint &point) QMenu contextMenu("optionsMenu", mp_view->getView()); auto bookNode = static_cast(index.internalPointer()); const auto id = bookNode->getBookId(); + QString bookPath = ""; QAction menuDeleteBook(gt("delete-book"), this); QAction menuOpenBook(gt("open-book"), this); @@ -96,6 +98,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) { @@ -107,8 +110,10 @@ void ContentManager::onCustomContextMenu(const QPoint &point) } else { try { const auto book = KiwixApp::instance()->getLibrary()->getBookById(id); + bookPath = QString::fromStdString(book.getPath()); contextMenu.addAction(&menuOpenBook); contextMenu.addAction(&menuDeleteBook); + contextMenu.addAction(&menuOpenFolder); } catch (...) { contextMenu.addAction(&menuDownloadBook); } @@ -132,6 +137,12 @@ void ContentManager::onCustomContextMenu(const QPoint &point) connect(&menuResumeBook, &QAction::triggered, [=]() { resumeBook(id, index); }); + connect(&menuOpenFolder, &QAction::triggered, [=]() { + if (bookPath != "") { + QFileInfo fileInfo(bookPath); + QDesktopServices::openUrl(fileInfo.absoluteDir().absolutePath()); + } + }); if (index.isValid()) { contextMenu.exec(mp_view->getView()->viewport()->mapToGlobal(point));