1 /*
2     Copyright (c) 2017, Lukas Holecek <hluk@email.cz>
3 
4     This file is part of CopyQ.
5 
6     CopyQ is free software: you can redistribute it and/or modify
7     it under the terms of the GNU General Public License as published by
8     the Free Software Foundation, either version 3 of the License, or
9     (at your option) any later version.
10 
11     CopyQ is distributed in the hope that it will be useful,
12     but WITHOUT ANY WARRANTY; without even the implied warranty of
13     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14     GNU General Public License for more details.
15 
16     You should have received a copy of the GNU General Public License
17     along with CopyQ.  If not, see <http://www.gnu.org/licenses/>.
18 */
19 
20 #include "scriptabledir.h"
21 
22 #include <QJSEngine>
23 
ScriptableDir(const QString & path)24 ScriptableDir::ScriptableDir(const QString &path)
25     : m_path(path)
26 {
27 }
28 
~ScriptableDir()29 ScriptableDir::~ScriptableDir()
30 {
31     delete m_self;
32 }
33 
absoluteFilePath(const QJSValue & fileName)34 QJSValue ScriptableDir::absoluteFilePath(const QJSValue &fileName)
35 {
36     return self()->absoluteFilePath(fileName.toString());
37 }
38 
absolutePath()39 QJSValue ScriptableDir::absolutePath()
40 {
41     return self()->absolutePath();
42 }
43 
canonicalPath()44 QJSValue ScriptableDir::canonicalPath()
45 {
46     return self()->canonicalPath();
47 }
48 
cd(const QJSValue & dirName)49 bool ScriptableDir::cd(const QJSValue &dirName)
50 {
51     return self()->cd(dirName.toString());
52 }
53 
cdUp()54 bool ScriptableDir::cdUp()
55 {
56     return self()->cdUp();
57 }
58 
count()59 uint ScriptableDir::count()
60 {
61     return self()->count();
62 }
63 
dirName()64 QJSValue ScriptableDir::dirName()
65 {
66     return self()->dirName();
67 }
68 
entryList(const QStringList & nameFilters)69 QStringList ScriptableDir::entryList(const QStringList &nameFilters)
70 {
71     return self()->entryList(nameFilters);
72 }
73 
exists(const QJSValue & name)74 bool ScriptableDir::exists(const QJSValue &name)
75 {
76     return self()->exists(name.toString());
77 }
78 
exists()79 bool ScriptableDir::exists()
80 {
81     return self()->exists();
82 }
83 
filePath(const QJSValue & fileName)84 QJSValue ScriptableDir::filePath(const QJSValue &fileName)
85 {
86     return self()->filePath(fileName.toString());
87 }
88 
isAbsolute()89 bool ScriptableDir::isAbsolute()
90 {
91     return self()->isAbsolute();
92 }
93 
isReadable()94 bool ScriptableDir::isReadable()
95 {
96     return self()->isReadable();
97 }
98 
isRelative()99 bool ScriptableDir::isRelative()
100 {
101     return self()->isRelative();
102 }
103 
isRoot()104 bool ScriptableDir::isRoot()
105 {
106     return self()->isRoot();
107 }
108 
makeAbsolute()109 bool ScriptableDir::makeAbsolute()
110 {
111     return self()->makeAbsolute();
112 }
113 
mkdir(const QJSValue & dirName)114 bool ScriptableDir::mkdir(const QJSValue &dirName)
115 {
116     return self()->mkdir(dirName.toString());
117 }
118 
mkpath(const QJSValue & dirPath)119 bool ScriptableDir::mkpath(const QJSValue &dirPath)
120 {
121     return self()->mkpath(dirPath.toString());
122 }
123 
nameFilters()124 QStringList ScriptableDir::nameFilters()
125 {
126     return self()->nameFilters();
127 }
128 
path()129 QJSValue ScriptableDir::path()
130 {
131     return self()->path();
132 }
133 
refresh()134 void ScriptableDir::refresh()
135 {
136     self()->refresh();
137 }
138 
relativeFilePath(const QJSValue & fileName)139 QJSValue ScriptableDir::relativeFilePath(const QJSValue &fileName)
140 {
141     return self()->relativeFilePath(fileName.toString());
142 }
143 
remove(const QJSValue & fileName)144 bool ScriptableDir::remove(const QJSValue &fileName)
145 {
146     return self()->remove(fileName.toString());
147 }
148 
rename(const QJSValue & oldName,const QJSValue & newName)149 bool ScriptableDir::rename(const QJSValue &oldName, const QJSValue &newName)
150 {
151     return self()->rename(oldName.toString(), newName.toString());
152 }
153 
rmdir(const QJSValue & dirName)154 bool ScriptableDir::rmdir(const QJSValue &dirName)
155 {
156     return self()->rmdir(dirName.toString());
157 }
158 
rmpath(const QJSValue & dirPath)159 bool ScriptableDir::rmpath(const QJSValue &dirPath)
160 {
161     return self()->rmpath(dirPath.toString());
162 }
163 
setNameFilters(const QStringList & nameFilters)164 void ScriptableDir::setNameFilters(const QStringList &nameFilters)
165 {
166     self()->setNameFilters(nameFilters);
167 }
168 
setPath(const QJSValue & path)169 void ScriptableDir::setPath(const QJSValue &path)
170 {
171     self()->setPath(path.toString());
172 }
173 
addSearchPath(const QJSValue & prefix,const QJSValue & path)174 void ScriptableDir::addSearchPath(const QJSValue &prefix, const QJSValue &path)
175 {
176     QDir::addSearchPath(prefix.toString(), path.toString());
177 }
178 
cleanPath(const QJSValue & path)179 QJSValue ScriptableDir::cleanPath(const QJSValue &path)
180 {
181     return QDir::cleanPath(path.toString());
182 }
183 
currentPath()184 QJSValue ScriptableDir::currentPath()
185 {
186     return QDir::currentPath();
187 }
188 
fromNativeSeparators(const QJSValue & pathName)189 QJSValue ScriptableDir::fromNativeSeparators(const QJSValue &pathName)
190 {
191     return QDir::fromNativeSeparators(pathName.toString());
192 }
193 
home()194 QJSValue ScriptableDir::home()
195 {
196     return newDir(QDir::home());
197 }
198 
homePath()199 QJSValue ScriptableDir::homePath()
200 {
201     return QDir::homePath();
202 }
203 
isAbsolutePath(const QJSValue & path)204 bool ScriptableDir::isAbsolutePath(const QJSValue &path)
205 {
206     return QDir::isAbsolutePath(path.toString());
207 }
208 
isRelativePath(const QJSValue & path)209 bool ScriptableDir::isRelativePath(const QJSValue &path)
210 {
211     return QDir::isRelativePath(path.toString());
212 }
213 
match(const QJSValue & filter,const QJSValue & fileName)214 bool ScriptableDir::match(const QJSValue &filter, const QJSValue &fileName)
215 {
216     return QDir::match(filter.toString(), fileName.toString());
217 }
218 
match(const QStringList & filters,const QJSValue & fileName)219 bool ScriptableDir::match(const QStringList &filters, const QJSValue &fileName)
220 {
221     return QDir::match(filters, fileName.toString());
222 }
223 
root()224 QJSValue ScriptableDir::root()
225 {
226     return newDir(QDir::root());
227 }
228 
rootPath()229 QJSValue ScriptableDir::rootPath()
230 {
231     return QDir::rootPath();
232 }
233 
searchPaths(const QJSValue & prefix)234 QStringList ScriptableDir::searchPaths(const QJSValue &prefix)
235 {
236     return QDir::searchPaths(prefix.toString());
237 }
238 
separator()239 QJSValue ScriptableDir::separator()
240 {
241     return QString(QDir::separator());
242 }
243 
setCurrent(const QJSValue & path)244 bool ScriptableDir::setCurrent(const QJSValue &path)
245 {
246     return QDir::setCurrent(path.toString());
247 }
248 
setSearchPaths(const QJSValue & prefix,const QStringList & searchPaths)249 void ScriptableDir::setSearchPaths(const QJSValue &prefix, const QStringList &searchPaths)
250 {
251     QDir::setSearchPaths(prefix.toString(), searchPaths);
252 }
253 
temp()254 QJSValue ScriptableDir::temp()
255 {
256     return newDir(QDir::temp());
257 }
258 
tempPath()259 QJSValue ScriptableDir::tempPath()
260 {
261     return QDir::tempPath();
262 }
263 
toNativeSeparators(const QJSValue & pathName)264 QJSValue ScriptableDir::toNativeSeparators(const QJSValue &pathName)
265 {
266     return QDir::toNativeSeparators(pathName.toString());
267 }
268 
self()269 QDir *ScriptableDir::self()
270 {
271     if (!m_self)
272         m_self = new QDir(m_path);
273     return m_self;
274 }
275 
engine() const276 QJSEngine *ScriptableDir::engine() const
277 {
278     return qjsEngine(this);
279 }
280 
newDir(const QDir & dir) const281 QJSValue ScriptableDir::newDir(const QDir &dir) const
282 {
283     return engine()->newQObject( new ScriptableDir(dir.absolutePath()) );
284 }
285