swift
pluginmanagersimulator.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 <QJsonObject>
7 #include <QJsonValue>
8 #include <QtGlobal>
9 
10 #include "core/application.h"
11 #include "core/simulator.h"
12 #include "misc/logmessage.h"
13 #include "misc/swiftdirectories.h"
14 
15 namespace swift::core
16 {
17  using namespace swift::misc;
18  using namespace swift::misc::simulation;
19 
21 
23  {
24  return getPluginById<ISimulatorFactory>(pluginId);
25  }
26 
28  {
29  if (!m_plugins.contains(pluginId)) { return nullptr; }
30  PluginExtended &plugin = m_plugins[pluginId];
31  if (!plugin.listener)
32  {
33  ISimulatorFactory *factory = this->getFactory(pluginId);
34  if (!factory)
35  {
36  CLogMessage(this).warning(u"Could not load plugin '%1'.") << pluginId;
37  m_plugins.remove(pluginId);
38  return nullptr;
39  }
40 
41  ISimulatorListener *listener = factory->createListener(plugin.info);
42  connect(qApp, &QCoreApplication::aboutToQuit, listener, &QObject::deleteLater);
43  plugin.listener = listener;
44  }
45 
46  return plugin.listener;
47  }
48 
50  {
51  if (!m_plugins.contains(pluginId)) { return nullptr; }
52  PluginExtended &plugin = m_plugins[pluginId];
53  return plugin.listener;
54  }
55 
57  {
59  for (const auto &i : m_plugins) { list.push_back(i.info); }
60  return list;
61  }
62 
64  {
65  if (m_plugins.isEmpty()) { return 0; }
66 
67  int c = 0;
68  for (PluginExtended &pi : m_plugins)
69  {
70  if (!pi.listener) { continue; }
71  if (!pi.listener->isRunning()) { continue; }
72  pi.listener->check();
73  c++;
74  }
75  return c;
76  }
77 
79  {
81 
82  const CSequence<QJsonObject> &plugins = getPlugins();
83  for (const QJsonObject &json : plugins)
84  {
85  const QString iid = json["IID"].toString();
86  if (iid == QStringLiteral("org.swift-project.swift_core.simulatorinterface"))
87  {
88  auto it = m_plugins.insert(pluginIdentifier(json), {});
89  it->info.convertFromJson(json);
90  }
91  }
92  }
93 
95  {
96  return { QStringLiteral("org.swift-project.swift_core.simulatorinterface"),
97  QStringLiteral("org.swift-project.swiftgui.pluginconfiginterface") };
98  }
99 
101  {
102  static const QString d(CFileUtils::appendFilePaths(CSwiftDirectories::pluginsDirectory(), "simulator"));
103  return d;
104  }
105 } // namespace swift::core
virtual void collectPlugins()
Looks for all available plugins.
swift::misc::simulation::CSimulatorPluginInfoList getAvailableSimulatorPlugins() const
Get all simulator driver plugins.
CPluginManagerSimulator(QObject *parent=nullptr)
Ctor.
ISimulatorListener * createListener(const QString &pluginId)
Create simulator listener from the plugin In case one is existing already, it is returned instead....
int checkAvailableListeners()
Check if simulator is connected.
virtual const QString & pluginDirectory() const
Where to look for plugins, absolute path. Default implementation returns plugins in the application d...
virtual swift::misc::CSequence< QString > acceptedIids() const
Returns the list of valid IIDs for the implementation.
ISimulatorFactory * getFactory(const QString &pluginId)
Get simulator factory from the plugin.
ISimulatorListener * getListener(const QString &pluginId)
Get previously created simulator listener from the plugin Returns nullptr if listener is not yet crea...
Base class for all contexts that provide plugin support.
Definition: pluginmanager.h:24
const swift::misc::CSequence< QJsonObject > & getPlugins() const
Gets direct access to all plugins' metadata.
Definition: pluginmanager.h:69
QString pluginIdentifier(const QJsonObject &metadata) const
Gets the plugin identifier from the metadata.
virtual void collectPlugins()
Looks for all available plugins.
Factory pattern class to create instances of ISimulator.
Definition: simulator.h:691
virtual ISimulatorListener * createListener(const swift::misc::simulation::CSimulatorPluginInfo &info)=0
Simulator listener instance.
Interface to a simulator listener.
Definition: simulator.h:630
static QString appendFilePaths(const QString &path1, const QString &path2)
Append file paths.
Definition: fileutils.cpp:95
Class for emitting a log message.
Definition: logmessage.h:27
Derived & warning(const char16_t(&format)[N])
Set the severity to warning, providing a format string.
void push_back(const T &value)
Appends an element at the end of the sequence.
Definition: sequence.h:305
static const QString & pluginsDirectory()
Plugins directory.
Value object encapsulating a list of SimulatorInfo objects.
Backend services of the swift project, like dealing with the network or the simulators.
Definition: actionbind.cpp:7
Free functions in swift::misc.