swift
infobarwebreadersstatuscomponent.cpp
1 // SPDX-FileCopyrightText: Copyright (C) 2015 swift Project Community / Contributors
2 // SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-swift-pilot-client-1
3 
5 
6 #include <QtGlobal>
7 
8 #include "ui_infobarwebreadersstatuscomponent.h"
9 
10 #include "core/webdataservices.h"
11 #include "gui/guiapplication.h"
12 #include "misc/verify.h"
13 
14 using namespace swift::gui;
15 using namespace swift::misc;
16 using namespace swift::core;
17 using namespace swift::misc::network;
18 
19 namespace swift::gui::components
20 {
21  CInfoBarWebReadersStatusBase::CInfoBarWebReadersStatusBase(QWidget *parent) : QFrame(parent) {}
22 
24  {
25  Q_ASSERT_X(sGui, Q_FUNC_INFO, "No sGui");
26  this->initLeds();
27 
28  // connect timer
29  m_timer.setInterval(30 * 1000);
30  m_timer.start();
31  m_timer.setObjectName("CInfoBarWebReadersStatusBase::CheckSwiftDbTimer");
32  bool c = connect(&m_timer, &QTimer::timeout, this, &CInfoBarWebReadersStatusBase::checkData);
33  Q_ASSERT_X(c, Q_FUNC_INFO, "Failed connect");
34 
35  if (sGui->hasWebDataServices())
36  {
37  c = connect(sGui->getWebDataServices(), &CWebDataServices::dataRead, this,
38  &CInfoBarWebReadersStatusBase::dataRead, Qt::QueuedConnection);
39  Q_ASSERT_X(c, Q_FUNC_INFO, "Failed connect");
40  }
41 
42  Q_UNUSED(c)
43  }
44 
46 
48  {
49  if (!m_ledConsolidation) { return; }
50  m_ledConsolidation->setOn(running);
51  }
52 
54  {
55  CLedWidget::LedShape shape = CLedWidget::Rounded;
56  m_ledDataReady->setValues(CLedWidget::Yellow, CLedWidget::Black, shape, "all data ready", "data missing", 14);
57  if (m_ledConsolidation)
58  {
59  m_ledConsolidation->setValues(CLedWidget::Blue, CLedWidget::Black, shape, "consolidation running", "idle",
60  14);
61  }
62 
63  m_ledIcaoAircraft->setValues(CLedWidget::Yellow, CLedWidget::Black, CLedWidget::Red, shape, "reading", "idle",
64  "failed", 14);
65  m_ledIcaoAirline->setValues(CLedWidget::Yellow, CLedWidget::Black, CLedWidget::Red, shape, "reading", "idle",
66  "failed", 14);
67  m_ledCountries->setValues(CLedWidget::Yellow, CLedWidget::Black, CLedWidget::Red, shape, "reading", "idle",
68  "failed", 14);
69  m_ledModels->setValues(CLedWidget::Yellow, CLedWidget::Black, CLedWidget::Red, shape, "reading", "idle",
70  "failed", 14);
71  m_ledLiveries->setValues(CLedWidget::Yellow, CLedWidget::Black, CLedWidget::Red, shape, "reading", "idle",
72  "failed", 14);
73  m_ledDistributors->setValues(CLedWidget::Yellow, CLedWidget::Black, CLedWidget::Red, shape, "reading", "idle",
74  "failed", 14);
75  }
76 
77  void CInfoBarWebReadersStatusBase::dataRead(CEntityFlags::Entity entities, CEntityFlags::ReadState readState,
78  int count)
79  {
80  Q_UNUSED(count);
81  QList<CLedWidget *> leds = this->entitiesToLeds(entities);
82  if (!leds.isEmpty()) { this->setLedReadStates(leds, readState); }
83  }
84 
86  {
87  const bool allData = hasAllData();
88  m_ledDataReady->setOn(allData);
89  }
90 
92  {
93  if (m_ledConsolidation) { m_ledConsolidation->setVisible(show); }
94  }
95 
96  void CInfoBarWebReadersStatusBase::setLedReadStates(const QList<CLedWidget *> &leds,
97  CEntityFlags::ReadState readState)
98  {
99  for (CLedWidget *led : leds) { this->setLedReadState(led, readState); }
100  }
101 
103  {
104  Q_ASSERT_X(led, Q_FUNC_INFO, "no LED");
105  const int resetTimeMs = qRound(2.5 * 1000);
106  switch (readState)
107  {
108  case CEntityFlags::ReadSkipped:
109  case CEntityFlags::ReadFinished:
110  case CEntityFlags::ReadFinishedRestricted:
111  led->setOn(false);
112  led->blink(resetTimeMs); // blink here (temp. "on"), since read from cache results in immediate ReadFinished
113  break;
114  case CEntityFlags::ReadStarted:
115  case CEntityFlags::ReadParsing: led->setOn(true); break;
116  case CEntityFlags::ReadFailed: led->setTriState(2 * resetTimeMs); break;
117  default: SWIFT_VERIFY_X(false, Q_FUNC_INFO, "read state not handled"); break;
118  }
119  }
120 
121  QList<CLedWidget *> CInfoBarWebReadersStatusBase::entitiesToLeds(CEntityFlags::Entity entities) const
122  {
123  QList<CLedWidget *> leds;
124  if (entities.testFlag(CEntityFlags::CountryEntity)) { leds << m_ledCountries; }
125  if (entities.testFlag(CEntityFlags::DistributorEntity)) { leds << m_ledDistributors; }
126  if (entities.testFlag(CEntityFlags::AircraftIcaoEntity)) { leds << m_ledIcaoAircraft; }
127  if (entities.testFlag(CEntityFlags::AirlineIcaoEntity)) { leds << m_ledIcaoAirline; }
128  if (entities.testFlag(CEntityFlags::LiveryEntity)) { leds << m_ledLiveries; }
129  if (entities.testFlag(CEntityFlags::ModelEntity)) { leds << m_ledModels; }
130  return leds;
131  }
132 
134  {
135  if (!sGui) { return false; }
136  if (!sGui->hasWebDataServices()) { return false; }
142  }
143 
144  void CInfoBarWebReadersStatusBase::setLeds(CLedWidget *ledDataReady, CLedWidget *ledConsolidation,
145  CLedWidget *ledIcaoAircraft, CLedWidget *ledIcaoAirline,
146  CLedWidget *ledCountries, CLedWidget *ledDistributors,
147  CLedWidget *ledLiveries, CLedWidget *ledModels)
148  {
149  m_ledDataReady = ledDataReady;
150  m_ledConsolidation = ledConsolidation;
151  m_ledIcaoAircraft = ledIcaoAircraft;
152  m_ledIcaoAirline = ledIcaoAirline;
153  m_ledCountries = ledCountries;
154  m_ledDistributors = ledDistributors;
155  m_ledLiveries = ledLiveries;
156  m_ledModels = ledModels;
157  }
158 
161  {
162  ui->setupUi(this);
163  this->setLeds(ui->led_DataReady, ui->led_Consolidation, ui->led_IcaoAircraft, ui->led_IcaoAirline,
164  ui->led_Countries, ui->led_Distributors, ui->led_Liveries, ui->led_Models);
165  this->init();
166  }
167 
169 
171  {
172  ui->lbl_Consolidation->setVisible(show);
174  }
175 } // namespace swift::gui::components
bool hasWebDataServices() const
Web data services available?
CWebDataServices * getWebDataServices() const
Get the web data services.
int getDistributorsCount() const
Distributors count.
int getModelsCount() const
Models count.
int getCountriesCount() const
Country count.
int getAircraftIcaoCodesCount() const
Aircraft ICAO codes count.
int getAirlineIcaoCodesCount() const
Airline ICAO codes count.
int getLiveriesCount() const
Liveries count.
Displaying an LED as widget. Non copyable.
Definition: led.h:29
void setTriState(int resetTimeMs=-1)
Sets the 3rd state.
Definition: led.cpp:253
void setValues(LedColor onColor, LedColor offColor, LedShape shape, const QString &toolTipOn, const QString &toolTipOff, int width=-1)
New values dual state.
Definition: led.cpp:197
void setOn(bool on)
Allows to set the led value {true, false}.
Definition: led.h:81
void blink(int resetTimeMs=500)
Set to on for resetTimeMs.
Definition: led.cpp:247
LedShape
Shapes.
Definition: led.h:51
Info bar displaying status of web readers(swift DB, ...)
virtual void showConsolidationStatus(bool show)
Show the consolidation status.
virtual void consolidationRunning(bool running)
Consolidation is running.
void setLeds(swift::gui::CLedWidget *ledDataReady, CLedWidget *ledConsolidation, swift::gui::CLedWidget *ledIcaoAircraft, swift::gui::CLedWidget *ledIcaoAirline, swift::gui::CLedWidget *ledCountries, swift::gui::CLedWidget *ledDistributors, swift::gui::CLedWidget *ledLiveries, swift::gui::CLedWidget *ledModels)
Initial setup of leds.
void setLedReadStates(const QList< CLedWidget * > &leds, swift::misc::network::CEntityFlags::ReadState readState)
Set LED states.
void setLedReadState(CLedWidget *led, swift::misc::network::CEntityFlags::ReadState readState)
Set the LED read state.
void dataRead(swift::misc::network::CEntityFlags::Entity entities, swift::misc::network::CEntityFlags::ReadState readState, int count)
Data have been read.
QList< CLedWidget * > entitiesToLeds(swift::misc::network::CEntityFlags::Entity entities) const
Maps entity to its id.
Info bar displaying status of web readers(swift DB, ...)
virtual void showConsolidationStatus(bool show)
Show the consolidation status.
SWIFT_GUI_EXPORT swift::gui::CGuiApplication * sGui
Single instance of GUI application object.
Backend services of the swift project, like dealing with the network or the simulators.
Definition: actionbind.cpp:7
High level reusable GUI components.
Definition: aboutdialog.cpp:13
GUI related classes.
Free functions in swift::misc.
#define SWIFT_VERIFY_X(COND, WHERE, WHAT)
A weaker kind of assert.
Definition: verify.h:26