From 281d13a15014fd6450080c812dbc2e196c33a963 Mon Sep 17 00:00:00 2001
From: Isa Nanic <isa.nanic@savoirfairelinux.com>
Date: Tue, 11 Dec 2018 18:55:02 -0500
Subject: [PATCH] fix: add timeout to network link device slot

Change-Id: I2bb7b2e19c393a0c9523a3719f2c11b3bf94dbde
Reviewed-by: Andreas Traczyk <andreas.traczyk@savoirfairelinux.com>
---
 linkdevwidget.cpp | 20 ++++++++++++++++++--
 linkdevwidget.h   |  7 ++++++-
 2 files changed, 24 insertions(+), 3 deletions(-)

diff --git a/linkdevwidget.cpp b/linkdevwidget.cpp
index 4315971..8d89bad 100644
--- a/linkdevwidget.cpp
+++ b/linkdevwidget.cpp
@@ -19,6 +19,7 @@
 #include "linkdevwidget.h"
 
 #include <QMovie>
+#include <QTimer>
 
 LinkDevWidget::LinkDevWidget(QWidget* parent)
     : QWidget(parent),
@@ -32,9 +33,10 @@ LinkDevWidget::LinkDevWidget(QWidget* parent)
         setGeneratingPage();
     }
 
-    connect(ui->enterBtn, &QPushButton::clicked, this, &LinkDevWidget::setGeneratingPage);
+    connect(ui->enterBtn, &QPushButton::clicked,
+            this, &LinkDevWidget::setGeneratingPage);
     connect(&LRCInstance::accountModel(), &lrc::api::NewAccountModel::exportOnRingEnded,
-        this, &LinkDevWidget::setExportPage);
+            this, &LinkDevWidget::setExportPage);
 }
 
 LinkDevWidget::~LinkDevWidget()
@@ -52,6 +54,17 @@ LinkDevWidget::setGeneratingPage()
     ui->spinningLabel->show();
     movie->start();
 
+    timeout_ = new QTimer(this);
+    timeout_->setInterval(exportTimeout_);
+    timeout_->setSingleShot(true);
+    connect(timeout_, &QTimer::timeout, this,
+        [&]() {
+            setExportPage(std::string(),
+                          lrc::api::account::ExportOnRingStatus::NETWORK_ERROR,
+                          std::string());
+        });
+    timeout_->start();
+
     LRCInstance::accountModel().exportOnRing(LRCInstance::getCurrAccId(), ui->passwordLineEdit->text().toStdString());
 }
 
@@ -59,6 +72,8 @@ void
 LinkDevWidget::setExportPage(const std::string& accountId, lrc::api::account::ExportOnRingStatus status, const std::string& pin)
 {
     Q_UNUSED(accountId);
+    timeout_->stop();
+
     ui->stackedWidget->setCurrentWidget(ui->end);
 
     switch (status) {
@@ -73,6 +88,7 @@ LinkDevWidget::setExportPage(const std::string& accountId, lrc::api::account::Ex
         break;
 
     default:
+        disconnect();
         ui->label_4->setText(tr("Something went wrong.\nPlease try again later."));
         ui->label_5->hide();
         ui->label_6->hide();
diff --git a/linkdevwidget.h b/linkdevwidget.h
index 740cca2..082e3e9 100644
--- a/linkdevwidget.h
+++ b/linkdevwidget.h
@@ -42,8 +42,13 @@ public:
 
 private:
     Ui::LinkDevWidget* ui;
+    const int exportTimeout_ = 10000;
+
+    QTimer* timeout_;
 
 private slots:
     void setGeneratingPage();
-    void setExportPage(const std::string& accountId, lrc::api::account::ExportOnRingStatus status, const std::string& pin);
+    void setExportPage(const std::string& accountId,
+                       lrc::api::account::ExportOnRingStatus status,
+                       const std::string& pin);
 };
-- 
GitLab