1 #include "File.h"
2 
3 namespace ADM_qtScript
4 {
5     static const QFile::Permission qtPermissions[] =
6     {
7         QFile::ReadOwner, QFile::WriteOwner, QFile::ExeOwner, QFile::ReadUser, QFile::WriteUser, QFile::ExeUser,
8         QFile::ReadGroup, QFile::WriteGroup, QFile::ExeGroup, QFile::ReadOther, QFile::WriteOther, QFile::ExeOther
9     };
10 
11     static const File::Permission myPermissions[] =
12     {
13         File::ReadOwner, File::WriteOwner, File::ExeOwner, File::ReadUser, File::WriteUser, File::ExeUser,
14         File::ReadGroup, File::WriteGroup, File::ExeGroup, File::ReadOther, File::WriteOther, File::ExeOther
15     };
16 
17     static const QFile::OpenModeFlag qtOpenModes[] =
18     {
19         QIODevice::ReadOnly, QIODevice::WriteOnly, QIODevice::ReadWrite, QIODevice::Append, QIODevice::Truncate,
20         QIODevice::Text, QIODevice::Unbuffered
21     };
22 
23     static const File::OpenMode myOpenModes[] =
24     {
25         File::ReadOnly, File::WriteOnly, File::ReadWrite, File::Append, File::Truncate, File::Text, File::Unbuffered
26     };
27 
File(const QString & name)28     File::File(const QString& name)
29     {
30         _file.setFileName(name);
31     }
32 
constructor(QScriptContext * context,QScriptEngine * engine)33     QScriptValue File::constructor(QScriptContext * context, QScriptEngine * engine)
34     {
35         if (context->isCalledAsConstructor() && context->argumentCount() > 0)
36         {
37             return engine->newQObject(new File(context->argument(0).toString()), QScriptEngine::ScriptOwnership);
38         }
39 
40         return engine->undefinedValue();
41     }
42 
atEnd()43     bool File::atEnd()
44     {
45         return _file.atEnd();
46     }
47 
canReadLine()48     bool File::canReadLine()
49     {
50         return _file.canReadLine();
51     }
52 
close()53     void File::close()
54     {
55         _file.close();
56     }
57 
getBytesAvailable()58     qint64 File::getBytesAvailable()
59     {
60         return _file.bytesAvailable();
61     }
62 
getBytesToWrite()63     qint64 File::getBytesToWrite()
64     {
65         return _file.bytesToWrite();
66     }
67 
copy(const QString & newName)68     bool File::copy(const QString & newName)
69     {
70         return _file.copy(newName);
71     }
72 
getError()73     File::FileError File::getError()
74     {
75         QFile::FileError fileError = _file.error();
76 
77         switch (fileError)
78         {
79             case QFile::NoError:
80                 return File::NoError;
81 
82             case QFile::ReadError:
83                 return File::ReadError;
84 
85             case QFile::WriteError:
86                 return File::WriteError;
87 
88             case QFile::FatalError:
89                 return File::FatalError;
90 
91             case QFile::ResourceError:
92                 return File::ResourceError;
93 
94             case QFile::OpenError:
95                 return File::OpenError;
96 
97             case QFile::AbortError:
98                 return File::AbortError;
99 
100             case QFile::TimeOutError:
101                 return File::TimeOutError;
102 
103             case QFile::RemoveError:
104                 return File::RemoveError;
105 
106             case QFile::RenameError:
107                 return File::RenameError;
108 
109             case QFile::PositionError:
110                 return File::PositionError;
111 
112             case QFile::ResizeError:
113                 return File::ResizeError;
114 
115             case QFile::PermissionsError:
116                 return File::PermissionsError;
117 
118             case QFile::CopyError:
119                 return File::CopyError;
120 
121             default:
122                 return File::UnspecifiedError;
123         }
124     }
125 
getErrorString()126     QString File::getErrorString()
127     {
128         return _file.errorString();
129     }
130 
exists()131     bool File::exists()
132     {
133         return _file.exists();
134     }
135 
flush()136     bool File::flush()
137     {
138         return _file.flush();
139     }
140 
getFileName()141     QString File::getFileName()
142     {
143         return _file.fileName();
144     }
145 
getOpenMode()146     File::OpenMode File::getOpenMode()
147     {
148         QFile::OpenMode qtMode = _file.openMode();
149         File::OpenModeFlags myMode = File::NotOpen;
150 
151         for (unsigned int i = 0; i < (sizeof(qtOpenModes) / sizeof(QFile::OpenModeFlag)); i++)
152         {
153             if (qtMode.testFlag(qtOpenModes[i]))
154             {
155                 myMode |= myOpenModes[i];
156             }
157         }
158 
159         return static_cast<File::OpenMode>(static_cast<int>(myMode));
160     }
161 
getPermissions()162     File::Permissions File::getPermissions()
163     {
164         return File::getPermissions(_file.permissions());
165     }
166 
getPosition()167     qint64 File::getPosition()
168     {
169         return _file.pos();
170     }
171 
getSize()172     qint64 File::getSize()
173     {
174         return _file.size();
175     }
176 
isOpen()177     bool File::isOpen()
178     {
179         return _file.isOpen();
180     }
181 
isReadable()182     bool File::isReadable()
183     {
184         return _file.isReadable();
185     }
186 
isSequential()187     bool File::isSequential()
188     {
189         return _file.isSequential();
190     }
191 
isTextModeEnabled()192     bool File::isTextModeEnabled()
193     {
194         return _file.isTextModeEnabled();
195     }
196 
isWritable()197     bool File::isWritable()
198     {
199         return _file.isWritable();
200     }
201 
link(const QString & linkName)202     bool File::link(const QString& linkName)
203     {
204         return _file.link(linkName);
205     }
206 
open(File::OpenMode mode)207     bool File::open(File::OpenMode mode)
208     {
209         QFile::OpenMode qtMode = QFile::NotOpen;
210         File::OpenModeFlags myMode = mode;
211 
212         for (unsigned int i = 0; i < (sizeof(myOpenModes) / sizeof(File::OpenMode)); i++)
213         {
214             if (myMode.testFlag(myOpenModes[i]))
215             {
216                 qtMode |= qtOpenModes[i];
217             }
218         }
219 
220         return _file.open(qtMode);
221     }
222 
peek(qint64 maxSize)223     QString File::peek(qint64 maxSize)
224     {
225         return _file.peek(maxSize).constData();
226     }
227 
read(qint64 maxSize)228     QString File::read(qint64 maxSize)
229     {
230         return _file.read(maxSize).constData();
231     }
232 
readAll()233     QString File::readAll()
234     {
235         return _file.readAll().constData();
236     }
237 
readLine(qint64 maxSize)238     QString File::readLine(qint64 maxSize)
239     {
240         return _file.readLine(maxSize).constData();
241     }
242 
reset()243     bool File::reset()
244     {
245         return _file.reset();
246     }
247 
remove()248     bool File::remove()
249     {
250         return _file.remove();
251     }
252 
rename(const QString & newName)253     bool File::rename(const QString& newName)
254     {
255         return _file.rename(newName);
256     }
257 
resize(qint64 sz)258     bool File::resize(qint64 sz)
259     {
260         return _file.resize(sz);
261     }
262 
seek(qint64 pos)263     bool File::seek(qint64 pos)
264     {
265         return _file.seek(pos);
266     }
267 
setPermissions(File::Permissions permissions)268     bool File::setPermissions(File::Permissions permissions)
269     {
270         return _file.setPermissions(File::getQPermissions(permissions));
271     }
272 
setTextModeEnabled(bool enabled)273     void File::setTextModeEnabled(bool enabled)
274     {
275         _file.setTextModeEnabled(enabled);
276     }
277 
symLinkTarget()278     QString File::symLinkTarget()
279     {
280         return _file.symLinkTarget();
281     }
282 
unsetError()283     void File::unsetError()
284     {
285         _file.unsetError();
286     }
287 
write(const QString & data)288     qint64 File::write(const QString& data)
289     {
290         QByteArray array;
291 
292         array.append(data);
293 
294         return _file.write(array);
295     }
296 
getPermissions(QFile::Permissions permissions)297     File::Permissions File::getPermissions(QFile::Permissions permissions)
298     {
299         File::Permissions myPerms;
300 
301         for (unsigned int i = 0; i < (sizeof(qtPermissions) / sizeof(QFile::Permission)); i++)
302         {
303             if (permissions.testFlag(qtPermissions[i]))
304             {
305                 myPerms |= myPermissions[i];
306             }
307         }
308 
309         return myPerms;
310     }
311 
getQPermissions(File::Permissions permissions)312     QFile::Permissions File::getQPermissions(File::Permissions permissions)
313     {
314         QFile::Permissions qtPerms;
315 
316         for (unsigned int i = 0; i < (sizeof(qtPermissions) / sizeof(QFile::Permission)); i++)
317         {
318             if (permissions.testFlag(myPermissions[i]))
319             {
320                 qtPerms |= qtPermissions[i];
321             }
322         }
323 
324         return qtPerms;
325     }
326 }
327