From 188d5eabe90c16359fde89b82458fad7a44a16c8 Mon Sep 17 00:00:00 2001 From: Veloman Yunkan Date: Wed, 31 Jan 2024 18:52:14 +0400 Subject: [PATCH 1/4] Introduced showInfoBox() --- src/contentmanager.cpp | 12 ++---------- src/kiwixconfirmbox.cpp | 9 +++++++++ src/kiwixconfirmbox.h | 5 ++++- 3 files changed, 15 insertions(+), 11 deletions(-) diff --git a/src/contentmanager.cpp b/src/contentmanager.cpp index c64fff4..85e4cb5 100644 --- a/src/contentmanager.cpp +++ b/src/contentmanager.cpp @@ -128,11 +128,7 @@ void ContentManager::onCustomContextMenu(const QPoint &point) 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(); - }); + showInfoBox(gt("couldnt-open-location"), failedText, mp_view); } }); } catch (...) { @@ -428,11 +424,7 @@ QString ContentManager::downloadBook(const QString &id, QModelIndex index) emit managerModel->startDownload(index); return downloadStatus; } - KiwixConfirmBox *dialog = new KiwixConfirmBox(dialogHeader, dialogText, true, mp_view); - dialog->show(); - connect(dialog, &KiwixConfirmBox::okClicked, [=]() { - dialog->deleteLater(); - }); + showInfoBox(dialogHeader, dialogText, mp_view); return downloadStatus; } diff --git a/src/kiwixconfirmbox.cpp b/src/kiwixconfirmbox.cpp index d855669..8811bc6 100644 --- a/src/kiwixconfirmbox.cpp +++ b/src/kiwixconfirmbox.cpp @@ -36,3 +36,12 @@ KiwixConfirmBox::~KiwixConfirmBox() { delete ui; } + +void showInfoBox(QString title, QString text, QWidget *parent) +{ + KiwixConfirmBox *dialog = new KiwixConfirmBox(title, text, true, parent); + dialog->show(); + QObject::connect(dialog, &KiwixConfirmBox::okClicked, [=]() { + dialog->deleteLater(); + }); +} diff --git a/src/kiwixconfirmbox.h b/src/kiwixconfirmbox.h index 6c55a1b..65e5a38 100644 --- a/src/kiwixconfirmbox.h +++ b/src/kiwixconfirmbox.h @@ -12,7 +12,7 @@ class KiwixConfirmBox : public QDialog Q_OBJECT public: - explicit KiwixConfirmBox(QString confirmTitle, QString confirmText, bool okDialog, QWidget *parent = nullptr); + KiwixConfirmBox(QString confirmTitle, QString confirmText, bool okDialog, QWidget *parent = nullptr); ~KiwixConfirmBox(); signals: @@ -26,4 +26,7 @@ private: Ui::kiwixconfirmbox *ui; }; + +void showInfoBox(QString title, QString text, QWidget *parent = nullptr); + #endif // KIWIXCONFIRMBOX_H From c77004d92586c7f19fbc3b8f40d7fc4cbcc9456d Mon Sep 17 00:00:00 2001 From: Veloman Yunkan Date: Wed, 31 Jan 2024 19:01:29 +0400 Subject: [PATCH 2/4] Extracted openFileLocation() --- src/contentmanager.cpp | 29 +++++++++++++++++++++-------- 1 file changed, 21 insertions(+), 8 deletions(-) diff --git a/src/contentmanager.cpp b/src/contentmanager.cpp index 85e4cb5..f45e5e4 100644 --- a/src/contentmanager.cpp +++ b/src/contentmanager.cpp @@ -23,6 +23,26 @@ #include "contentmanagerheader.h" #include +namespace +{ + +// Opens the directory containing the input file path. +// parent is the widget serving as the parent for the error dialog in case of +// failure. +void openFileLocation(QString path, QWidget *parent = nullptr) +{ + QFileInfo fileInfo(path); + QDir dir = fileInfo.absoluteDir(); + bool dirOpen = dir.exists() && dir.isReadable() && QDesktopServices::openUrl(dir.absolutePath()); + if (!dirOpen) { + QString failedText = gt("couldnt-open-location-text"); + failedText = failedText.replace("{{FOLDER}}", "" + dir.absolutePath() + ""); + showInfoBox(gt("couldnt-open-location"), failedText, parent); + } +} + +} // unnamed namespace + ContentManager::ContentManager(Library* library, kiwix::Downloader* downloader, QObject *parent) : QObject(parent), mp_library(library), @@ -122,14 +142,7 @@ void ContentManager::onCustomContextMenu(const QPoint &point) 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() + ""); - showInfoBox(gt("couldnt-open-location"), failedText, mp_view); - } + openFileLocation(bookPath, mp_view); }); } catch (...) { contextMenu.addAction(&menuDownloadBook); From c07838806b8e4fde52c2a8b7abd6607717551f97 Mon Sep 17 00:00:00 2001 From: Veloman Yunkan Date: Tue, 6 Feb 2024 14:57:42 +0400 Subject: [PATCH 3/4] Extracted ContentManager::reallyEraseBook() --- src/contentmanager.cpp | 37 +++++++++++++++++++++---------------- src/contentmanager.h | 3 +++ 2 files changed, 24 insertions(+), 16 deletions(-) diff --git a/src/contentmanager.cpp b/src/contentmanager.cpp index f45e5e4..c0d366c 100644 --- a/src/contentmanager.cpp +++ b/src/contentmanager.cpp @@ -504,6 +504,26 @@ QString formatText(QString text) return finalText; } +void ContentManager::reallyEraseBook(const QString& id, bool moveToTrash) +{ + auto tabBar = KiwixApp::instance()->getTabWidget(); + tabBar->closeTabsByZimId(id); + kiwix::Book book = mp_library->getBookById(id); + QString dirPath = QString::fromStdString(kiwix::removeLastPathElement(book.getPath())); + QString fileName = QString::fromStdString(kiwix::getLastPathElement(book.getPath())) + "*"; + eraseBookFilesFromComputer(dirPath, fileName, moveToTrash); + mp_library->removeBookFromLibraryById(id); + mp_library->save(); + emit mp_library->bookmarksChanged(); + if (m_local) { + emit(bookRemoved(id)); + } else { + emit(oneBookChanged(id)); + } + KiwixApp::instance()->getSettingsManager()->deleteSettings(id); + emit booksChanged(); +} + void ContentManager::eraseBook(const QString& id) { auto text = gt("delete-book-text"); @@ -521,23 +541,8 @@ void ContentManager::eraseBook(const QString& id) KiwixConfirmBox *dialog = new KiwixConfirmBox(gt("delete-book"), text, false, mp_view); dialog->show(); connect(dialog, &KiwixConfirmBox::yesClicked, [=]() { - auto tabBar = KiwixApp::instance()->getTabWidget(); - tabBar->closeTabsByZimId(id); - kiwix::Book book = mp_library->getBookById(id); - QString dirPath = QString::fromStdString(kiwix::removeLastPathElement(book.getPath())); - QString fileName = QString::fromStdString(kiwix::getLastPathElement(book.getPath())) + "*"; - eraseBookFilesFromComputer(dirPath, fileName, moveToTrash); - mp_library->removeBookFromLibraryById(id); - mp_library->save(); - emit mp_library->bookmarksChanged(); - if (m_local) { - emit(bookRemoved(id)); - } else { - emit(oneBookChanged(id)); - } - KiwixApp::instance()->getSettingsManager()->deleteSettings(id); + reallyEraseBook(id, moveToTrash); dialog->deleteLater(); - emit booksChanged(); }); connect(dialog, &KiwixConfirmBox::noClicked, [=]() { dialog->deleteLater(); diff --git a/src/contentmanager.h b/src/contentmanager.h index f4d3b14..bf673ae 100644 --- a/src/contentmanager.h +++ b/src/contentmanager.h @@ -54,6 +54,8 @@ private: QStringList m_categories; QStringList getBookIds(); + // reallyEraseBook() doesn't ask for confirmation (unlike eraseBook()) + void reallyEraseBook(const QString& id, bool moveToTrash); void eraseBookFilesFromComputer(const QString dirPath, const QString filename, const bool moveToTrash); BookInfoList getBooksList(); ContentManagerModel *managerModel; @@ -83,6 +85,7 @@ public slots: void updateLibrary(); void setSearch(const QString& search); void setSortBy(const QString& sortBy, const bool sortOrderAsc); + // eraseBook() asks for confirmation (reallyEraseBook() doesn't) void eraseBook(const QString& id); void updateRemoteLibrary(const QString& content); void updateLanguages(const QString& content); From 0f088697c6d5a4b0f95ff7bfaff755758c440755 Mon Sep 17 00:00:00 2001 From: Veloman Yunkan Date: Tue, 6 Feb 2024 15:13:06 +0400 Subject: [PATCH 4/4] Introduced showConfirmBox() --- src/contentmanager.cpp | 16 ++-------------- src/kiwixconfirmbox.h | 15 +++++++++++++++ 2 files changed, 17 insertions(+), 14 deletions(-) diff --git a/src/contentmanager.cpp b/src/contentmanager.cpp index c0d366c..a0e58b6 100644 --- a/src/contentmanager.cpp +++ b/src/contentmanager.cpp @@ -538,14 +538,8 @@ void ContentManager::eraseBook(const QString& id) text += formatText(gt("perma-delete-files-text")); } text = text.replace("{{ZIM}}", QString::fromStdString(mp_library->getBookById(id).getTitle())); - KiwixConfirmBox *dialog = new KiwixConfirmBox(gt("delete-book"), text, false, mp_view); - dialog->show(); - connect(dialog, &KiwixConfirmBox::yesClicked, [=]() { + showConfirmBox(gt("delete-book"), text, mp_view, [=]() { reallyEraseBook(id, moveToTrash); - dialog->deleteLater(); - }); - connect(dialog, &KiwixConfirmBox::noClicked, [=]() { - dialog->deleteLater(); }); } @@ -587,15 +581,9 @@ void ContentManager::cancelBook(const QString& id, QModelIndex index) { auto text = gt("cancel-download-text"); text = text.replace("{{ZIM}}", QString::fromStdString(mp_library->getBookById(id).getTitle())); - KiwixConfirmBox *dialog = new KiwixConfirmBox(gt("cancel-download"), text, false, mp_view); - dialog->show(); - connect(dialog, &KiwixConfirmBox::yesClicked, [=]() { + showConfirmBox(gt("cancel-download"), text, mp_view, [=]() { cancelBook(id); emit managerModel->cancelDownload(index); - dialog->deleteLater(); - }); - connect(dialog, &KiwixConfirmBox::noClicked, [=]() { - dialog->deleteLater(); }); } diff --git a/src/kiwixconfirmbox.h b/src/kiwixconfirmbox.h index 65e5a38..9ec6304 100644 --- a/src/kiwixconfirmbox.h +++ b/src/kiwixconfirmbox.h @@ -29,4 +29,19 @@ private: void showInfoBox(QString title, QString text, QWidget *parent = nullptr); +template +void showConfirmBox(QString title, QString text, QWidget *parent, + YesAction yesAction) +{ + KiwixConfirmBox *dialog = new KiwixConfirmBox(title, text, false, parent); + dialog->show(); + QObject::connect(dialog, &KiwixConfirmBox::yesClicked, [=]() { + yesAction(); + dialog->deleteLater(); + }); + QObject::connect(dialog, &KiwixConfirmBox::noClicked, [=]() { + dialog->deleteLater(); + }); +} + #endif // KIWIXCONFIRMBOX_H