Adds immediate migration results in progress

This commit is contained in:
torsten committed 2026-08-19 11:18:24 +02:00
1 parent 8453e104c5
commit 3bb6e89496
2102 files changed
+17482 -15071

No files matched your search

@@ -48,7 +48,7 @@ Compress::Compress(QObject *parent)
, m_u2_memFiles()
, m_aborted(0)
{
DEBUG_LOG() << "c_tor";
DEBUG_LOG(m_logger) << "c_tor";
@@ -69,29 +69,29 @@ Compress::~Compress()
qWarning() << "## COMPRESS DTOR!!!!";
DEBUG_LOG() << "~";
DEBUG_LOG(m_logger) << "~";
abort();
m_future.waitForFinished();
DEBUG_LOG() << "~ finished";
DEBUG_LOG(m_logger) << "~ finished";
}
void Compress::abort()
{
DEBUG_LOG() << "ABORT";
DEBUG_LOG(m_logger) << "ABORT";
m_aborted = 1;
m_lastError = tr("Aborted");
if (m_currentTarFilter != nullptr)
{
DEBUG_LOG() << "aborting tar";
DEBUG_LOG(m_logger) << "aborting tar";
m_currentTarFilter->abort();
}
if (m_currentBzipDevice != nullptr)
{
DEBUG_LOG() << "aborting bzip";
DEBUG_LOG(m_logger) << "aborting bzip";
m_currentBzipDevice->abort();
}
}
@@ -102,7 +102,7 @@ void Compress::compress(QIODevice *out,
const QVector<FileInformations> &memFiles,
const QString &destRootDir)
{
DEBUG_LOG() << "compress #2";
DEBUG_LOG(m_logger) << "compress #2";
reset();
setupFutureWatcher(QtConcurrent::run([this, out, filesRootDir, files, memFiles, destRootDir]() {
return this->_compress(out, filesRootDir, files, memFiles, destRootDir);
@@ -111,7 +111,7 @@ void Compress::compress(QIODevice *out,
void Compress::compress(QIODevice *out, const QString &sourceDir, const QString &destRootDir)
{
DEBUG_LOG() << "compress #1 source dir: " << sourceDir << ", destRootDir: " << destRootDir;
DEBUG_LOG(m_logger) << "compress #1 source dir: " << sourceDir << ", destRootDir: " << destRootDir;
reset();
QVector<Compress::FileInformations> inFiles = directoryFileList(sourceDir, true);
@@ -124,10 +124,10 @@ void Compress::compress(QIODevice *out, const QString &sourceDir, const QString
{
fi.inputFileName = fi.inputFileName.mid(len);
fi.bAbsInputPath = false;
DEBUG_LOG() << "fi: ifm = " << fi.inputFileName << ", abs = " << fi.bAbsInputPath;
DEBUG_LOG(m_logger) << "fi: ifm = " << fi.inputFileName << ", abs = " << fi.bAbsInputPath;
}
DEBUG_LOG() << "FI list size: " << inFiles.count();
DEBUG_LOG(m_logger) << "FI list size: " << inFiles.count();
compress(out, sourceDir, inFiles, {}, destRootDir);
}
@@ -140,7 +140,7 @@ bool Compress::_compress(QIODevice *output,
{
std::shared_ptr<int> invalidatePointersOnScopeLeave(nullptr, [this](int *)
{
DEBUG_LOG() << "invalidatePointersOnScopeLeave #1";
DEBUG_LOG(m_logger) << "invalidatePointersOnScopeLeave #1";
m_currentTarFilter = nullptr;
m_currentBzipDevice = nullptr;
});
@@ -150,7 +150,7 @@ bool Compress::_compress(QIODevice *output,
if (!output || !output->isWritable())
{
m_lastError = tr("Device is not writeable");
ERROR_LOG() << "compress failed: " << m_lastError;;
ERROR_LOG(m_logger) << "compress failed: " << m_lastError;;
return false;
}
@@ -161,7 +161,7 @@ bool Compress::_compress(QIODevice *output,
const qint64 maxCount = files.count() + memFiles.count();
qint64 count = 0;
DEBUG_LOG() << "destRootDir = " << destRootDir << ", maxCount = " << maxCount << ", count = " << count;
DEBUG_LOG(m_logger) << "destRootDir = " << destRootDir << ", maxCount = " << maxCount << ", count = " << count;
BZip2IODevice bzip2(output, 9);
m_currentBzipDevice = &bzip2;
@@ -169,7 +169,7 @@ bool Compress::_compress(QIODevice *output,
if (!bzip2.open(QIODevice::WriteOnly))
{
m_lastError = bzip2.errorString();
ERROR_LOG() << "compress failed: " << m_lastError;
ERROR_LOG(m_logger) << "compress failed: " << m_lastError;
return false;
}
@@ -192,7 +192,7 @@ bool Compress::_compress(QIODevice *output,
QString currentFileName;
auto readCallback = [this, &maxCount, &count, &currentFileSize, &currentFileName, &bytesTotal](const qint64 iSize)
{
DEBUG_LOG() << "readCallback: maxCount = " << maxCount << ", count = " << count
DEBUG_LOG(m_logger) << "readCallback: maxCount = " << maxCount << ", count = " << count
<< ", currentFileSize = " << currentFileSize << ", currentFileName = " << currentFileName << ", iSize = " << iSize;
emit compressInfoEx(maxCount, count, currentFileSize, (currentFileSize - iSize), currentFileName, bytesTotal);
};
@@ -204,10 +204,10 @@ bool Compress::_compress(QIODevice *output,
QString curPath;
DEBUG_LOG() << "prepairing tar filter";
DEBUG_LOG(m_logger) << "prepairing tar filter";
for (const QString &path : paths)
{
DEBUG_LOG() << "path = " << path;
DEBUG_LOG(m_logger) << "path = " << path;
if (m_aborted) return false;
if (curPath.isEmpty())
@@ -215,14 +215,14 @@ bool Compress::_compress(QIODevice *output,
else
curPath += path + QLatin1Char('/');
DEBUG_LOG() << "curPath = " << curPath << ", filesRootDir.isEmpty() = " << filesRootDir.isEmpty();
DEBUG_LOG(m_logger) << "curPath = " << curPath << ", filesRootDir.isEmpty() = " << filesRootDir.isEmpty();
if (filesRootDir.isEmpty())
{
if (!tf.addData(curPath, QByteArray(), true))
{
m_lastError = tf.lastError();
ERROR_LOG() << "compress failed: " << m_lastError;
ERROR_LOG(m_logger) << "compress failed: " << m_lastError;
return false;
}
@@ -232,7 +232,7 @@ bool Compress::_compress(QIODevice *output,
if (!tf.addFile(filesRootDir, curPath))
{
m_lastError = tf.lastError();
ERROR_LOG() << "compress failed: " << m_lastError;
ERROR_LOG(m_logger) << "compress failed: " << m_lastError;
return false;
}
@@ -242,7 +242,7 @@ bool Compress::_compress(QIODevice *output,
m_c_sizeInfo.realSize = 0;
for (const FileInformations &file : std::as_const(files))
{
DEBUG_LOG() << "file = " << file.inputFileName;
DEBUG_LOG(m_logger) << "file = " << file.inputFileName;
emit compressInfo(maxCount, ++count, file.inputFileName);
if (m_aborted) return false;
@@ -250,7 +250,7 @@ bool Compress::_compress(QIODevice *output,
QString in = file.bAbsInputPath ? file.inputFileName : filesRootDir + QLatin1Char('/') + file.inputFileName;
QString out = destRootDir + (file.outputFileName.isEmpty() ? file.inputFileName : file.outputFileName);
DEBUG_LOG() << "in = " << in << ", out = " << out;
DEBUG_LOG(m_logger) << "in = " << in << ", out = " << out;
QFileInfo fi(in);
@@ -258,12 +258,12 @@ bool Compress::_compress(QIODevice *output,
currentFileSize = fi.size();
m_c_sizeInfo.realSize += currentFileSize;
DEBUG_LOG() << "currentFileName = " << currentFileName << ", currentFileSize = " << currentFileSize << "m_c_sizeInfo.realSize" << m_c_sizeInfo.realSize;
DEBUG_LOG(m_logger) << "currentFileName = " << currentFileName << ", currentFileSize = " << currentFileSize << "m_c_sizeInfo.realSize" << m_c_sizeInfo.realSize;
if (!tf.addFile(in, out))
{
m_lastError = tf.lastError();
ERROR_LOG() << "compress failed: " << m_lastError;
ERROR_LOG(m_logger) << "compress failed: " << m_lastError;
return false;
}
@@ -271,7 +271,7 @@ bool Compress::_compress(QIODevice *output,
for (const FileInformations &file : std::as_const(memFiles))
{
DEBUG_LOG() << "(mem) file = " << file.inputFileName;
DEBUG_LOG(m_logger) << "(mem) file = " << file.inputFileName;
emit compressInfo(maxCount, ++count, file.inputFileName);
if (m_aborted) return false;
@@ -280,48 +280,48 @@ bool Compress::_compress(QIODevice *output,
currentFileSize = file.fileData.size();
m_c_sizeInfo.compressedSize += currentFileSize;
DEBUG_LOG() << "(mem) currentFileName = " << currentFileName << ", currentFileSize = " << currentFileSize << "m_c_sizeInfo.realSize" << m_c_sizeInfo.realSize;
DEBUG_LOG(m_logger) << "(mem) currentFileName = " << currentFileName << ", currentFileSize = " << currentFileSize << "m_c_sizeInfo.realSize" << m_c_sizeInfo.realSize;
if (!tf.addData(file.inputFileName, file.fileData))
{
m_lastError = tf.lastError();
ERROR_LOG() << "compress failed: " << m_lastError;
ERROR_LOG(m_logger) << "compress failed: " << m_lastError;
return false;
}
}
DEBUG_LOG() << "writing eos";
DEBUG_LOG(m_logger) << "writing eos";
tf.writeEOS();
DEBUG_LOG() << "closing bzip";
DEBUG_LOG(m_logger) << "closing bzip";
bzip2.close();
m_c_sizeInfo.compressedSize = output->size();
DEBUG_LOG() << "m_c_sizeInfo.compressedSize = " << m_c_sizeInfo.compressedSize;
DEBUG_LOG(m_logger) << "m_c_sizeInfo.compressedSize = " << m_c_sizeInfo.compressedSize;
m_success = true;
DEBUG_LOG() << "DONE!";
DEBUG_LOG(m_logger) << "DONE!";
return true;
}
void Compress::uncompress(QIODevice *in, const QString &outDir)
{
DEBUG_LOG() << "uncompress #1";
DEBUG_LOG(m_logger) << "uncompress #1";
reset();
setupFutureWatcher(QtConcurrent::run([this, in, outDir](){ return this->_uncompressDirectory(in, outDir); }));
}
bool Compress::_uncompressDirectory(QIODevice *input, const QString &outDir)
{
DEBUG_LOG() << "_uncompressDirectory";
DEBUG_LOG(m_logger) << "_uncompressDirectory";
std::shared_ptr<int> invalidatePointersOnScopeLeave(nullptr, [this](int *)
{
DEBUG_LOG() << "invalidatePointersOnScopeLeave #2";
DEBUG_LOG(m_logger) << "invalidatePointersOnScopeLeave #2";
m_currentTarFilter = nullptr;
m_currentBzipDevice = nullptr;
});
@@ -331,7 +331,7 @@ bool Compress::_uncompressDirectory(QIODevice *input, const QString &outDir)
if (!input || !input->isReadable())
{
m_lastError = tr("Device is not readable");
ERROR_LOG() << "compress failed: " << m_lastError;
ERROR_LOG(m_logger) << "compress failed: " << m_lastError;
return false;
}
@@ -341,7 +341,7 @@ bool Compress::_uncompressDirectory(QIODevice *input, const QString &outDir)
if (!bzip2.open(QIODevice::ReadOnly))
{
m_lastError = bzip2.errorString();
ERROR_LOG() << "compress failed: " << m_lastError;
ERROR_LOG(m_logger) << "compress failed: " << m_lastError;
return false;
}
@@ -351,23 +351,23 @@ bool Compress::_uncompressDirectory(QIODevice *input, const QString &outDir)
TarFilter::FileInformations tfi;
QDir dir(outDir);
DEBUG_LOG() << "dir = " << dir.path();
DEBUG_LOG(m_logger) << "dir = " << dir.path();
while (tf.getData(tfi))
{
DEBUG_LOG() << "tfi.fileName = " << tfi.fileName;
DEBUG_LOG(m_logger) << "tfi.fileName = " << tfi.fileName;
emit uncompressInfo(input->size(), input->pos(), tfi.fileName);
if (m_aborted) return false;
QString path = outDir + QLatin1Char('/') + tfi.fileName;
DEBUG_LOG() << "path = " << path;
DEBUG_LOG(m_logger) << "path = " << path;
if (tfi.fileType == TarFilter::directory)
{
DEBUG_LOG() << "tfi.fileType == TarFilter::directory";
DEBUG_LOG(m_logger) << "tfi.fileType == TarFilter::directory";
if (!dir.exists(path) && !dir.mkpath(path))
{
m_lastError = tr("Error creating directory %1").arg(outDir);
ERROR_LOG() << "compress failed: " << m_lastError;
ERROR_LOG(m_logger) << "compress failed: " << m_lastError;
return false;
}
@@ -379,7 +379,7 @@ bool Compress::_uncompressDirectory(QIODevice *input, const QString &outDir)
if (!dir.exists(pathName) && !dir.mkpath(pathName))
{
m_lastError = tr("Error creating directory %1").arg(pathName);
ERROR_LOG() << "compress failed: " << m_lastError;
ERROR_LOG(m_logger) << "compress failed: " << m_lastError;
return false;
}
@@ -387,39 +387,39 @@ bool Compress::_uncompressDirectory(QIODevice *input, const QString &outDir)
if (!f.open(QIODevice::WriteOnly))
{
m_lastError = tr("Error opening %1 for writing (%2)").arg(path, f.errorString());
ERROR_LOG() << "compress failed: " << m_lastError;
ERROR_LOG(m_logger) << "compress failed: " << m_lastError;
return false;
}
if (!tf.getData(&f))
{
m_lastError = tf.lastError();
ERROR_LOG() << "compress failed: " << m_lastError;
ERROR_LOG(m_logger) << "compress failed: " << m_lastError;
return false;
}
}
}
DEBUG_LOG() << "uncompress done!";
DEBUG_LOG(m_logger) << "uncompress done!";
m_success = true;
return true;
}
void Compress::uncompress(QIODevice *in)
{
DEBUG_LOG() << "uncompress #2!";
DEBUG_LOG(m_logger) << "uncompress #2!";
reset();
setupFutureWatcher(QtConcurrent::run([this, in](){ return this->_uncompressBuffer(in); }));
}
bool Compress::_uncompressBuffer(QIODevice *input)
{
DEBUG_LOG() << "uncompressBuffer";
DEBUG_LOG(m_logger) << "uncompressBuffer";
std::shared_ptr<int> invalidatePointersOnScopeLeave(nullptr, [this](int *)
{
DEBUG_LOG() << "invalidatePointersOnScopeLeave #2";
DEBUG_LOG(m_logger) << "invalidatePointersOnScopeLeave #2";
m_currentTarFilter = nullptr;
m_currentBzipDevice = nullptr;
});
@@ -429,7 +429,7 @@ bool Compress::_uncompressBuffer(QIODevice *input)
if (!input->isReadable())
{
m_lastError = tr("Device is not readable");
ERROR_LOG() << "compress failed: " << m_lastError;
ERROR_LOG(m_logger) << "compress failed: " << m_lastError;
return false;
}
@@ -439,7 +439,7 @@ bool Compress::_uncompressBuffer(QIODevice *input)
if (!bzip2.open(QIODevice::ReadOnly))
{
m_lastError = bzip2.errorString();
ERROR_LOG() << "compress failed: " << m_lastError;
ERROR_LOG(m_logger) << "compress failed: " << m_lastError;
return false;
}
@@ -449,43 +449,43 @@ bool Compress::_uncompressBuffer(QIODevice *input)
TarFilter::FileInformations tfi;
while (tf.getData(tfi))
{
DEBUG_LOG() << "tfi.fileName = " << tfi.fileName;
DEBUG_LOG(m_logger) << "tfi.fileName = " << tfi.fileName;
emit uncompressInfo(input->size(), input->pos(), tfi.fileName);
if (m_aborted) return false;
FileInformations fi;
fi.outputFileName = tfi.fileName;
DEBUG_LOG() << "fi.outputFileName = " << fi.outputFileName;
DEBUG_LOG(m_logger) << "fi.outputFileName = " << fi.outputFileName;
if (tfi.fileType == TarFilter::directory)
{
fi.outputFileName += QLatin1Char('/');
DEBUG_LOG() << "> fi.outputFileName = " << fi.outputFileName;
DEBUG_LOG(m_logger) << "> fi.outputFileName = " << fi.outputFileName;
}
else
{
DEBUG_LOG() << "stuff";
DEBUG_LOG(m_logger) << "stuff";
QBuffer buf(&fi.fileData);
if (!buf.open(QIODevice::WriteOnly))
{
m_lastError = tr("Error opening buffer for writing (%1)").arg(buf.errorString());
ERROR_LOG() << "compress failed: " << m_lastError;
ERROR_LOG(m_logger) << "compress failed: " << m_lastError;
return false;
}
if (!tf.getData(&buf))
{
m_lastError = tf.lastError();
ERROR_LOG() << "compress failed: " << m_lastError;
ERROR_LOG(m_logger) << "compress failed: " << m_lastError;
return false;
}
}
fi.bAbsInputPath = fi.outputFileName.startsWith(QLatin1Char('/'));
DEBUG_LOG() << "added fi.bAbsInputPath = " << fi.bAbsInputPath;
DEBUG_LOG(m_logger) << "added fi.bAbsInputPath = " << fi.bAbsInputPath;
m_u2_memFiles += fi;
}
@@ -496,8 +496,8 @@ bool Compress::_uncompressBuffer(QIODevice *input)
bool Compress::success() const
{
ERROR_LOG() << "success? " << (m_future.isFinished() && !m_future.isCanceled() && m_success);
ERROR_LOG() << "success details: "
ERROR_LOG(m_logger) << "success? " << (m_future.isFinished() && !m_future.isCanceled() && m_success);
ERROR_LOG(m_logger) << "success details: "
<< "success m_future.isFinished() = " << (m_future.isFinished())
<< " !m_future.isCanceled() = " << !m_future.isCanceled()
<< " m_success = " << m_success;
@@ -506,22 +506,22 @@ bool Compress::success() const
bool Compress::waitForFinished()
{
DEBUG_LOG() << "waitForFinished...";
DEBUG_LOG(m_logger) << "waitForFinished...";
m_future.waitForFinished();
DEBUG_LOG() << "waitForFinished... done!";
DEBUG_LOG(m_logger) << "waitForFinished... done!";
return success();
}
QVector<Compress::FileInformations> Compress::directoryFileList(const QString &dir, bool recursive)
{
DEBUG_LOG() << "directoryFileList";
DEBUG_LOG(m_logger) << "directoryFileList";
QVector<FileInformations> sl_absolute;
QDir d(dir);
if (d.exists())
{
DEBUG_LOG() << "exists";
DEBUG_LOG(m_logger) << "exists";
const auto entries = d.entryList(QDir::Files);
sl_absolute.reserve(sl_absolute.size() + entries.size());
for (const QString &entry : entries)
@@ -530,20 +530,20 @@ QVector<Compress::FileInformations> Compress::directoryFileList(const QString &d
if (recursive)
{
DEBUG_LOG() << "recursive";
DEBUG_LOG(m_logger) << "recursive";
const auto entries = d.entryList(QDir::Dirs | QDir::NoDotAndDotDot);
sl_absolute.reserve(sl_absolute.size() + entries.size());
for (const QString &s : entries)
sl_absolute << directoryFileList(dir + QLatin1Char('/') + s, true);
}
DEBUG_LOG() << "done";
DEBUG_LOG(m_logger) << "done";
return sl_absolute;
}
void Compress::reset()
{
DEBUG_LOG() << "reset";
DEBUG_LOG(m_logger) << "reset";
m_u2_memFiles.clear();
m_lastError.clear();
@@ -556,13 +556,13 @@ void Compress::reset()
void Compress::setupFutureWatcher(const QFuture<bool> &future)
{
DEBUG_LOG() << "setupFutureWatcher";
DEBUG_LOG(m_logger) << "setupFutureWatcher";
m_future = future;
QFutureWatcher<bool> *fw = new QFutureWatcher<bool>(this);
QObject::connect(fw, &QObject::destroyed, this, [this]() { DEBUG_LOG() << "Future Watcher destroyed"; });
QObject::connect(fw, &QObject::destroyed, this, [this]() { DEBUG_LOG(m_logger) << "Future Watcher destroyed"; });
QObject::connect(fw, &QFutureWatcher<bool>::finished, this, &Compress::finished);
QObject::connect(fw, &QFutureWatcher<bool>::finished, fw, &QObject::deleteLater);
QObject::connect(fw, &QFutureWatcher<bool>::finished, fw, [this]() { DEBUG_LOG() << "Future Watcher about to be deleted"; });
QObject::connect(fw, &QFutureWatcher<bool>::finished, fw, [this]() { DEBUG_LOG(m_logger) << "Future Watcher about to be deleted"; });
fw->setFuture(m_future);
}
@@ -109,6 +109,7 @@ Q_SIGNALS:
void finished();
private:
NGL::INGLLogger &m_logger;
bool _compress(QIODevice *output,
const QString &filesRootDir,
const QVector<FileInformations> &files,