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