1 #include <QtScript/QScriptEngine> 2 3 #include "Directory.h" 4 #include "FileInformation.h" 5 6 namespace ADM_qtScript 7 { 8 static const QDir::Filter qtFilter[] = 9 { 10 QDir::Dirs, QDir::Files, QDir::Drives, QDir::NoSymLinks, QDir::Readable, QDir::Writable, 11 QDir::Executable, QDir::Modified, QDir::Hidden, QDir::System, QDir::AllDirs, QDir::CaseSensitive, 12 QDir::NoDotAndDotDot, QDir::NoFilter 13 }; 14 15 static const Directory::Filter myFilter[] = 16 { 17 Directory::Directories, Directory::Files, Directory::Drives, Directory::NoSymLinks, 18 Directory::Readable, Directory::Writable, Directory::Executable, Directory::Modified, 19 Directory::Hidden, Directory::System, Directory::AllDirectories, Directory::CaseSensitive, 20 Directory::NoDotAndDotDot, Directory::NoFilter 21 }; 22 23 static const QDir::SortFlag qtSort[] = 24 { 25 QDir::Name, QDir::Time, QDir::Size, QDir::Unsorted, QDir::DirsFirst, QDir::Reversed, 26 QDir::IgnoreCase, QDir::DirsLast, QDir::LocaleAware, QDir::Type, QDir::NoSort 27 }; 28 29 static const Directory::Sort mySort[] = 30 { 31 Directory::Name, Directory::Time, Directory::Size, Directory::Unsorted, Directory::DirectoriesFirst, 32 Directory::Reversed, Directory::IgnoreCase, Directory::DirectoriesLast, Directory::LocaleAware, 33 Directory::Type, Directory::NoSort 34 }; 35 Directory(QString path)36 Directory::Directory(QString path) 37 { 38 _dir = QDir(path); 39 } 40 Directory(QString path,QString nameFilter,Sort sort,Filter filter)41 Directory::Directory( 42 QString path, QString nameFilter, Sort sort, Filter filter) 43 { 44 _dir = QDir(path, nameFilter, this->getQtSortFlags(sort), this->getQtFilters(filter)); 45 } 46 constructor(QScriptContext * context,QScriptEngine * engine)47 QScriptValue Directory::constructor(QScriptContext *context, QScriptEngine *engine) 48 { 49 if (context->isCalledAsConstructor()) 50 { 51 if (context->argumentCount() == 0) 52 { 53 return engine->newQObject(new Directory(), QScriptEngine::ScriptOwnership); 54 } 55 else if (context->argumentCount() == 1) 56 { 57 return engine->newQObject( 58 new Directory(context->argument(0).toString()), QScriptEngine::ScriptOwnership); 59 } 60 else if (context->argumentCount() == 2) 61 { 62 return engine->newQObject( 63 new Directory( 64 context->argument(0).toString(), context->argument(1).toString()), 65 QScriptEngine::ScriptOwnership); 66 } 67 else if (context->argumentCount() == 3 && context->argument(2).isNumber()) 68 { 69 return engine->newQObject( 70 new Directory( 71 context->argument(0).toString(), context->argument(1).toString(), 72 (Directory::Sort)context->argument(2).toNumber()), 73 QScriptEngine::ScriptOwnership); 74 } 75 else if (context->argumentCount() == 4 && context->argument(2).isNumber() && 76 context->argument(3).isNumber()) 77 { 78 return engine->newQObject( 79 new Directory( 80 context->argument(0).toString(), context->argument(1).toString(), 81 (Directory::Sort)context->argument(2).toNumber(), 82 (Directory::Filter)context->argument(3).toNumber()), 83 QScriptEngine::ScriptOwnership); 84 } 85 else 86 { 87 return context->throwError("Invalid arguments passed to constructor"); 88 } 89 } 90 91 return engine->undefinedValue(); 92 } 93 getMyFilters(QDir::Filters qtFilters)94 Directory::Filters Directory::getMyFilters(QDir::Filters qtFilters) 95 { 96 Directory::Filters myFilters; 97 98 for (unsigned int i = 0; i < (sizeof(qtFilter) / sizeof(QDir::Filter)); i++) 99 { 100 if (qtFilters.testFlag(qtFilter[i])) 101 { 102 myFilters |= myFilter[i]; 103 } 104 } 105 106 return myFilters; 107 } 108 getMySortFlags(QDir::SortFlags qtSortFlags)109 Directory::SortFlags Directory::getMySortFlags(QDir::SortFlags qtSortFlags) 110 { 111 Directory::SortFlags mySortFlags; 112 113 for (unsigned int i = 0; i < (sizeof(qtSort) / sizeof(QDir::SortFlag)); i++) 114 { 115 if (qtSortFlags.testFlag(qtSort[i])) 116 { 117 mySortFlags |= mySort[i]; 118 } 119 } 120 121 return mySortFlags; 122 } 123 getQtFilters(Directory::Filters myFilters)124 QDir::Filters Directory::getQtFilters(Directory::Filters myFilters) 125 { 126 QDir::Filters qtFilters; 127 128 for (unsigned int i = 0; i < (sizeof(myFilter) / sizeof(Directory::Filter)); i++) 129 { 130 if (myFilters.testFlag(myFilter[i])) 131 { 132 qtFilters |= qtFilter[i]; 133 } 134 } 135 136 return qtFilters; 137 } 138 getQtSortFlags(Directory::SortFlags mySortFlags)139 QDir::SortFlags Directory::getQtSortFlags(Directory::SortFlags mySortFlags) 140 { 141 QDir::SortFlags qtSortFlags; 142 143 for (unsigned int i = 0; i < (sizeof(mySort) / sizeof(Directory::Sort)); i++) 144 { 145 if (mySortFlags.testFlag(mySort[i])) 146 { 147 qtSortFlags |= qtSort[i]; 148 } 149 } 150 151 return qtSortFlags; 152 } 153 getPath()154 QString Directory::getPath() 155 { 156 return _dir.path(); 157 } 158 setPath(const QString & path)159 void Directory::setPath(const QString &path) 160 { 161 _dir.setPath(path); 162 } 163 getAbsolutePath()164 QString Directory::getAbsolutePath() 165 { 166 return _dir.absolutePath(); 167 } 168 getCanonicalPath()169 QString Directory::getCanonicalPath() 170 { 171 return _dir.canonicalPath(); 172 } 173 getDirectoryName()174 QString Directory::getDirectoryName() 175 { 176 return _dir.dirName(); 177 } 178 filePath(QString fileName)179 QString Directory::filePath(QString fileName) 180 { 181 return _dir.filePath(fileName); 182 } 183 absoluteFilePath(QString fileName)184 QString Directory::absoluteFilePath(QString fileName) 185 { 186 return _dir.absoluteFilePath(fileName); 187 } 188 relativeFilePath(QString fileName)189 QString Directory::relativeFilePath(QString fileName) 190 { 191 return _dir.relativeFilePath(fileName); 192 } 193 toNativeSeparators(QString pathName)194 QString Directory::toNativeSeparators(QString pathName) 195 { 196 return QDir::toNativeSeparators(pathName); 197 } 198 fromNativeSeparators(QString pathName)199 QString Directory::fromNativeSeparators(QString pathName) 200 { 201 return QDir::fromNativeSeparators(pathName); 202 } 203 changeDirectory(QString dirName)204 bool Directory::changeDirectory(QString dirName) 205 { 206 return _dir.cd(dirName); 207 } 208 changeDirectoryUp()209 bool Directory::changeDirectoryUp() 210 { 211 return _dir.cdUp(); 212 } 213 getNameFilters()214 QScriptValue Directory::getNameFilters() 215 { 216 QStringList filters = _dir.nameFilters(); 217 QScriptValue array = this->engine()->newArray(filters.length()); 218 219 for (int filterIndex = 0; filterIndex < filters.length(); filterIndex++) 220 { 221 array.setProperty(filterIndex, filters[filterIndex]); 222 } 223 224 return array; 225 } 226 setNameFilters(QScriptValue nameFilters)227 void Directory::setNameFilters(QScriptValue nameFilters) 228 { 229 if (nameFilters.isArray()) 230 { 231 QStringList list; 232 233 qScriptValueToSequence(nameFilters, list); 234 _dir.setNameFilters(list); 235 } 236 } 237 getFilter()238 Directory::Filter Directory::getFilter() 239 { 240 return (Filter)(int)this->getMyFilters(_dir.filter()); 241 } 242 setFilter(Filter filter)243 void Directory::setFilter(Filter filter) 244 { 245 _dir.setFilter(this->getQtFilters(filter)); 246 } 247 getSorting()248 Directory::Sort Directory::getSorting() 249 { 250 return (Sort)(int)this->getMySortFlags(_dir.sorting()); 251 } 252 setSorting(Sort sort)253 void Directory::setSorting(Sort sort) 254 { 255 _dir.setSorting(this->getQtSortFlags(sort)); 256 } 257 getCount()258 uint Directory::getCount() 259 { 260 return _dir.count(); 261 } 262 entryList(Filter filters,Sort sort)263 QScriptValue Directory::entryList(Filter filters, Sort sort) 264 { 265 QStringList list = _dir.entryList(this->getQtFilters(filters), this->getQtSortFlags(sort)); 266 QScriptValue array = this->engine()->newArray(list.length()); 267 268 for (int listIndex = 0; listIndex < list.length(); listIndex++) 269 { 270 array.setProperty(listIndex, list[listIndex]); 271 } 272 273 return array; 274 } 275 entryList(QScriptValue nameFilters,Filter filters,Sort sort)276 QScriptValue Directory::entryList(QScriptValue nameFilters, Filter filters, Sort sort) 277 { 278 QStringList filterList; 279 280 if (nameFilters.isArray()) 281 { 282 qScriptValueToSequence(nameFilters, filterList); 283 } 284 else 285 { 286 return this->context()->throwError("nameFilters is an invalid type"); 287 } 288 289 QStringList list = _dir.entryList( 290 filterList, this->getQtFilters(filters), this->getQtSortFlags(sort)); 291 QScriptValue array = this->engine()->newArray(list.length()); 292 293 for (int listIndex = 0; listIndex < list.length(); listIndex++) 294 { 295 array.setProperty(listIndex, list[listIndex]); 296 } 297 298 return array; 299 } 300 entryInfoList(Filter filters,Sort sort)301 QScriptValue Directory::entryInfoList(Filter filters, Sort sort) 302 { 303 QFileInfoList list = _dir.entryInfoList(this->getQtFilters(filters), this->getQtSortFlags(sort)); 304 QScriptValue array = this->engine()->newArray(list.length()); 305 306 for (int listIndex = 0; listIndex < list.length(); listIndex++) 307 { 308 array.setProperty(listIndex, this->engine()->newQObject( 309 new FileInformation(list[listIndex]), QScriptEngine::ScriptOwnership)); 310 } 311 312 return array; 313 } 314 entryInfoList(QScriptValue nameFilters,Filter filters,Sort sort)315 QScriptValue Directory::entryInfoList(QScriptValue nameFilters, Filter filters, Sort sort) 316 { 317 QStringList filterList; 318 319 if (nameFilters.isArray()) 320 { 321 qScriptValueToSequence(nameFilters, filterList); 322 } 323 else 324 { 325 return this->context()->throwError("nameFilters is an invalid type"); 326 } 327 328 QFileInfoList list = _dir.entryInfoList(filterList, this->getQtFilters(filters), this->getQtSortFlags(sort)); 329 QScriptValue array = this->engine()->newArray(list.length()); 330 331 for (int listIndex = 0; listIndex < list.length(); listIndex++) 332 { 333 array.setProperty(listIndex, this->engine()->newQObject( 334 new FileInformation(list[listIndex]), QScriptEngine::ScriptOwnership)); 335 } 336 337 return array; 338 } 339 makeDirectory(QString dirName)340 bool Directory::makeDirectory(QString dirName) 341 { 342 return _dir.mkdir(dirName); 343 } 344 removeDirectory(QString dirName)345 bool Directory::removeDirectory(QString dirName) 346 { 347 return _dir.rmdir(dirName); 348 } 349 makePath(QString dirPath)350 bool Directory::makePath(QString dirPath) 351 { 352 return _dir.mkpath(dirPath); 353 } 354 removePath(QString dirPath)355 bool Directory::removePath(QString dirPath) 356 { 357 return _dir.rmpath(dirPath); 358 } 359 isReadable()360 bool Directory::isReadable() 361 { 362 return _dir.isReadable(); 363 } 364 exists()365 bool Directory::exists() 366 { 367 return _dir.exists(); 368 } 369 isRoot()370 bool Directory::isRoot() 371 { 372 return _dir.isRoot(); 373 } 374 isRelative()375 bool Directory::isRelative() 376 { 377 return _dir.isRelative(); 378 } 379 isAbsolute()380 bool Directory::isAbsolute() 381 { 382 return _dir.isAbsolute(); 383 } 384 makeAbsolute()385 bool Directory::makeAbsolute() 386 { 387 return _dir.makeAbsolute(); 388 } 389 remove(QString fileName)390 bool Directory::remove(QString fileName) 391 { 392 return _dir.remove(fileName); 393 } 394 rename(QString oldName,QString newName)395 bool Directory::rename(QString oldName, QString newName) 396 { 397 return _dir.rename(oldName, newName); 398 } 399 exists(QString name)400 bool Directory::exists(QString name) 401 { 402 return _dir.exists(name); 403 } 404 getSeparator()405 QString Directory::getSeparator() 406 { 407 return _dir.separator(); 408 } 409 getCurrentPath()410 QString Directory::getCurrentPath() 411 { 412 return QDir::currentPath(); 413 } 414 setCurrentPath(QString path)415 bool Directory::setCurrentPath(QString path) 416 { 417 return QDir::setCurrent(path); 418 } 419 getHomePath()420 QString Directory::getHomePath() 421 { 422 return QDir::homePath(); 423 } 424 getRootPath()425 QString Directory::getRootPath() 426 { 427 return QDir::rootPath(); 428 } 429 getTempPath()430 QString Directory::getTempPath() 431 { 432 return QDir::tempPath(); 433 } 434 getDrives()435 QScriptValue Directory::getDrives() 436 { 437 QFileInfoList list = _dir.drives(); 438 QScriptValue array = this->engine()->newArray(list.length()); 439 440 for (int listIndex = 0; listIndex < list.length(); listIndex++) 441 { 442 array.setProperty(listIndex, this->engine()->newQObject( 443 new FileInformation(list[listIndex]), QScriptEngine::ScriptOwnership)); 444 } 445 446 return array; 447 } 448 match(QScriptValue filters,QString fileName)449 bool Directory::match(QScriptValue filters, QString fileName) 450 { 451 QStringList filterList; 452 453 if (filters.isArray()) 454 { 455 qScriptValueToSequence(filters, filterList); 456 } 457 else 458 { 459 this->context()->throwError("filters is an invalid type"); 460 return false; 461 } 462 463 return QDir::match(filterList, fileName); 464 } 465 match(QString filter,QString fileName)466 bool Directory::match(QString filter, QString fileName) 467 { 468 return QDir::match(filter, fileName); 469 } 470 cleanPath(QString path)471 QString Directory::cleanPath(QString path) 472 { 473 return _dir.cleanPath(path); 474 } 475 refresh()476 void Directory::refresh() 477 { 478 _dir.refresh(); 479 } 480 } 481