1 /************************************************************************
2 **
3 **  Copyright (C) 2014  John Schember <john@nachtimwald.com>
4 **
5 **  This file is part of Sigil.
6 **
7 **  Sigil is free software: you can redistribute it and/or modify
8 **  it under the terms of the GNU General Public License as published by
9 **  the Free Software Foundation, either version 3 of the License, or
10 **  (at your option) any later version.
11 **
12 **  Sigil is distributed in the hope that it will be useful,
13 **  but WITHOUT ANY WARRANTY; without even the implied warranty of
14 **  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15 **  GNU General Public License for more details.
16 **
17 **  You should have received a copy of the GNU General Public License
18 **  along with Sigil.  If not, see <http://www.gnu.org/licenses/>.
19 **
20 *************************************************************************/
21 
22 #include <QString>
23 #include <QStringList>
24 
25 #include "Misc/Plugin.h"
26 #include "Dialogs/PluginRunner.h"
27 
28 #if defined(__APPLE__)
29 static const QString POS = "osx";
30 #elif defined(_WIN32)
31 static const QString POS = "win";
32 #else
33 static const QString POS = "unx";
34 #endif
35 
Plugin()36 Plugin::Plugin()
37 {
38 }
39 
Plugin(const QHash<QString,QString> & info)40 Plugin::Plugin(const QHash<QString, QString> &info)
41 {
42     if (info.contains("name")) {
43         set_name(info.value("name"));
44     }
45     if (info.contains("author")) {
46         set_author(info.value("author"));
47     }
48     if (info.contains("description")) {
49         set_description(info.value("description"));
50     }
51     if (info.contains("type")) {
52         set_type(info.value("type"));
53     }
54     if (info.contains("version")) {
55         set_version(info.value("version"));
56     }
57     if (info.contains("engine")) {
58         set_engine(info.value("engine"));
59     }
60     if (info.contains("oslist")) {
61         set_oslist(info.value("oslist"));
62     }
63     if (info.contains("autostart")) {
64         set_autostart(info.value("autostart"));
65     }
66     if (info.contains("autoclose")) {
67         set_autoclose(info.value("autoclose"));
68     }
69     if (info.contains("iconpath")) {
70         set_iconpath(info.value("iconpath"));
71     }
72 
73 
74 }
75 
~Plugin()76 Plugin::~Plugin()
77 {
78 }
79 
serialize()80 QHash<QString, QString> Plugin::serialize()
81 {
82     QHash <QString, QString> info;
83 
84     info.insert("name", get_name());
85     info.insert("author", get_author());
86     info.insert("description", get_description());
87     info.insert("type", get_type());
88     info.insert("version", get_version());
89     info.insert("engine", get_engine());
90     info.insert("oslist", get_oslist());
91     info.insert("autostart", get_autostart());
92     info.insert("autoclose", get_autoclose());
93     info.insert("iconpath", get_iconpath());
94 
95     return info;
96 }
97 
isvalid()98 bool Plugin::isvalid()
99 {
100     return (!m_name.isEmpty()   &&
101             !m_type.isEmpty()   &&
102             (!m_engine.isEmpty() && PluginRunner::SupportedEngines().contains(m_engine)) &&
103             (m_oslist.isEmpty() || m_oslist.split(',', QString::SkipEmptyParts).contains(POS)));
104 }
105 
get_name()106 QString Plugin::get_name()
107 {
108     return m_name;
109 }
110 
get_author()111 QString Plugin::get_author()
112 {
113     return m_author;
114 }
115 
get_description()116 QString Plugin::get_description()
117 {
118     return m_description;
119 }
120 
get_type()121 QString Plugin::get_type()
122 {
123     return m_type;
124 }
125 
get_version()126 QString Plugin::get_version()
127 {
128     return m_version;
129 }
130 
get_engine()131 QString Plugin::get_engine()
132 {
133     return m_engine;
134 }
135 
get_autostart()136 QString Plugin::get_autostart()
137 {
138   if (m_autostart.isEmpty()) {
139      return "false";
140   }
141   return m_autostart;
142 }
143 
get_autoclose()144 QString Plugin::get_autoclose()
145 {
146   if (m_autoclose.isEmpty()) {
147      return "false";
148   }
149   return m_autoclose;
150 }
151 
get_oslist()152 QString Plugin::get_oslist()
153 {
154     return m_oslist;
155 }
156 
157 
get_iconpath()158 QString Plugin::get_iconpath()
159 {
160     return m_iconpath;
161 }
162 
set_name(const QString & val)163 void Plugin::set_name(const QString &val)
164 {
165     m_name = val;
166 }
167 
set_author(const QString & val)168 void Plugin::set_author(const QString &val)
169 {
170     m_author = val;
171 }
172 
set_description(const QString & val)173 void Plugin::set_description(const QString &val)
174 {
175     m_description = val;
176 }
177 
set_type(const QString & val)178 void Plugin::set_type(const QString &val)
179 {
180     m_type = val;
181 }
182 
set_version(const QString & val)183 void Plugin::set_version(const QString &val)
184 {
185     m_version = val;
186 }
187 
188 // multiple engines are possible
set_engine(const QString & val)189 void Plugin::set_engine(const QString &val)
190 {
191     if (!m_engine.isEmpty()) {
192         m_engine = m_engine + "," + val;
193     } else {
194         m_engine = val;
195     }
196 }
197 
set_oslist(const QString & val)198 void Plugin::set_oslist(const QString &val)
199 {
200     m_oslist = val;
201 }
202 
set_autostart(const QString & val)203 void Plugin::set_autostart(const QString &val)
204 {
205     if (!val.isEmpty()) {
206         m_autostart = val.toLower();
207     }
208 }
209 
set_autoclose(const QString & val)210 void Plugin::set_autoclose(const QString &val)
211 {
212     if (!val.isEmpty()) {
213         m_autoclose = val.toLower();
214     }
215 }
216 
set_iconpath(const QString & val)217 void Plugin::set_iconpath(const QString &val)
218 {
219     m_iconpath = val;
220 }
221