1 // Copyright (C) 2014-2018 Manuel Schneider 2 3 #pragma once 4 #include <QObject> 5 #include <QProcess> 6 #include <QMutex> 7 #include <map> 8 #include "albert/queryhandler.h" 9 10 namespace ExternalExtensions { 11 12 class ExternalExtension final : public Core::QueryHandler 13 { 14 public: 15 16 enum class State { 17 Initialized, 18 Error 19 }; 20 21 22 ExternalExtension(const QString &path, const QString &id); 23 ~ExternalExtension(); 24 25 /* 26 * Implementation of extension interface 27 */ 28 triggers()29 QStringList triggers() const override { return {trigger_}; } 30 void handleQuery(Core::Query *query) const override; 31 32 /* 33 * Extension specific members 34 */ 35 36 path()37 const QString &path() const { return path_; } id()38 const QString &id() const { return id_; } name()39 const QString &name() const { return name_; } author()40 const QString &author() const { return author_; } version()41 const QString &version() const { return version_; } description()42 const QString &description() const { return description_; } usageExample()43 const QString &usageExample() const { return usageExample_; } trigger()44 const QString &trigger() const { return trigger_; } dependencies()45 const QStringList &dependencies() const { return dependencies_; } state()46 const State &state() const { return state_; } errorString()47 const QString &errorString() const { return errorString_; } 48 49 private: 50 51 QString runOperation(const QString &); 52 53 QString path_; 54 QString id_; 55 QString name_; 56 QString author_; 57 QString version_; 58 QString trigger_; 59 QString description_; 60 QString usageExample_; 61 QStringList dependencies_; 62 State state_; 63 QString errorString_; 64 mutable std::map<QString, QString> variables_; 65 mutable QMutex processMutex_; 66 }; 67 68 } 69