//------------------------------------------------------------------------------ QStringList recursiveFind(QString directory) { //// подумать, нужен ли чистый рекурсивный поиск //// если нет, то сюда вставить обработку getModuleFilesList QStringList list; QDirIterator iterator (directory, QDir::Files | QDir::NoSymLinks, QDirIterator::Subdirectories); while(iterator.hasNext()) { iterator.next(); list << iterator.fileInfo().absoluteFilePath(); } return list; }
void ThirdStep::initializePage () { TotalSize_ = 0; QString path = field ("RootPath").toString (); QFileInfo pathInfo (path); if (pathInfo.isDir ()) { QDirIterator it (path, QDirIterator::Subdirectories); while (it.hasNext ()) { it.next (); QFileInfo info = it.fileInfo (); if (info.isFile () && info.isReadable ()) TotalSize_ += info.size (); } } else if (pathInfo.isFile () && pathInfo.isReadable ()) TotalSize_ += pathInfo.size (); quint64 max = std::log (static_cast<long double> (TotalSize_ / 102400)) * 80; quint32 pieceSize = 32 * 1024; int shouldIndex = 0; for (; TotalSize_ / pieceSize >= max; pieceSize *= 2, ++shouldIndex) ; if (shouldIndex > PieceSize_->count () - 1) shouldIndex = PieceSize_->count () - 1; PieceSize_->setCurrentIndex (shouldIndex); on_PieceSize__currentIndexChanged (); }
void FileSystemModel::iterateFilesystem(ListingType type, bool sort) { // clear and delete the filelist this->clear(); // create a new filelist object this->m_filelist = new QStringList(); // define a QDirIterator pointer QDirIterator *iterator = nullptr; // create the QDirIterator depending on the set name filters if (this->m_filters.isEmpty()) { iterator = new QDirIterator(this->m_dir.absolutePath(), // model directory this->qDirFiles(), // filter QDirIterator::Subdirectories | QDirIterator::FollowSymlinks); // iterator flags } else { iterator = new QDirIterator(this->m_dir.absolutePath(), this->m_filters, // model directory and name filters this->qDirFiles(), // filter QDirIterator::Subdirectories | QDirIterator::FollowSymlinks); // iterator flags } // define iterator template // for performance reasons, do not compare the type each time (SLOW, if for example more than 1 million + files) // check the type once and than build the list straightforward #define ITERATOR_BEGIN \ while (iterator->hasNext()) { \ (void) iterator->next(); // QDirIterator points to nothing at the beginning #define ITERATOR_END } if (type == Filenames) { ITERATOR_BEGIN this->m_filelist->append(iterator->fileInfo().fileName()); ITERATOR_END }
/*************************************************************************** * ScanDir ***************************************************************************/ QList<CNDSromData> CNDSromScanner::ScanDir(QString d, CNDSdbIfc * dbIfc, bool bAddDirs) { QList<CNDSromData> res; QDirIterator * di; QFileInfo fi; nds_rom_info_t rom_info; uint i; CNDSbgr555 bgr; this->Status("Scan gestartet.", 2000); if (bAddDirs) { di = new QDirIterator(d, QDirIterator::NoIteratorFlags); } else { di = new QDirIterator(d, QDirIterator::Subdirectories | QDirIterator::FollowSymlinks); } while (di->hasNext()) { di->next(); fi = di->fileInfo(); if (fi.isFile()) { CNDSromData rd; rd.ROMpath = fi.absolutePath(); DBG("ROMpath:" << rd.ROMpath); rd.ROMfilename = fi.fileName(); DBG("ROMfilename:" << rd.ROMfilename); rd.ROMfilesize = (uint) fi.size(); DBG("ROMfilesize:" << rd.ROMfilesize); this->Status(rd.ROMfilename); // Run ROM through Scanner if (this->ScanRom(rd.ROMpath, rd.ROMfilename, &rom_info)) { rd.isROM = true; // ROM Version rd.ROMversion = rom_info.icon.version; DBG("ROMversion:" << rd.ROMversion); // CRC32 rd.ROMcrc32 = (uint)rom_info.file_crc32; DBG("ROMcrc32:" << rd.ROMcrc32); // Internal ROM Name rd.ROMname = QString::fromUtf8((char *)rom_info.hdr.game_title, get_romstring_size(rom_info.hdr.game_title, 12)).trimmed(); DBG("ROMname:" << rd.ROMname); // ROM Serial rd.ROMserial = "NTR-" + QString::fromUtf8((char *)rom_info.hdr.game_code, 4) + "-"; for (i=0; i<(sizeof(nds_rom_countries) / sizeof(nds_rom_countries[0])); i++) { if (nds_rom_countries[i].C == rom_info.hdr.game_code[3]) { rd.ROMserial += QString(nds_rom_countries[i].Name); break; } } DBG("ROMserial:" << rd.ROMserial); // Game Title in native Languages rd.ROMlanguage[JPN].Name = QString::fromUtf16(rom_info.icon.title_jpn); DBG("ROMlanguage[JPN]:" << rd.ROMlanguage[JPN].Name); rd.ROMlanguage[ENG].Name = QString::fromUtf16(rom_info.icon.title_eng); DBG("ROMlanguage[ENG]:" << rd.ROMlanguage[ENG].Name); rd.ROMlanguage[FRN].Name = QString::fromUtf16(rom_info.icon.title_frn); DBG("ROMlanguage[FRN]:" << rd.ROMlanguage[FRN].Name); rd.ROMlanguage[GER].Name = QString::fromUtf16(rom_info.icon.title_grm); DBG("ROMlanguage[GER]:" << rd.ROMlanguage[GER].Name); rd.ROMlanguage[ITL].Name = QString::fromUtf16(rom_info.icon.title_itl); DBG("ROMlanguage[ITL]:" << rd.ROMlanguage[ITL].Name); rd.ROMlanguage[SPN].Name = QString::fromUtf16(rom_info.icon.title_spn); DBG("ROMlanguage[SPN]:" << rd.ROMlanguage[SPN].Name); // Only if Version > 1 if (rd.ROMversion > 1) { rd.ROMlanguage[CHI].Name = QString::fromUtf16(rom_info.icon.title_chi); DBG("ROMlanguage[CHI]:" << rd.ROMlanguage[CHI].Name); } // ROM Code rd.ROMcode = QString::fromUtf8((char *)rom_info.hdr.maker_code, get_romstring_size(rom_info.hdr.maker_code, 2)).trimmed(); DBG("ROMcode:" << rd.ROMcode); // ROM Publisher rd.ROMpublisher = dbIfc->readVendor( rd.ROMcode.left(1).data()->unicode(), rd.ROMcode.right(1).data()->unicode()); DBG("ROMpublisher:" << rd.ROMpublisher); // ROM Unitcode rd.ROMunitcode.setNum(rom_info.hdr.unit_code, 16); DBG("ROMunitcode:" << rd.ROMunitcode); // ROM Capacity rd.ROMcapacity = (((128*1024) << rom_info.hdr.dev_capacity)*8/(float)MB); DBG("ROMcapacity:" << rd.ROMcapacity); // ROM Displayname rd.ROMdisplname = rd.ROMfilename; rd.ROMdisplname.resize(rd.ROMdisplname.length() - 4); DBG("ROMdisplname:" << rd.ROMdisplname); rd.fixROMlanguage(); // Create Icon rd.ROMicon = bgr.createIcon(&rom_info.icon); } res << rd; } else { if (bAddDirs) { bool bSkipDir; bSkipDir = ((fi.fileName().compare(".") == 0) | (fi.fileName().compare("..") == 0)); if (!bSkipDir) { CNDSromData rd; rd.ROMstate = STATE_DIRECTORY; rd.ROMpath = fi.absolutePath(); DBG("ROMpath:" << rd.ROMpath); rd.ROMname = fi.fileName(); DBG("ROMfilename:" << rd.ROMname); res << rd; } } } } this->Status("Scan abgeschlossen.", 2000); return (res); }
void PackageProcessor::handlePackageUnarchFinished (int ret, QProcess::ExitStatus) { sender ()->deleteLater (); QProcess *unarch = qobject_cast<QProcess*> (sender ()); int packageId = unarch->property ("PackageID").toInt (); const auto& stagingDir = unarch->property ("StagingDirectory").toString (); Mode mode = static_cast<Mode> (unarch->property ("Mode").toInt ()); auto cleanupGuard = std::shared_ptr<void> (nullptr, [&stagingDir, this] (void*) { CleanupDir (stagingDir); }); if (ret) { QString errString = QString::fromUtf8 (unarch->readAllStandardError ()); qWarning () << Q_FUNC_INFO << "unpacker exited with" << ret << errString << "for" << packageId << unarch->property ("Path").toString (); QString errorString = tr ("Unable to unpack package archive, unpacker exited with %1: %2.") .arg (ret) .arg (errString); emit packageInstallError (packageId, errorString); return; } int oldId = -1; if (mode == MUpdate) { oldId = Core::Instance ().GetStorage ()->FindInstalledPackage (packageId); if (!CleanupBeforeUpdate (oldId, packageId)) { qWarning () << Q_FUNC_INFO << "unable to cleanup"; return; } } QDir packageDir; try { packageDir = Core::Instance ().GetPackageDir (packageId); } catch (const std::exception& e) { qWarning () << Q_FUNC_INFO << "while trying to get dir for package" << packageId << "got we exception" << e.what (); QString errorString = tr ("Unable to get directory for the package: %1.") .arg (QString::fromUtf8 (e.what ())); emit packageInstallError (packageId, errorString); return; } QDirIterator dirIt (stagingDir, QDir::NoDotAndDotDot | QDir::Readable | QDir::NoSymLinks | QDir::Dirs | QDir::Files, QDirIterator::Subdirectories); while (dirIt.hasNext ()) { dirIt.next (); QFileInfo fi = dirIt.fileInfo (); if (fi.isDir () || fi.isFile ()) if (!HandleEntry (packageId, fi, stagingDir, packageDir)) { try { Remove (packageId); } catch (const std::exception& e) { qWarning () << Q_FUNC_INFO << "while removing partially installed package" << packageId << "got:" << e.what (); } QString errorString = tr ("Unable to copy " "files from staging area to " "destination directory."); emit packageInstallError (packageId, errorString); return; } } switch (mode) { case MInstall: emit packageInstalled (packageId); break; case MUpdate: emit packageUpdated (oldId, packageId); break; } }