forked from krojew/evernus
-
Notifications
You must be signed in to change notification settings - Fork 0
/
CharacterBoundWidget.cpp
121 lines (104 loc) · 3.97 KB
/
CharacterBoundWidget.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
/**
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include <QSettings>
#include "WarningBarWidget.h"
#include "ButtonWithTimer.h"
#include "ImportSettings.h"
#include "TextUtils.h"
#include "CharacterBoundWidget.h"
namespace Evernus
{
CharacterBoundWidget::CharacterBoundWidget(const TimeGetter &apiTimeGetter,
const TimeGetter &updateTimeGetter,
const QString &updateAgeSettingsKey,
QWidget *parent)
: QWidget(parent)
, mAPITimeGetter(apiTimeGetter)
, mUpdateTimeGetter(updateTimeGetter)
, mUpdateAgeSettingsKey(updateAgeSettingsKey)
, mImportBtn(new ButtonWithTimer{tr("API import"), this})
, mWarningBarWidget(new WarningBarWidget{this})
{
mImportBtn->setDisabled(true);
connect(&mUpdateTimer, &QTimer::timeout, this, &CharacterBoundWidget::updateTimerTick);
connect(mImportBtn, &QPushButton::clicked, this, &CharacterBoundWidget::requestUpdate);
mWarningBarWidget->setVisible(false);
mUpdateTimer.start(1000 * 60);
updateTimerTick();
}
void CharacterBoundWidget::refreshImportTimer()
{
if (mCharacterId == Character::invalidId)
{
mImportBtn->setDisabled(true);
mImportBtn->stopTimer();
mWarningBarWidget->setText(tr("<strong>Warning!</strong> No data has been imported."));
mWarningBarWidget->show();
}
else
{
mImportBtn->setEnabled(true);
mImportBtn->setTimer(mAPITimeGetter(mCharacterId));
updateTimerTick();
}
}
void CharacterBoundWidget::setCharacter(Character::IdType id)
{
mCharacterId = id;
refreshImportTimer();
handleNewCharacter(mCharacterId);
}
void CharacterBoundWidget::requestUpdate()
{
Q_ASSERT(mCharacterId != Character::invalidId);
emit importFromAPI(mCharacterId);
}
void CharacterBoundWidget::updateTimerTick()
{
QSettings settings;
const auto maxAge = settings.value(mUpdateAgeSettingsKey, ImportSettings::importTimerDefault).toInt();
const auto curTime = QDateTime::currentDateTime();
const auto lastUpdate = mUpdateTimeGetter(mCharacterId);
if (!lastUpdate.isValid() || lastUpdate < curTime.addSecs(-60 * maxAge))
{
mWarningBarWidget->show();
if (!lastUpdate.isValid())
{
mWarningBarWidget->setText(tr("<strong>Warning!</strong> No data has been imported."));
}
else
{
mWarningBarWidget->setText(tr("<strong>Warning!</strong> This data is %1 old and may need an update.")
.arg(TextUtils::secondsToString(std::chrono::seconds{(curTime.toMSecsSinceEpoch() - lastUpdate.toMSecsSinceEpoch()) / 1000})));
}
}
else
{
mWarningBarWidget->hide();
}
}
ButtonWithTimer &CharacterBoundWidget::getAPIImportButton() const noexcept
{
return *mImportBtn;
}
WarningBarWidget &CharacterBoundWidget::getWarningBarWidget() const noexcept
{
return *mWarningBarWidget;
}
Character::IdType CharacterBoundWidget::getCharacterId() const noexcept
{
return mCharacterId;
}
}