2014-05-15 20:32:54 +00:00
|
|
|
#include "ServerStatus.h"
|
2014-05-17 14:23:48 +00:00
|
|
|
#include "LineSeparator.h"
|
|
|
|
#include "IconLabel.h"
|
2014-05-15 20:32:54 +00:00
|
|
|
#include "logic/status/StatusChecker.h"
|
|
|
|
|
|
|
|
#include "MultiMC.h"
|
|
|
|
|
|
|
|
#include <QHBoxLayout>
|
|
|
|
#include <QFrame>
|
|
|
|
#include <QLabel>
|
|
|
|
#include <QMap>
|
|
|
|
#include <QToolButton>
|
2014-05-17 14:23:48 +00:00
|
|
|
#include <QAction>
|
2014-05-15 20:32:54 +00:00
|
|
|
|
2014-05-17 14:23:48 +00:00
|
|
|
ServerStatus::ServerStatus(QWidget *parent, Qt::WindowFlags f) : QWidget(parent, f)
|
2014-05-15 20:32:54 +00:00
|
|
|
{
|
2014-05-17 14:23:48 +00:00
|
|
|
layout = new QHBoxLayout(this);
|
|
|
|
layout->setContentsMargins(0, 0, 0, 0);
|
2015-03-01 21:20:57 +00:00
|
|
|
goodIcon = MMC->getThemedIcon("status-good");
|
|
|
|
yellowIcon = MMC->getThemedIcon("status-yellow");
|
|
|
|
badIcon = MMC->getThemedIcon("status-bad");
|
2014-05-17 14:23:48 +00:00
|
|
|
|
|
|
|
addStatus("minecraft.net", tr("Web"));
|
|
|
|
addLine();
|
|
|
|
addStatus("account.mojang.com", tr("Account"));
|
|
|
|
addLine();
|
|
|
|
addStatus("skins.minecraft.net", tr("Skins"));
|
|
|
|
addLine();
|
|
|
|
addStatus("authserver.mojang.com", tr("Auth"));
|
|
|
|
addLine();
|
|
|
|
addStatus("sessionserver.mojang.com", tr("Session"));
|
|
|
|
|
2014-05-15 20:32:54 +00:00
|
|
|
m_statusRefresh = new QToolButton(this);
|
|
|
|
m_statusRefresh->setCheckable(true);
|
|
|
|
m_statusRefresh->setToolButtonStyle(Qt::ToolButtonIconOnly);
|
2015-03-01 21:20:57 +00:00
|
|
|
m_statusRefresh->setIcon(MMC->getThemedIcon("refresh"));
|
2014-05-17 14:23:48 +00:00
|
|
|
layout->addWidget(m_statusRefresh);
|
|
|
|
|
|
|
|
setLayout(layout);
|
|
|
|
|
2014-05-15 20:32:54 +00:00
|
|
|
// Start status checker
|
|
|
|
{
|
2014-05-17 14:23:48 +00:00
|
|
|
auto reloader = MMC->statusChecker().get();
|
|
|
|
connect(reloader, &StatusChecker::statusChanged, this, &ServerStatus::StatusChanged);
|
|
|
|
connect(reloader, &StatusChecker::statusLoading, this, &ServerStatus::StatusReloading);
|
2014-05-15 20:32:54 +00:00
|
|
|
connect(m_statusRefresh, &QAbstractButton::clicked, this, &ServerStatus::reloadStatus);
|
2014-05-17 14:23:48 +00:00
|
|
|
MMC->statusChecker()->startTimer(60000);
|
2014-05-15 20:32:54 +00:00
|
|
|
reloadStatus();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2014-05-17 14:23:48 +00:00
|
|
|
ServerStatus::~ServerStatus()
|
2014-05-15 20:32:54 +00:00
|
|
|
{
|
|
|
|
}
|
|
|
|
|
2014-05-17 14:23:48 +00:00
|
|
|
void ServerStatus::reloadStatus()
|
2014-05-15 20:32:54 +00:00
|
|
|
{
|
2014-05-17 14:23:48 +00:00
|
|
|
MMC->statusChecker()->reloadStatus();
|
2014-05-15 20:32:54 +00:00
|
|
|
}
|
|
|
|
|
2014-05-17 14:23:48 +00:00
|
|
|
void ServerStatus::addLine()
|
2014-05-15 20:32:54 +00:00
|
|
|
{
|
2014-06-02 23:34:44 +00:00
|
|
|
layout->addWidget(new LineSeparator(this, Qt::Vertical));
|
2014-05-15 20:32:54 +00:00
|
|
|
}
|
|
|
|
|
2014-05-17 14:23:48 +00:00
|
|
|
void ServerStatus::addStatus(QString key, QString name)
|
2014-05-15 20:32:54 +00:00
|
|
|
{
|
|
|
|
{
|
2014-05-17 14:23:48 +00:00
|
|
|
auto label = new IconLabel(this, badIcon, QSize(16, 16));
|
|
|
|
label->setToolTip(key);
|
|
|
|
serverLabels[key] = label;
|
|
|
|
layout->addWidget(label);
|
|
|
|
}
|
|
|
|
{
|
|
|
|
auto label = new QLabel(this);
|
|
|
|
label->setText(name);
|
|
|
|
label->setToolTip(key);
|
|
|
|
layout->addWidget(label);
|
2014-05-15 20:32:54 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2014-12-04 00:05:49 +00:00
|
|
|
void ServerStatus::setStatus(QString key, int value)
|
2014-05-15 20:32:54 +00:00
|
|
|
{
|
2014-05-17 14:23:48 +00:00
|
|
|
if (!serverLabels.contains(key))
|
|
|
|
return;
|
|
|
|
IconLabel *label = serverLabels[key];
|
2014-12-04 00:05:49 +00:00
|
|
|
switch(value)
|
|
|
|
{
|
|
|
|
case 0:
|
|
|
|
label->setIcon(goodIcon);
|
|
|
|
break;
|
|
|
|
case 1:
|
|
|
|
label->setIcon(yellowIcon);
|
|
|
|
break;
|
|
|
|
default:
|
|
|
|
case 2:
|
|
|
|
label->setIcon(badIcon);
|
|
|
|
break;
|
|
|
|
}
|
2014-05-15 20:32:54 +00:00
|
|
|
}
|
|
|
|
|
2014-05-17 14:23:48 +00:00
|
|
|
void ServerStatus::StatusChanged(const QMap<QString, QString> statusEntries)
|
2014-05-15 20:32:54 +00:00
|
|
|
{
|
2014-12-04 00:05:49 +00:00
|
|
|
auto convertStatus = [&](QString status)->int
|
2014-05-17 14:23:48 +00:00
|
|
|
{
|
|
|
|
if (status == "green")
|
2014-12-04 00:05:49 +00:00
|
|
|
return 0;
|
2014-05-17 14:23:48 +00:00
|
|
|
else if (status == "yellow")
|
2014-12-04 00:05:49 +00:00
|
|
|
return 1;
|
2014-05-17 14:23:48 +00:00
|
|
|
else if (status == "red")
|
2014-12-04 00:05:49 +00:00
|
|
|
return 2;
|
|
|
|
return 2;
|
2014-05-17 14:23:48 +00:00
|
|
|
}
|
|
|
|
;
|
|
|
|
auto iter = statusEntries.begin();
|
|
|
|
while (iter != statusEntries.end())
|
|
|
|
{
|
|
|
|
QString key = iter.key();
|
2014-12-04 00:05:49 +00:00
|
|
|
auto value = convertStatus(iter.value());
|
2014-05-17 14:23:48 +00:00
|
|
|
setStatus(key, value);
|
|
|
|
iter++;
|
|
|
|
}
|
2014-05-15 20:32:54 +00:00
|
|
|
}
|
|
|
|
|
2014-05-17 14:23:48 +00:00
|
|
|
void ServerStatus::StatusReloading(bool is_reloading)
|
2014-05-15 20:32:54 +00:00
|
|
|
{
|
2014-05-17 14:23:48 +00:00
|
|
|
m_statusRefresh->setChecked(is_reloading);
|
2014-05-15 20:32:54 +00:00
|
|
|
}
|