1 // Copyright (C) 2014-2018 Manuel Schneider
2 
3 #pragma once
4 #include <QObject>
5 #include <QString>
6 #include <QStringList>
7 #include <QJsonValue>
8 #include <QPluginLoader>
9 
10 namespace Core {
11 
12 class PluginSpec
13 {
14 public:
15 
16     enum class State : char {
17         Loaded,
18         NotLoaded,
19         Error
20     };
21 
22     PluginSpec(const QString &path);
23     ~PluginSpec();
24     PluginSpec(const PluginSpec &other) = delete;
25     PluginSpec &operator=(const PluginSpec &other) = delete;
26 
27     QString path() const;
28     QString iid() const;
29     QString id() const;
30     QString name() const;
31     QString version() const;
32     QString author() const;
33     QStringList dependencies() const;
34     QJsonValue metadata(const QString & key) const;
35 
36     bool load();
37     void unload();
38     State state() const;
39     QString lastError() const;
40 
41     QObject *instance();
42 
43 private:
44 
45     QPluginLoader loader_;
46     QString iid_;
47     QString id_;
48     QString name_;
49     QString version_;
50     QString author_;
51     QStringList dependencies_;
52     QString lastError_;
53     State state_;
54 
55 };
56 
57 }
58 
59 
60 
61 
62