swift
simulatorplugininfo.cpp
1 // SPDX-FileCopyrightText: Copyright (C) 2013 swift Project Community / Contributors
2 // SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-swift-pilot-client-1
3 
5 
6 #include <QJsonValue>
7 #include <QtGlobal>
8 
9 #include "config/buildconfig.h"
10 
11 using namespace swift::config;
12 using namespace swift::misc;
13 
14 SWIFT_DEFINE_VALUEOBJECT_MIXINS(swift::misc::simulation, CSimulatorPluginInfo)
15 
16 namespace swift::misc::simulation
17 {
18  CSimulatorPluginInfo::CSimulatorPluginInfo(const QString &identifier, const QString &name, const QString &simulator,
19  const QString &description, bool valid)
20  : m_identifier(identifier), m_name(name), m_simulator(simulator), m_description(description), m_info(simulator),
21  m_valid(valid)
22  {
23  Q_ASSERT_X(m_info.isSingleSimulator(), Q_FUNC_INFO, "need single simulator");
24  }
25 
26  void CSimulatorPluginInfo::convertFromJson(const QJsonObject &json)
27  {
28  if (json.contains("IID")) // comes from the plugin
29  {
30  if (!json.contains("MetaData")) { throw CJsonException("Missing 'MetaData'"); }
31 
32  // json data is already validated by CPluginManagerSimulator
33  CJsonScope scope("MetaData");
34  Q_UNUSED(scope)
35  CValueObject::convertFromJson(json["MetaData"].toObject());
36  m_valid = true;
37  }
38  else { CValueObject::convertFromJson(json); }
39 
40  // set info if it wasn't set already
41  if (m_info.isNoSimulator() && !m_simulator.isEmpty())
42  {
43  if (!this->isEmulatedPlugin()) { m_info = CSimulatorInfo(m_simulator); }
44  }
45  }
46 
47  bool CSimulatorPluginInfo::isUnspecified() const { return m_identifier.isEmpty(); }
48 
50 
51  QString CSimulatorPluginInfo::convertToQString(bool i18n) const
52  {
53  Q_UNUSED(i18n)
54  return QStringLiteral("%1 (%2)").arg(m_name, m_identifier);
55  }
56 
58  {
59  static const QString e;
60  if (!simInfo.isSingleSimulator()) { return e; }
61  const CSimulatorInfo::Simulator s = simInfo.getSimulator();
62  if (s.testFlag(CSimulatorInfo::FSX)) { return CSimulatorPluginInfo::fsxPluginIdentifier(); }
63  if (s.testFlag(CSimulatorInfo::FS9)) { return CSimulatorPluginInfo::fs9PluginIdentifier(); }
64  if (s.testFlag(CSimulatorInfo::P3D)) { return CSimulatorPluginInfo::p3dPluginIdentifier(); }
65  if (s.testFlag(CSimulatorInfo::XPLANE)) { return CSimulatorPluginInfo::xplanePluginIdentifier(); }
66  if (s.testFlag(CSimulatorInfo::FG)) { return CSimulatorPluginInfo::fgPluginIdentifier(); }
67  if (s.testFlag(CSimulatorInfo::MSFS)) { return CSimulatorPluginInfo::msfsPluginIdentifier(); }
68  if (s.testFlag(CSimulatorInfo::MSFS2024)) { return CSimulatorPluginInfo::msfs2024PluginIdentifier(); }
69 
70  return e;
71  }
72 
74  {
75  static const QString s("org.swift-project.plugins.simulator.fsx");
76  return s;
77  }
78 
80  {
81  static const QString s("org.swift-project.plugins.simulator.p3d");
82  return s;
83  }
84 
86  {
87  static const QString s("org.swift-project.plugins.simulator.fs9");
88  return s;
89  }
90 
92  {
93  static const QString s("org.swift-project.plugins.simulator.xplane");
94  return s;
95  }
96 
98  {
99  static const QString s("org.swift-project.plugins.simulator.flightgear");
100  return s;
101  }
102 
104  {
105  static const QString s("org.swift-project.plugins.simulator.msfs");
106  return s;
107  }
108 
110  {
111  static const QString s("org.swift-project.plugins.simulator.msfs2024");
112  return s;
113  }
114 
116  {
117  static const QString s("org.swift-project.plugins.simulator.emulated");
118  return s;
119  }
120 
122  {
123  static const QStringList identifiers({ fsxPluginIdentifier(), p3dPluginIdentifier(), xplanePluginIdentifier(),
126  return identifiers;
127  }
128 
130  {
131  if (CBuildConfig::isRunningOnUnixPlatform())
132  {
133  // On UNIX we likely run XP
134  return QStringList { xplanePluginIdentifier(), fgPluginIdentifier() };
135  }
136 
137  return QStringList {
140  };
141  }
142 } // namespace swift::misc::simulation
Thrown when a convertFromJson method encounters an unrecoverable error in JSON data.
Definition: jsonexception.h:24
Pseudo-RAII pattern that tracks the current JSON value being converted.
Definition: jsonexception.h:50
void convertFromJson(const QJsonObject &json)
Assign from JSON object.
Definition: mixinjson.h:153
Simple hardcoded info about the corresponding simulator.
Definition: simulatorinfo.h:41
bool isSingleSimulator() const
Single simulator selected.
bool isNoSimulator() const
No simulator?
Simulator getSimulator() const
Simulator.
static const QString & identifierFromSimulatorInfo(const CSimulatorInfo &)
Simulator info to plugin indentifier, empty string if not single simulator.
static const QString & msfsPluginIdentifier()
Plugin identifier (MSFS 2020)
void convertFromJson(const QJsonObject &json)
Assign from JSON object.
static const QString & emulatedPluginIdentifier()
Plugin identifier (emulated simulator plugin)
bool isEmulatedPlugin() const
Is this the emulated driver?
const QString & getIdentifier() const
Identifier.
static const QStringList & allIdentifiers()
All valid identifiers.
static const QString & fsxPluginIdentifier()
Plugin identifier (FSX)
QString convertToQString(bool i18n=false) const
Cast as QString.
static const QString & fs9PluginIdentifier()
Plugin identifier (FS9)
static const QString & fgPluginIdentifier()
Plugin identifier (FlightGear)
static QStringList guessDefaultPlugins()
Guess default plugins.
static const QString & p3dPluginIdentifier()
Plugin identifier (P3D)
static const QString & xplanePluginIdentifier()
Plugin identifier (XPlane)
bool isUnspecified() const
Unspecified simulator.
static const QString & msfs2024PluginIdentifier()
Plugin identifier (MSFS 2024)
Free functions in swift::misc.
#define SWIFT_DEFINE_VALUEOBJECT_MIXINS(Namespace, Class)
Explicit template definition of mixins for a CValueObject subclass.
Definition: valueobject.h:67