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 
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 
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::P3D)) { return CSimulatorPluginInfo::p3dPluginIdentifier(); }
63  if (s.testFlag(CSimulatorInfo::XPLANE)) { return CSimulatorPluginInfo::xplanePluginIdentifier(); }
64  if (s.testFlag(CSimulatorInfo::FG)) { return CSimulatorPluginInfo::fgPluginIdentifier(); }
65  if (s.testFlag(CSimulatorInfo::MSFS)) { return CSimulatorPluginInfo::msfsPluginIdentifier(); }
66  if (s.testFlag(CSimulatorInfo::MSFS2024)) { return CSimulatorPluginInfo::msfs2024PluginIdentifier(); }
67 
68  return e;
69  }
70 
72  {
73  static const QString s("org.swift-project.plugins.simulator.p3d");
74  return s;
75  }
76 
78  {
79  static const QString s("org.swift-project.plugins.simulator.xplane");
80  return s;
81  }
82 
84  {
85  static const QString s("org.swift-project.plugins.simulator.flightgear");
86  return s;
87  }
88 
90  {
91  static const QString s("org.swift-project.plugins.simulator.msfs");
92  return s;
93  }
94 
96  {
97  static const QString s("org.swift-project.plugins.simulator.msfs2024");
98  return s;
99  }
100 
102  {
103  static const QString s("org.swift-project.plugins.simulator.emulated");
104  return s;
105  }
106 
108  {
109  static const QStringList identifiers({ p3dPluginIdentifier(), xplanePluginIdentifier(),
112  return identifiers;
113  }
114 
116  {
117  if (CBuildConfig::isRunningOnUnixPlatform())
118  {
119  // On UNIX we likely run XP
121  }
122 
123  return QStringList {
126  };
127  }
128 } // 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.
QString convertToQString(bool i18n=false) const
Cast as QString.
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.
bool contains(QLatin1StringView key) const const
QString arg(Args &&... args) const const
bool isEmpty() const const
#define SWIFT_DEFINE_VALUEOBJECT_MIXINS(Namespace, Class)
Explicit template definition of mixins for a CValueObject subclass.
Definition: valueobject.h:67