MT Showcase SDK
 All Classes Namespaces Functions Variables Typedefs Enumerations Enumerator Pages
Package.hpp
1 #pragma once
2 
3 #include "Export.hpp"
4 #include "ComponentDefinition.hpp"
5 #include "Hashes.hpp"
6 
7 #include <QFileInfo>
8 #include <QLibrary>
9 
10 #include <memory>
11 #include <unordered_map>
12 
13 namespace Showcase
14 {
15 
16  SHOWCASE_API QString libraryExtension();
17 
18  // ----------------------------------------------------------------------
19 
20  struct SHOWCASE_API Version
21  {
22  Version(int majorVersion=0, int minorVersion=0, int patchVersion=0)
23  : m_version(std::make_tuple(majorVersion, minorVersion, patchVersion)) {}
24 
25 
26  int majorVersion() const { return std::get<0>(m_version); }
27  int minorVersion() const { return std::get<1>(m_version); }
28  int patchVersion() const { return std::get<2>(m_version); }
29 
30  bool operator<(const Version& v) const { return m_version < v.m_version; }
31  static Version fromString(const QString& str);
32 
33  private:
34  std::tuple<int, int, int> m_version;
35  };
36 
37 
38  // ----------------------------------------------------------------------
39 
81  class SHOWCASE_API Package
82  {
83  public:
84  Package(const QFileInfo& jsonFile);
85  ~Package();
86 
87  const QByteArray &name() const;
88 
89  bool operator<(const Package& other) const;
90 
95  void preparePackage();
96 
97  void load();
98  void unload();
99 
100  ComponentDefinitionPtr component(const QString& componentName);
101 
103  bool canBeUsed() const;
104 
105  static std::shared_ptr<Package> fromJson(const QFileInfo& packageDefinition);
106  static bool isPackageManifest(const QFileInfo& fi);
107  static QString packageExtension();
108 
109  private:
110  void parseDefinition();
111 
112  void parseData();
113  void parseLibs(const QVariant& variant, const QString& path);
114  void parseComponents(const QVariant& variant, const QString& path);
115 
116  QString searchPathName(const QFileInfo & jsonFile) const;
117 
118  QFileInfo m_packageFile;
119  bool m_parsed;
120 
121  std::vector<QLibrary*> m_loadedLibs;
122 
123  QByteArray m_name;
124  std::vector<QString> m_libraries;
125  Version m_requiredVersion;
126  Version m_packageVersion;
127 
128  std::unordered_map<QByteArray, ComponentDefinitionPtr> m_components;
129  };
130  typedef std::shared_ptr<Package> PackagePtr;
131 
132 }