void CloneThread::run() { QStringList files; QStringList absoluteSourceFiles; QStringList absoluteDestinationFiles; quint64 totalSize; // Searching { emit OnProgressChanged(tr("Searching..."), 0, 0); if (!getFiles(files)) { return; } if (!getAbsolutePaths(files, absoluteSourceFiles, absoluteDestinationFiles)) { return; } printLists(files, absoluteSourceFiles, absoluteDestinationFiles); } // Calculating { emit OnProgressChanged(tr("Calculating..."), 0, 0); totalSize = getTotalSize(absoluteSourceFiles); if (mTerminated) { return; } qDebug() << "Total size: " << totalSize; } // Deleting { emit OnProgressChanged(tr("Deleting old folder..."), 0, 0); if (!deleteFolder(mDestinationPath)) { return; } } // Cloning { if (!cloneFiles(absoluteSourceFiles, absoluteDestinationFiles, totalSize)) { return; } } }
void IProgressBar::SetPercent(float val) { if (Math::IsEqual(mPercent,val)) { return; } mPercent = val; OnProgressChanged(this,mPercent); OnUpdateMesh(false); }
void Task::SetProgress(int progress, bool fireEvent /* = true */) { // For GTK to stop bitching if (progress >= 100) progress = 100; if (progress <= 0) progress = 0; m_progress = progress; if (fireEvent && !endCalled) OnProgressChanged(progress); }
bool CloneThread::cloneFiles(const QStringList &absoluteSourceFiles, const QStringList &absoluteDestinationFiles, const quint64 totalSize) { if (absoluteSourceFiles.length() != absoluteDestinationFiles.length()) { mError = tr("Amount of source files not equals to amount of destination files"); qCritical() << "Error:" << mError; return false; } char buffer[BUFFER_SIZE]; quint64 totalProgress = 0; qint64 timeStart = QDateTime::currentMSecsSinceEpoch(); for (int i=0; !mTerminated && i<absoluteSourceFiles.length(); ++i) { QString srcFileName = absoluteSourceFiles.at(i); QString destFileName = absoluteDestinationFiles.at(i); qDebug() << "Cloning:" << srcFileName; QFile srcFile(srcFileName); QFile destFile(destFileName); if (!srcFile.exists()) { mError = tr("File not found: %1").arg(QDir::toNativeSeparators(srcFileName)); qCritical() << "Error:" << mError; return false; } QString destFilePath = destFileName.left(destFileName.lastIndexOf("/")); if (!QDir().mkpath(destFilePath)) { mError = tr("Impossible to create path: %1").arg(QDir::toNativeSeparators(destFilePath)); qCritical() << "Error:" << mError; return false; } if (!srcFile.open(QIODevice::ReadOnly)) { mError = tr("Impossible to open file: %1").arg(QDir::toNativeSeparators(srcFileName)); qCritical() << "Error:" << mError; return false; } if (!destFile.open(QIODevice::WriteOnly)) { mError = tr("Impossible to create file: %1").arg(QDir::toNativeSeparators(destFileName)); qCritical() << "Error:" << mError; return false; } quint64 fileProgress = 0; quint64 fileSize = srcFile.size(); while (!mTerminated && !srcFile.atEnd()) { qint64 bytes = srcFile.read(buffer, BUFFER_SIZE); if (bytes < 0) { mError = tr("Impossible to read file: %1").arg(QDir::toNativeSeparators(srcFileName)); qCritical() << "Error:" << mError; return false; } if (destFile.write(buffer, bytes) != bytes) { mError = tr("Impossible to write file: %1").arg(QDir::toNativeSeparators(destFileName)); qCritical() << "Error:" << mError; return false; } fileProgress += bytes; totalProgress += bytes; if (fileSize && totalSize) { qint64 curTime = QDateTime::currentMSecsSinceEpoch(); if (curTime > timeStart + 1000) { timeStart = curTime; emit OnProgressChanged(srcFileName, fileProgress * 100 / fileSize, totalProgress * 100 / totalSize); } } } srcFile.close(); destFile.close(); } return !mTerminated; }