PluginCache.h
Go to the documentation of this file.
1#pragma once
2
3#include <future>
4#include <memory>
5#include <mutex>
6
7#include <QDateTime>
8#include <QPluginLoader>
9#include <QSet>
10
12
14
15
16class QProgressDialog;
17
19using ArmarXWidgetInfoPtr = std::shared_ptr<ArmarXWidgetInfo>;
20
22using WidgetCreatorMap = std::map<QString, ArmarXWidgetInfoPtr>;
23
24namespace armarx
25{
26
28 {
29 QSharedPointer<QPluginLoader> pluginLoader;
30 QString pluginPath;
31 QByteArray hash;
32 QDateTime lastModified;
34 };
35
37 {
38 public:
41 bool cachePlugin(const QString& pluginPath);
42 bool cacheWidget(QString widgetName, ArmarXWidgetInfoPtr widgetCreator);
43 ArmarXWidgetInfoPtr getWidgetCreator(const QString& widgetName);
44 QStringList getAvailableWidgetNames() const;
46 const QString settingsOrganization = "KIT";
47 const QString settingsApplicationName = "/PluginCache.conf";
49 static QString GetIconCachePath();
50 static QString GetIconPath(const QString& widgetName);
51 static QString GetCategoryIconPath(const QString& widgetName);
52 void preloadAsync(QStringList widgetNames, int delayMS = 1000);
53 void clearCacheFile();
54 QByteArray getHash(const QString& pluginPath);
55
56 void removeWidgetFromCache(QString pluginPath, QString widgetName);
57 void removePluginFromCache(QString pluginPath);
58 static bool ContainsAny(const QString& str, const QStringList& items);
59
60 protected:
61 void updateLastModifiedTimestamp(const QString& pluginPath);
62 void writeToCache(const QString& pluginPath);
63 PluginData loadFromCache(const QString& pluginPath);
64 WidgetCreatorMap loadPlugin(QSharedPointer<QPluginLoader> loader);
65 const QString cachePath;
66 QMap<QString, PluginData> pluginData;
68 QSettings s;
69 mutable std::recursive_mutex cacheMutex;
70 std::future<void> preloadFuture;
71 bool shutdown = false;
72 };
73
74 using PluginCachePtr = std::shared_ptr<PluginCache>;
75
76} // namespace armarx
std::shared_ptr< ArmarXWidgetInfo > ArmarXWidgetInfoPtr
armarx::ArmarXWidgetControllerPtr(* WidgetCreatorFunction)()
std::map< QString, ArmarXWidgetInfoPtr > WidgetCreatorMap
std::string str(const T &t)
The ArmarXWidgetInfo class.
void writeToCache(const QString &pluginPath)
const QString settingsOrganization
Definition PluginCache.h:46
QMap< QString, PluginData > pluginData
Definition PluginCache.h:66
const QString settingsApplicationName
Definition PluginCache.h:47
const QString cachePath
Definition PluginCache.h:65
PluginData loadFromCache(const QString &pluginPath)
ArmarXManagerPtr manager
Definition PluginCache.h:67
WidgetCreatorMap getAvailableWidgets() const
std::future< void > preloadFuture
Definition PluginCache.h:70
void updateLastModifiedTimestamp(const QString &pluginPath)
static QString GetIconCachePath()
void preloadAsync(QStringList widgetNames, int delayMS=1000)
static bool ContainsAny(const QString &str, const QStringList &items)
PluginCache(ArmarXManagerPtr manager)
std::recursive_mutex cacheMutex
Definition PluginCache.h:69
QByteArray getHash(const QString &pluginPath)
bool cacheWidget(QString widgetName, ArmarXWidgetInfoPtr widgetCreator)
QStringList getAvailableWidgetNames() const
void removePluginFromCache(QString pluginPath)
void removeWidgetFromCache(QString pluginPath, QString widgetName)
bool cachePlugin(const QString &pluginPath)
static QString GetIconPath(const QString &widgetName)
ArmarXWidgetInfoPtr getWidgetCreator(const QString &widgetName)
static QString GetCategoryIconPath(const QString &widgetName)
WidgetCreatorMap loadPlugin(QSharedPointer< QPluginLoader > loader)
This file offers overloads of toIce() and fromIce() functions for STL container types.
IceUtil::Handle< ArmarXManager > ArmarXManagerPtr
std::shared_ptr< PluginCache > PluginCachePtr
Definition PluginCache.h:74
IceUtil::Handle< ArmarXWidgetController > ArmarXWidgetControllerPtr
QSharedPointer< QPluginLoader > pluginLoader
Definition PluginCache.h:29
WidgetCreatorMap widgets
Definition PluginCache.h:33
QDateTime lastModified
Definition PluginCache.h:32