Overte C++ Documentation
PluginManager.h
1 //
2 // Created by Bradley Austin Davis on 2015/08/08
3 // Copyright 2015 High Fidelity, Inc.
4 //
5 // Distributed under the Apache License, Version 2.0.
6 // See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html
7 //
8 #pragma once
9 
10 #include <QObject>
11 #include <QtCore/QSharedPointer>
12 
13 #include <DependencyManager.h>
14 #include <SettingHandle.h>
15 #include <QJsonDocument>
16 #include <QJsonObject>
17 
18 #include "Forward.h"
19 
20 class QPluginLoader;
21 using PluginManagerPointer = QSharedPointer<PluginManager>;
22 
39 class PluginManager : public QObject, public Dependency {
40  SINGLETON_DEPENDENCY
41  Q_OBJECT
42 
43 public:
44 
49  struct PluginInfo {
53  QJsonObject metaData;
54 
59  QString name;
60 
65  bool disabled = false;
66 
71  bool filteredOut = false;
72 
77  bool wrongVersion = false;
78 
83  bool loaded = false;
84  };
85 
86 
87  static PluginManagerPointer getInstance();
88 
97  const DisplayPluginList& getDisplayPlugins();
98 
107  const InputPluginList& getInputPlugins();
108 
117  const CodecPluginList& getCodecPlugins();
118 
126  const SteamClientPluginPointer getSteamClientPlugin();
127 
135  const OculusPlatformPluginPointer getOculusPlatformPlugin();
136 
144  DisplayPluginList getPreferredDisplayPlugins();
145 
153  void setPreferredDisplayPlugins(const QStringList& displays);
154 
162  void disableDisplays(const QStringList& displays);
163 
170  void disableInputs(const QStringList& inputs);
171 
176  void saveSettings();
177 
185  void setContainer(PluginContainer* container) { _container = container; }
186 
187  int instantiate();
188  void shutdown();
189 
190 
201  void setDisplayPluginProvider(const DisplayPluginProvider& provider);
202 
213  void setInputPluginProvider(const InputPluginProvider& provider);
214 
225  void setCodecPluginProvider(const CodecPluginProvider& provider);
226 
232  void setInputPluginSettingsPersister(const InputPluginSettingsPersister& persister);
233 
239  QStringList getRunningInputDeviceNames() const;
240 
241  using PluginFilter = std::function<bool(const QJsonObject&)>;
242 
253  void setPluginFilter(PluginFilter pluginFilter) { _pluginFilter = pluginFilter; }
254 
260  Q_INVOKABLE DisplayPluginList getAllDisplayPlugins();
261 
262  bool getEnableOculusPluginSetting() { return _enableOculusPluginSetting.get(); }
263  void setEnableOculusPluginSetting(bool value);
264 
272  std::vector<PluginInfo> getPluginInfo() const;
273 
274 signals:
275  void inputDeviceRunningChanged(const QString& pluginName, bool isRunning, const QStringList& runningDevices);
276 
277 private:
278  PluginManager() = default;
279 
280  DisplayPluginProvider _displayPluginProvider { []()->DisplayPluginList { return {}; } };
281  InputPluginProvider _inputPluginProvider { []()->InputPluginList { return {}; } };
282  CodecPluginProvider _codecPluginProvider { []()->CodecPluginList { return {}; } };
283  InputPluginSettingsPersister _inputSettingsPersister { [](const InputPluginList& list) {} };
284  PluginContainer* _container { nullptr };
285  DisplayPluginList _displayPlugins;
286  InputPluginList _inputPlugins;
287  PluginFilter _pluginFilter { [](const QJsonObject&) { return true; } };
288 
289  using Loader = QSharedPointer<QPluginLoader>;
290  using LoaderList = QList<Loader>;
291 
292  const LoaderList& getLoadedPlugins() const;
293  Setting::Handle<bool> _enableScriptingPlugins {
294  "private/enableScriptingPlugins", (bool)qgetenv("enableScriptingPlugins").toInt()
295  };
296 
297  Setting::Handle<bool> _enableOculusPluginSetting { "enableOculusPluginSetting", false };
298 };
299 
300 // TODO: we should define this value in CMake, and then use CMake
301 // templating to generate the individual plugin.json files, so that we
302 // don't have to update every plugin.json file whenever we update this
303 // value. The value should match "version" in
304 // plugins/*/src/plugin.json
305 // plugins/oculus/src/oculus.json
306 // etc
307 static const int HIFI_PLUGIN_INTERFACE_VERSION = 1;
Manages loadable plugins.
Definition: PluginManager.h:39
void saveSettings()
Save the settings.
Definition: PluginManager.cpp:383
void setContainer(PluginContainer *container)
Set the container for plugins.
Definition: PluginManager.h:185
const OculusPlatformPluginPointer getOculusPlatformPlugin()
Get the pointer to the Oculus Platform Plugin.
Definition: PluginManager.cpp:232
void disableInputs(const QStringList &inputs)
Disable a list of inputs.
Definition: PluginManager.cpp:379
void setPreferredDisplayPlugins(const QStringList &displays)
Sets the list of preferred display plugins.
Definition: PluginManager.cpp:349
const InputPluginList & getInputPlugins()
Get the list of input plugins.
Definition: PluginManager.cpp:297
void setCodecPluginProvider(const CodecPluginProvider &provider)
Provide a list of statically linked plugins.
Definition: PluginManager.cpp:42
void setInputPluginSettingsPersister(const InputPluginSettingsPersister &persister)
Set the input plugin persister.
Definition: PluginManager.cpp:46
const DisplayPluginList & getDisplayPlugins()
Get the list of display plugins.
Definition: PluginManager.cpp:261
const CodecPluginList & getCodecPlugins()
Get the list of audio codec plugins.
Definition: PluginManager.cpp:188
QStringList getRunningInputDeviceNames() const
Get the list of running input devices.
Definition: PluginManager.cpp:339
Q_INVOKABLE DisplayPluginList getAllDisplayPlugins()
Get a list of all the display plugins.
Definition: PluginManager.cpp:257
void setPluginFilter(PluginFilter pluginFilter)
Set the plugin filter that determines whether a plugin will be used or not.
Definition: PluginManager.h:253
std::vector< PluginInfo > getPluginInfo() const
Returns information about known plugins.
Definition: PluginManager.cpp:183
void setInputPluginProvider(const InputPluginProvider &provider)
Provide a list of statically linked plugins.
Definition: PluginManager.cpp:38
DisplayPluginList getPreferredDisplayPlugins()
Returns the list of preferred display plugins.
Definition: PluginManager.cpp:353
const SteamClientPluginPointer getSteamClientPlugin()
Get the pointer to the Steam client plugin.
Definition: PluginManager.cpp:216
void setDisplayPluginProvider(const DisplayPluginProvider &provider)
Provide a list of statically linked plugins.
Definition: PluginManager.cpp:34
void disableDisplays(const QStringList &displays)
Disable a list of displays.
Definition: PluginManager.cpp:375
T get() const
Returns the value of the setting, or the default value if not found.
Definition: SettingHandle.h:240
Information about known plugins.
Definition: PluginManager.h:49
bool loaded
Whether the plugin has been loaded successfully.
Definition: PluginManager.h:83
bool filteredOut
Whether the plugin has been filtered out by a filter.
Definition: PluginManager.h:71
bool disabled
Whether the plugin has been disabled.
Definition: PluginManager.h:65
QString name
Filename.
Definition: PluginManager.h:59
QJsonObject metaData
Plugin metadata.
Definition: PluginManager.h:53
bool wrongVersion
Whether the plugin has been not loaded because it's the wrong version.
Definition: PluginManager.h:77