コード例 #1
0
ファイル: clonethread.cpp プロジェクト: Gris87/CloneQtProject
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;
        }
    }
}
コード例 #2
0
ファイル: IProgressBar.cpp プロジェクト: fjz13/Medusa
void IProgressBar::SetPercent(float val)
{
	if (Math::IsEqual(mPercent,val))
	{
		return;
	}

	mPercent = val;
	OnProgressChanged(this,mPercent);
	OnUpdateMesh(false);

}
コード例 #3
0
ファイル: task.cpp プロジェクト: bartbes/MultiMC4
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);
}
コード例 #4
0
ファイル: clonethread.cpp プロジェクト: Gris87/CloneQtProject
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;
}