serverstatuswidget.cpp 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141
  1. #include "serverstatuswidget.h"
  2. #include "ui_serverstatuswidget.h"
  3. #include <QDebug>
  4. #include "constants.h"
  5. #include "models/settings.h"
  6. ServerStatusWidget::ServerStatusWidget(QWidget *parent) :
  7. QWidget(parent),
  8. ui(new Ui::ServerStatusWidget)
  9. {
  10. servers_disabled = false;
  11. setMouseTracking(true);
  12. ui->setupUi(this);
  13. connect(&update_timer, &QTimer::timeout, &status_downloader, &Downloader::start);
  14. connect(&status_downloader, &Downloader::downloadFinished, this, &ServerStatusWidget::updateStatus);
  15. // updateStatus will start tech_work_message_downloader
  16. connect(&tech_work_message_downloader, &Downloader::downloadFinished, this, &ServerStatusWidget::updateTechWorksMessage);
  17. status_downloader.targetBytearray = &status_data;
  18. status_downloader.setUrl(Settings::getValue("Network/game_servers_status").toUrl());
  19. tech_work_message_downloader.targetBytearray = &tech_work_message_data;
  20. tech_work_message_downloader.setUrl(Settings::getValue("Network/game_servers_message").toUrl());
  21. update_timer.setInterval(1000 * 60); // 1 minute;
  22. update_timer.start();
  23. // Perform update on startup
  24. status_downloader.start();
  25. }
  26. ServerStatusWidget::~ServerStatusWidget()
  27. {
  28. delete ui;
  29. }
  30. void ServerStatusWidget::updateFontsSizes()
  31. {
  32. foreach (QString server_name, servers_list) {
  33. QLabel* label = ui->servers_list->findChild<QLabel*>(server_name.toLower());
  34. if (!label) {
  35. qDebug() << "Error! Cannot find server widget " << server_name;
  36. continue;
  37. }
  38. label->setFont(trajan_9pt);
  39. }
  40. }
  41. void ServerStatusWidget::resizeEvent(QResizeEvent*)
  42. {
  43. updateFontsSizes();
  44. }
  45. void ServerStatusWidget::leaveEvent(QEvent *event)
  46. {
  47. event->ignore();
  48. emit showNoTooltip();
  49. }
  50. void ServerStatusWidget::enterEvent(QEvent *event)
  51. {
  52. event->ignore();
  53. emit showServersTooltip(server_status_tooltip_);
  54. }
  55. void ServerStatusWidget::updateServerStatus()
  56. {
  57. status_downloader.start();
  58. }
  59. void ServerStatusWidget::updateStatus()
  60. {
  61. if (QString(status_data).contains("profilaktika")) {
  62. servers_disabled = true;
  63. qDebug() << "All servers are closed!";
  64. foreach (QString server_name, servers_list) {
  65. QLabel* label = ui->servers_list->findChild<QLabel*>(server_name.toLower());
  66. if (!label) {
  67. qDebug() << "Error! Cannot find server widget " << server_name;
  68. continue;
  69. }
  70. label->setStyleSheet(closed_color);
  71. }
  72. status_data = "";
  73. tech_work_message_downloader.start();
  74. return;
  75. }
  76. disabled_servers_count = 0;
  77. servers_disabled = false;
  78. QStringList servers = QString(status_data).split("|||");
  79. foreach (QString server, servers) {
  80. QStringList data = server.split(":::");
  81. QWidget* widget = findChild<QWidget*>(QString(data[0]).toLower());
  82. if (!widget)
  83. continue;
  84. if (data.size() > 1 && data[1] == "on") {
  85. widget->setStyleSheet(open_color);
  86. } else {
  87. widget->setStyleSheet(closed_color);
  88. disabled_servers_count++;
  89. }
  90. }
  91. status_data = "";
  92. tech_work_message_downloader.start();
  93. }
  94. void ServerStatusWidget::updateTechWorksMessage()
  95. {
  96. if (tech_work_message_data.isEmpty()) {
  97. if (disabled_servers_count <= 3) {
  98. server_status_tooltip_ = "Серверы игры работают в штатном режиме.";
  99. } else {
  100. server_status_tooltip_ = "Серверы игры частично или полностью отключены.\nСообщений о профилактике не поступало.";
  101. }
  102. tech_work_message_data = "";
  103. return;
  104. }
  105. QStringList list = QString(tech_work_message_data).split(":::");
  106. if (list.size() < 4) {
  107. tech_work_message_data = "";
  108. return;
  109. }
  110. QString time_beginning = "<span style =\"font-family:Trajan Pro 3\">" + list[0] + "</span>";
  111. QString time_end = "<span style =\"font-family:Trajan Pro 3\">" + list[1] + "</span>";
  112. QString day = "<span style =\"font-family:Trajan Pro 3\">" + list[2] + "</span>";
  113. QString month = QString(" " + list[3]).toUpper();
  114. if (!servers_disabled) {
  115. server_status_tooltip_ = "Планируется отключение серверов игры " + day + month + " с " + time_beginning + " до " + time_end+ " (мск).";
  116. } else {
  117. server_status_tooltip_ = "Серверы игры отключены на профилактику<br>Время проф. работ: " + day + month + " с " + time_beginning + " до " + time_end + " (мск).";
  118. }
  119. tech_work_message_data = "";
  120. }