Use queue time instead of local time when setting up refresh timer
[evehomescreen] / src / widget.cpp
index 9e304d2..8af1ba5 100644 (file)
@@ -10,6 +10,8 @@
 #include <QtDebug>
 #include <QNetworkConfigurationManager>
 #include <QSettings>
+#include <QTimer>
+#include <QDateTime>
 
 QTM_USE_NAMESPACE
 
@@ -19,15 +21,23 @@ Widget::Widget(QWidget *parent)
     m_training(NULL),
     m_net(new QNetworkConfigurationManager(this)),
     m_skills(new SkillTree(this)),
-    m_model(new EveModel)
+    m_model(new EveModel),
+    m_timer(new QTimer(this))
 {
     setAlignment(Qt::AlignCenter);
     setAttribute(Qt::WA_TranslucentBackground);
     setGeometry(0,0,150,180);
     connect(m_net,SIGNAL(onlineStateChanged(bool)),this,SLOT(onlineStateChanged(bool)));
+    connect(m_skills,SIGNAL(skillsLoaded()),this,SLOT(update()));
     m_skills->loadSkills();
     m_model->loadSettings();
     m_settings->setModel(m_model);
+    EveCharacter *c = m_model->selectedCharacter();
+    if (c != NULL) {
+        loadTraining();
+    }
+    m_timer->setSingleShot(true);
+    connect(m_timer,SIGNAL(timeout()),this,SLOT(loadTraining()));
 }
 
 Widget::~Widget()
@@ -59,13 +69,18 @@ void Widget::paintEvent(QPaintEvent *event)
         }
         QRect nameLoc(0,10,150,20);
         p.drawText(nameLoc,Qt::AlignCenter,character->name);
-        if (m_training) {
+        if (m_training && m_training->training) {
             QRect skillTitle(0,110,150,50);
             p.drawText(skillTitle,Qt::AlignCenter|Qt::TextWordWrap,
                        QString("%1 %2").arg(m_skills->skillName(m_training->typeId))
                                        .arg(m_training->level));
             QRect skillLoc(0,155,150,20);
             p.drawText(skillLoc,Qt::AlignCenter,m_training->endTime.toString(Qt::SystemLocaleShortDate));
+        } else {
+
+            QRect skillTitle(0,110,150,50);
+            p.drawText(skillTitle,Qt::AlignCenter|Qt::TextWordWrap,
+                       "No skill in training");
         }
 
     }
@@ -84,16 +99,28 @@ void Widget::showSettingsDialog()
         EveCharacter *character = m_model->selectedCharacter();
         if (character != NULL) {
             qDebug() << "Got character " << character->name;
-
             connect(character,SIGNAL(imageLoaded()),this,SLOT(skillReady()));
             character->fetchImage();
-            qDebug() << "Fetch skills";
+
+            loadTraining();
+        }
+    }
+}
+
+void Widget::loadTraining()
+{
+    EveCharacter *character = m_model->selectedCharacter();
+    if (character != NULL) {
+
+        qDebug() << "Fetch skills";
+        if (m_training == NULL) {
             m_training = new EveSkillTraining(this);
-            m_training->setAccount(m_settings->model().data());
-            m_training->setCharacter(character);
-            connect(m_training,SIGNAL(finished()),this,SLOT(update()));
-            m_training->fetchInfo();
+            connect(m_training,SIGNAL(finished()),this,SLOT(trainingLoaded()));
         }
+        m_training->setAccount(m_settings->model().data());
+        m_training->setCharacter(character);
+
+        m_training->fetchInfo();
     }
 }
 
@@ -112,3 +139,17 @@ void Widget::onlineStateChanged(bool online)
     }
 }
 
+void Widget::trainingLoaded()
+{
+    qDebug() << "Training loaded";
+    if (m_training != NULL && m_training->training) {
+        int interval = 1000 * (m_training->currentTime.secsTo(m_training->endTime) + 30);
+        qDebug() << "Timer interval" << interval;
+        if (m_timer->isActive()) {
+            m_timer->stop();
+        }
+        m_timer->setInterval( interval );
+        m_timer->start();
+    }
+    update();
+}