diff options
| author | isanae <14251494+isanae@users.noreply.github.com> | 2019-07-07 18:22:36 -0400 |
|---|---|---|
| committer | isanae <14251494+isanae@users.noreply.github.com> | 2019-07-10 20:45:37 -0400 |
| commit | 89d0528a002a3cd7f0db47b2db53bdaf0e9c494d (patch) | |
| tree | ef1801c666fdbcb10d20232e6aaa3b085b074a0f | |
| parent | ea7ad772bbd971e398869d9b74b38d62c814bb02 (diff) | |
progress dialog now shows elapsed time in progress bar
| -rw-r--r-- | src/nxmaccessmanager.cpp | 43 | ||||
| -rw-r--r-- | src/nxmaccessmanager.h | 11 | ||||
| -rw-r--r-- | src/pch.h | 1 |
3 files changed, 41 insertions, 14 deletions
diff --git a/src/nxmaccessmanager.cpp b/src/nxmaccessmanager.cpp index 4d9b2a92..d6f6290e 100644 --- a/src/nxmaccessmanager.cpp +++ b/src/nxmaccessmanager.cpp @@ -40,16 +40,20 @@ along with Mod Organizer. If not, see <http://www.gnu.org/licenses/>. #include <QJsonArray> using namespace MOBase; +using namespace std::chrono_literals; const QString NexusBaseUrl("https://api.nexusmods.com/v1"); -const std::chrono::seconds ValidationTimeout(10); +const auto ValidationTimeout = 10s; -ValidationProgressDialog::ValidationProgressDialog() - : m_dialogHolder(new QDialog), m_dialog(nullptr), m_bar(nullptr) +ValidationProgressDialog::ValidationProgressDialog(std::chrono::seconds t) + : m_timeout(t), m_dialog(nullptr), m_bar(nullptr), m_timer(nullptr) { + m_dialogHolder.reset(new QDialog); m_dialog = m_dialogHolder.get(); + m_bar = new QProgressBar; + m_bar->setTextVisible(false); auto* label = new QLabel(tr("Validating Nexus Connection")); label->setAlignment(Qt::AlignHCenter); @@ -76,13 +80,24 @@ void ValidationProgressDialog::setParentWidget(QWidget* w) m_dialog->setVisible(wasVisible); } -void ValidationProgressDialog::show() +void ValidationProgressDialog::start() { + if (!m_timer) { + m_timer = new QTimer(m_dialog); + connect(m_timer, &QTimer::timeout, [&]{ onTimer(); }); + m_timer->setInterval(100ms); + } + + m_bar->setRange(0, m_timeout.count()); + m_elapsed.start(); + m_timer->start(); + m_dialog->show(); } -void ValidationProgressDialog::hide() +void ValidationProgressDialog::stop() { + m_timer->stop(); m_dialog->hide(); } @@ -90,10 +105,16 @@ void ValidationProgressDialog::onButton(QAbstractButton* b) { } +void ValidationProgressDialog::onTimer() +{ + m_bar->setValue(m_elapsed.elapsed() / 1000); +} + NXMAccessManager::NXMAccessManager(QObject *parent, const QString &moVersion) : QNetworkAccessManager(parent) , m_ValidateReply(nullptr) + , m_ProgressDialog(ValidationTimeout) , m_MOVersion(moVersion) { m_ValidateTimeout.setSingleShot(true); @@ -176,7 +197,7 @@ void NXMAccessManager::startValidationCheck() request.setRawHeader("Application-Name", "MO2"); request.setRawHeader("Application-Version", m_MOVersion.toUtf8()); - m_ProgressDialog.show(); + m_ProgressDialog.start(); QCoreApplication::processEvents(); // for some reason the whole app hangs during the login. This way the user has at least a little feedback @@ -191,14 +212,14 @@ void NXMAccessManager::startValidationCheck() bool NXMAccessManager::validated() const { if (m_ValidateState == VALIDATE_CHECKING) { - m_ProgressDialog.show(); + m_ProgressDialog.start(); while (m_ValidateState == VALIDATE_CHECKING) { QCoreApplication::processEvents(); QThread::msleep(100); } - m_ProgressDialog.hide(); + m_ProgressDialog.stop(); } return m_ValidateState == VALIDATE_VALID; @@ -277,7 +298,7 @@ void NXMAccessManager::clearApiKey() void NXMAccessManager::validateTimeout() { m_ValidateTimeout.stop(); - m_ProgressDialog.hide(); + m_ProgressDialog.stop(); m_ApiKey.clear(); m_ValidateState = VALIDATE_NOT_VALID; @@ -294,7 +315,7 @@ void NXMAccessManager::validateTimeout() void NXMAccessManager::validateError(QNetworkReply::NetworkError) { m_ValidateTimeout.stop(); - m_ProgressDialog.hide(); + m_ProgressDialog.stop(); m_ApiKey.clear(); m_ValidateState = VALIDATE_NOT_VALID; @@ -314,7 +335,7 @@ void NXMAccessManager::validateError(QNetworkReply::NetworkError) void NXMAccessManager::validateFinished() { m_ValidateTimeout.stop(); - m_ProgressDialog.hide(); + m_ProgressDialog.stop(); if (m_ValidateReply != nullptr) { QJsonDocument jdoc = QJsonDocument::fromJson(m_ValidateReply->readAll()); diff --git a/src/nxmaccessmanager.h b/src/nxmaccessmanager.h index 89438316..b20cb6e8 100644 --- a/src/nxmaccessmanager.h +++ b/src/nxmaccessmanager.h @@ -25,6 +25,7 @@ along with Mod Organizer. If not, see <http://www.gnu.org/licenses/>. #include <QTimer> #include <QNetworkReply> #include <QProgressDialog> +#include <QElapsedTimer> #include <set> namespace MOBase { class IPluginGame; } @@ -34,18 +35,22 @@ class ValidationProgressDialog : QObject Q_OBJECT; public: - ValidationProgressDialog(); + ValidationProgressDialog(std::chrono::seconds timeout); void setParentWidget(QWidget* w); - void show(); - void hide(); + void start(); + void stop(); private: + std::chrono::seconds m_timeout; std::unique_ptr<QDialog> m_dialogHolder; QDialog* m_dialog; QProgressBar* m_bar; + QTimer* m_timer; + QElapsedTimer m_elapsed; void onButton(QAbstractButton* b); + void onTimer(); }; @@ -98,6 +98,7 @@ #include <QDirIterator> #include <QDragEnterEvent> #include <QDropEvent> +#include <QElapsedTimer> #include <QEvent> #include <QFile> #include <QFileDialog> |
