swift
globalsetup.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 <QJsonObject>
7 #include <QStringBuilder>
8 #include <QStringList>
9 #include <QSysInfo>
10 #include <QVersionNumber>
11 
12 #include "config/buildconfig.h"
13 #include "core/application.h"
14 #include "misc/crashhandler.h"
15 #include "misc/directoryutils.h"
16 #include "misc/json.h"
17 #include "misc/network/server.h"
18 #include "misc/network/user.h"
19 #include "misc/stringutils.h"
20 #include "misc/swiftdirectories.h"
21 
22 using namespace swift::config;
23 using namespace swift::misc;
24 using namespace swift::misc::json;
25 using namespace swift::misc::network;
26 
28 
29 namespace swift::core::data
30 {
31  CGlobalSetup::CGlobalSetup() : CIdentifiable("CGlobalSetup") {}
32 
34 
36 
38 
40 
41  const CUrl &CGlobalSetup::getSwiftSharedUrl() const { return m_sharedUrl; }
43 
44  CUrl CGlobalSetup::getHelpPageUrl() const { return m_onlineHelpUrl; }
45 
47 
49  {
50  return getDbRootDirectoryUrl()
51  .withAppendedPath("/service/jsonauthenticate.php")
52  .withSwitchedScheme("https", m_dbHttpsPort);
53  }
54 
55  bool CGlobalSetup::dbDebugFlag() const { return m_dbDebugFlag && CBuildConfig::isLocalDeveloperDebugBuild(); }
56 
57  void CGlobalSetup::setServerDebugFlag(bool debug) { m_dbDebugFlag = debug; }
58 
60  {
61  return m_sharedUrl.withAppendedPath(CGlobalSetup::schemaVersionString() + "/dbdata/");
62  }
63 
65  {
66  static const CServerList hardcoded({ CServer::fscFsdServer(), CServer::esTowerView() });
67  CServerList testServers(m_predefinedServers);
68  testServers.addIfAddressNotExists(hardcoded);
69  return testServers;
70  }
71 
73  {
74  if (m_mappingMinimumVersion.isEmpty()) { return false; }
76  return CBuildConfig::getVersion() >= min;
77  }
78 
79  QString CGlobalSetup::convertToQString(bool i18n) const { return convertToQString(", ", i18n); }
80 
81  QString CGlobalSetup::convertToQString(const QString &separator, bool i18n) const
82  {
83  QString s = u"Global setup loaded: " % separator % u"Mapping min.version: " %
84  this->getMappingMinimumVersionString() % separator
85 
86  % u"Help URL: " % m_onlineHelpUrl.toQString(i18n) % separator;
87  s += u"DB root directory: " % getDbRootDirectoryUrl().toQString(i18n) % separator % u"ICAO DB reader: " %
88  getDbIcaoReaderUrl().toQString(i18n) % separator % u"Model DB reader: " %
89  getDbModelReaderUrl().toQString(i18n) % separator % u"Airport DB reader: " %
90  getDbAirportReaderUrl().toQString(i18n) % separator % u"DB home page: " %
91  getDbHomePageUrl().toQString(i18n) % separator % u"DB login service: " %
92  getDbLoginServiceUrl().toQString(i18n) % separator;
93  s += u"VATSIM METARs: " % getVatsimMetarsUrl().toQString(i18n) % separator % u"VATSIM data file: " %
94  getVatsimDataFileUrl().toQString(i18n) % separator % u"VATSIM server file: " %
95  getVatsimServerFileUrl().toQString(i18n) % separator
96 
97  % u"Predefined servers: " % getPredefinedServers().toQString(i18n) % separator
98 
99  % u"AFV voice server URL: " % getAfvApiServerUrl().toQString(i18n) % separator
100 
101  % u"AFV map URL: " % getAfvMapUrl().toQString(i18n);
102 
103  return s;
104  }
105 
107  {
108  if (index.isMyself()) { return CVariant::fromValue(*this); }
109 
110  const ColumnIndex i = index.frontCasted<ColumnIndex>();
111  switch (i)
112  {
113  case IndexDbRootDirectory: return QVariant::fromValue(m_dbRootDirectoryUrl);
114  case IndexDbHttpsPort: return QVariant::fromValue(m_dbHttpsPort);
115  case IndexDbLoginService: return QVariant::fromValue(this->getDbLoginServiceUrl());
116  case IndexVatsimStatus: return QVariant::fromValue(m_vatsimStatusFileUrl);
117  case IndexVatsimData: return QVariant::fromValue(m_vatsimDataFileUrl);
118  case IndexVatsimServer: return QVariant::fromValue(m_vatsimServerFileUrl);
119  case IndexVatsimHttpFsd: return QVariant::fromValue(m_vatsimFsdHttpUrl);
120  case IndexVatsimMetars: return QVariant::fromValue(m_vatsimMetarsUrl);
121  case IndexSharedUrl: return QVariant::fromValue(m_sharedUrl);
122  case IndexOnlineHelpUrl: return QVariant::fromValue(m_onlineHelpUrl);
123  case IndexMappingMinimumVersion: return QVariant::fromValue(m_mappingMinimumVersion);
124  case IndexPredefinedServers: return QVariant::fromValue(m_predefinedServers);
125  case IndexAfvApiServerUrl: return QVariant::fromValue(m_afvApiServerUrl);
126  case IndexAfvMapUrl: return QVariant::fromValue(m_afvMapUrl);
127  default: return CValueObject::propertyByIndex(index);
128  }
129  }
130 
132  {
133  if (index.isMyself())
134  {
135  (*this) = variant.value<CGlobalSetup>();
136  return;
137  }
138 
139  const ColumnIndex i = index.frontCasted<ColumnIndex>();
140  switch (i)
141  {
142  case IndexDbRootDirectory: m_dbRootDirectoryUrl.setPropertyByIndex(index.copyFrontRemoved(), variant); break;
143  case IndexDbHttpsPort: m_dbHttpsPort = variant.toInt(); break;
144  case IndexDbLoginService: break; // cannot be changed
145  case IndexVatsimData: m_vatsimDataFileUrl = variant.value<CUrl>(); break;
146  case IndexVatsimServer: m_vatsimServerFileUrl = variant.value<CUrl>(); break;
147  case IndexVatsimHttpFsd: m_vatsimFsdHttpUrl = variant.value<CUrl>(); break;
148  case IndexVatsimMetars: m_vatsimMetarsUrl = variant.value<CUrl>(); break;
149  case IndexSharedUrl: m_sharedUrl = variant.value<CUrl>(); break;
150  case IndexOnlineHelpUrl: m_onlineHelpUrl = variant.value<CUrl>(); break;
151  case IndexMappingMinimumVersion: m_mappingMinimumVersion = variant.toString(); break;
152  case IndexPredefinedServers: m_predefinedServers = variant.value<CServerList>(); break;
153  case IndexAfvApiServerUrl: m_afvApiServerUrl = variant.value<CUrl>(); break;
154  case IndexAfvMapUrl: m_afvMapUrl = variant.value<CUrl>(); break;
155  default: CValueObject::setPropertyByIndex(index, variant); break;
156  }
157  }
158 
160  {
161  // This is not the current swift version, but the schema version
162  static const QString v("0.7.0");
163  return v;
164  }
165 } // namespace swift::core::data
Global settings for readers, debug flags, etc.
Definition: globalsetup.h:31
void setPropertyByIndex(swift::misc::CPropertyIndexRef index, const QVariant &variant)
Set property by index.
const swift::misc::network::CUrl & getSwiftSharedUrl() const
Shared URL.
Definition: globalsetup.cpp:41
swift::misc::network::CUrl getVatsimServerFileUrl() const
VATSIM server file URL.
Definition: globalsetup.h:108
bool dbDebugFlag() const
Debug flag.
Definition: globalsetup.cpp:55
bool isSwiftVersionMinimumMappingVersion() const
Meets the minimum mapping version.
Definition: globalsetup.cpp:72
const QString & getMappingMinimumVersionString() const
Creating mappings requires at least this version or higher.
Definition: globalsetup.h:124
swift::misc::network::CUrl getDbIcaoReaderUrl() const
ICAO reader URL.
Definition: globalsetup.cpp:33
swift::misc::network::CUrl getDbAirportReaderUrl() const
Airport reader URL.
Definition: globalsetup.cpp:37
swift::misc::network::CUrl getDbHomePageUrl() const
Home page url.
Definition: globalsetup.cpp:42
swift::misc::network::CUrl getDbInfoReaderUrl() const
Info data reader URL.
Definition: globalsetup.cpp:39
ColumnIndex
Properties by index.
Definition: globalsetup.h:35
swift::misc::network::CUrl getDbLoginServiceUrl() const
Login service.
Definition: globalsetup.cpp:48
swift::misc::network::CUrl getLegalDirectoryUrl() const
Legal directory URL.
Definition: globalsetup.cpp:46
const swift::misc::network::CUrl & getDbRootDirectoryUrl() const
Root directory of DB.
Definition: globalsetup.h:65
void setServerDebugFlag(bool debug)
Set debug flag.
Definition: globalsetup.cpp:57
const swift::misc::network::CUrl & getVatsimDataFileUrl() const
VATSIM data file URL.
Definition: globalsetup.h:105
static const QString & schemaVersionString()
Schema version (shared files, bootstrap file)
swift::misc::network::CUrl getHelpPageUrl() const
Help page URL.
Definition: globalsetup.cpp:44
swift::misc::network::CServerList getPredefinedServersPlusHardcodedServers() const
Predefined plus hardcoded.
Definition: globalsetup.cpp:64
QString convertToQString(bool i18n=false) const
Cast as QString.
Definition: globalsetup.cpp:79
const swift::misc::network::CUrl & getVatsimMetarsUrl() const
VATSIM METAR URL.
Definition: globalsetup.h:99
swift::misc::network::CUrl getDbModelReaderUrl() const
Model reader URL.
Definition: globalsetup.cpp:35
swift::misc::network::CUrl getAfvMapUrl() const
AFV map URL.
Definition: globalsetup.h:140
const swift::misc::network::CServerList & getPredefinedServers() const
Predefined servers.
Definition: globalsetup.h:117
QVariant propertyByIndex(swift::misc::CPropertyIndexRef index) const
Property by index.
swift::misc::network::CUrl getSharedDbDataDirectoryUrl()
Get shared DB data directory URL.
Definition: globalsetup.cpp:59
swift::misc::network::CUrl getAfvApiServerUrl() const
AFV voice server URL.
Definition: globalsetup.h:137
Base class with a member CIdentifier to be inherited by a class which has an identity in the environm...
Definition: identifiable.h:24
Non-owning reference to a CPropertyIndex with a subset of its features.
Q_REQUIRED_RESULT CPropertyIndexRef copyFrontRemoved() const
Copy with first element removed.
CastType frontCasted() const
First element casted to given type, usually the PropertIndex enum.
bool isMyself() const
Myself index, used with nesting.
static CVariant fromValue(T &&value)
Construct a variant from a value.
Definition: variant.h:136
void setPropertyByIndex(CPropertyIndexRef index, const QVariant &variant)
Set property by index.
Definition: mixinindex.h:158
QVariant propertyByIndex(CPropertyIndexRef index) const
Property by index.
Definition: mixinindex.h:165
QString toQString(bool i18n=false) const
Cast as QString.
Definition: mixinstring.h:74
Value object encapsulating a list of servers.
Definition: serverlist.h:23
Value object encapsulating information of a location, kind of simplified CValueObject compliant versi...
Definition: url.h:27
void setPropertyByIndex(swift::misc::CPropertyIndexRef index, const QVariant &variant)
Set property by index.
Definition: url.cpp:245
CUrl withSwitchedScheme(const QString &protocol, int port) const
Switch protocol.
Definition: url.cpp:123
CUrl withAppendedPath(const QString &path) const
Append path.
Definition: url.cpp:115
Core data traits (aka cached values) and classes.
Free functions in swift::misc.
bool isEmpty() const const
QVariant fromValue(T &&value)
int toInt(bool *ok) const const
QString toString() const const
T value() const &const
QVersionNumber fromString(QAnyStringView string, qsizetype *suffixIndex)
#define SWIFT_DEFINE_VALUEOBJECT_MIXINS(Namespace, Class)
Explicit template definition of mixins for a CValueObject subclass.
Definition: valueobject.h:67