summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorisanae <14251494+isanae@users.noreply.github.com>2019-07-07 18:22:36 -0400
committerisanae <14251494+isanae@users.noreply.github.com>2019-07-10 20:45:37 -0400
commit89d0528a002a3cd7f0db47b2db53bdaf0e9c494d (patch)
treeef1801c666fdbcb10d20232e6aaa3b085b074a0f
parentea7ad772bbd971e398869d9b74b38d62c814bb02 (diff)
progress dialog now shows elapsed time in progress bar
-rw-r--r--src/nxmaccessmanager.cpp43
-rw-r--r--src/nxmaccessmanager.h11
-rw-r--r--src/pch.h1
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();
};
diff --git a/src/pch.h b/src/pch.h
index 1d8df43a..955939ba 100644
--- a/src/pch.h
+++ b/src/pch.h
@@ -98,6 +98,7 @@
#include <QDirIterator>
#include <QDragEnterEvent>
#include <QDropEvent>
+#include <QElapsedTimer>
#include <QEvent>
#include <QFile>
#include <QFileDialog>