fix: add timeout to network link device slot

Change-Id: I2bb7b2e19c393a0c9523a3719f2c11b3bf94dbde
Reviewed-by: Andreas Traczyk <andreas.traczyk@savoirfairelinux.com>
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 @@
         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 @@
     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 @@
 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 @@
         break;
 
     default:
+        disconnect();
         ui->label_4->setText(tr("Something went wrong.\nPlease try again later."));
         ui->label_5->hide();
         ui->label_6->hide();