From 2eb90bda0b9097431f5332d8c70d782ade9c7c4b Mon Sep 17 00:00:00 2001 From: Nikhil Tanwar <2002nikhiltanwar@gmail.com> Date: Tue, 1 Aug 2023 21:55:42 +0530 Subject: [PATCH 1/4] Show correct context menu options in All files view Earlier, context menu showed "Open"/"Delete" options only in local library. This doesn't make sense when browsing the remote library - already downloaded files should show "Open"/"Delete" instead of "Download book" --- src/contentmanager.cpp | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/contentmanager.cpp b/src/contentmanager.cpp index 50868912..c21f82a7 100644 --- a/src/contentmanager.cpp +++ b/src/contentmanager.cpp @@ -108,12 +108,13 @@ void ContentManager::onCustomContextMenu(const QPoint &point) } contextMenu.addAction(&menuCancelBook); } else { - if (m_local) { + try { + const auto book = KiwixApp::instance()->getLibrary()->getBookById(id); contextMenu.addAction(&menuOpenBook); contextMenu.addAction(&menuDeleteBook); - } - else + } catch (...) { contextMenu.addAction(&menuDownloadBook); + } } connect(&menuDeleteBook, &QAction::triggered, [=]() { From 08b2f25828aa635431ee554712b48da21a5ba351 Mon Sep 17 00:00:00 2001 From: Nikhil Tanwar <2002nikhiltanwar@gmail.com> Date: Wed, 2 Aug 2023 16:43:48 +0530 Subject: [PATCH 2/4] Add translations for context menu Added translations for context menu options: Delete book Download book Open Book Resume Download Pause Download Cancel download --- resources/i18n/en.json | 6 +++++- src/contentmanager.cpp | 12 ++++++------ 2 files changed, 11 insertions(+), 7 deletions(-) diff --git a/resources/i18n/en.json b/resources/i18n/en.json index ac22c477..60b02537 100644 --- a/resources/i18n/en.json +++ b/resources/i18n/en.json @@ -144,5 +144,9 @@ "download-storage-error": "Storage Error", "download-storage-error-text": "The system doesn't have enough storage available.", "download-unavailable": "Download Unavailable", - "download-unavailable-text": "This download is unavailable." + "download-unavailable-text": "This download is unavailable.", + "open-book": "Open book", + "download-book": "Download book", + "pause-download": "Pause download", + "resume-download": "Resume download" } diff --git a/src/contentmanager.cpp b/src/contentmanager.cpp index c21f82a7..a465b9b2 100644 --- a/src/contentmanager.cpp +++ b/src/contentmanager.cpp @@ -93,12 +93,12 @@ void ContentManager::onCustomContextMenu(const QPoint &point) auto bookNode = static_cast(index.internalPointer()); const auto id = bookNode->getBookId(); - QAction menuDeleteBook("Delete book", this); - QAction menuOpenBook("Open book", this); - QAction menuDownloadBook("Download book", this); - QAction menuPauseBook("Pause download", this); - QAction menuResumeBook("Resume download", this); - QAction menuCancelBook("Cancel download", this); + QAction menuDeleteBook(gt("delete-book"), this); + QAction menuOpenBook(gt("open-book"), this); + QAction menuDownloadBook(gt("download-book"), this); + QAction menuPauseBook(gt("pause-download"), this); + QAction menuResumeBook(gt("resume-download"), this); + QAction menuCancelBook(gt("cancel-download"), this); if (bookNode->isDownloading()) { if (bookNode->getDownloadInfo().paused) { 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 3/4] 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); } From 63b9de95855d4357541e2c6db3ec8c0f50e5cbf3 Mon Sep 17 00:00:00 2001 From: Nikhil Tanwar <2002nikhiltanwar@gmail.com> Date: Thu, 3 Aug 2023 09:10:54 +0530 Subject: [PATCH 4/4] Do index check before access in contextmenu Fix #971 --- src/contentmanager.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/contentmanager.cpp b/src/contentmanager.cpp index 5be499b8..60c0e6f3 100644 --- a/src/contentmanager.cpp +++ b/src/contentmanager.cpp @@ -90,6 +90,8 @@ QList> ContentManager::getBooksList() void ContentManager::onCustomContextMenu(const QPoint &point) { QModelIndex index = mp_view->getView()->indexAt(point); + if (!index.isValid()) + return; QMenu contextMenu("optionsMenu", mp_view->getView()); auto bookNode = static_cast(index.internalPointer()); const auto id = bookNode->getBookId(); @@ -154,9 +156,7 @@ void ContentManager::onCustomContextMenu(const QPoint &point) resumeBook(id, index); }); - if (index.isValid()) { - contextMenu.exec(mp_view->getView()->viewport()->mapToGlobal(point)); - } + contextMenu.exec(mp_view->getView()->viewport()->mapToGlobal(point)); } void ContentManager::setLocal(bool local) {