diff options
author | Hannah von Reth <hannah.vonreth@owncloud.com> | 2021-04-06 15:45:55 +0300 |
---|---|---|
committer | Hannah von Reth <vonreth@kde.org> | 2021-04-06 16:19:11 +0300 |
commit | 420e55b5f850e953ef2e1ba8ea1cb61a1e8d536a (patch) | |
tree | 4ed0391031a744697b945adfcd7490c7c9fb25ca /src/gui/socketapi | |
parent | 4d6715b09fa6491c6a3c2fb7e7b025e705f13fc2 (diff) |
Log when we begin and end a backup requested on a socket
Diffstat (limited to 'src/gui/socketapi')
-rw-r--r-- | src/gui/socketapi/socketuploadjob.cpp | 52 | ||||
-rw-r--r-- | src/gui/socketapi/socketuploadjob.h | 3 |
2 files changed, 43 insertions, 12 deletions
diff --git a/src/gui/socketapi/socketuploadjob.cpp b/src/gui/socketapi/socketuploadjob.cpp index 26adea067..b3ef82bab 100644 --- a/src/gui/socketapi/socketuploadjob.cpp +++ b/src/gui/socketapi/socketuploadjob.cpp @@ -17,8 +17,10 @@ #include "accountmanager.h" #include "common/syncjournaldb.h" +#include "progressdispatcher.h" #include "syncengine.h" +#include <QDir> #include <QFileInfo> #include <QJsonArray> #include <QRegularExpression> @@ -26,15 +28,29 @@ using namespace OCC; +namespace { + +// create a fake SyncFileItemPtr to display a message in the protocol +void logMessage(const QString &localPath, const QString &message) +{ + auto item = SyncFileItemPtr::create(); + item->_status = SyncFileItem::Success; + item->_messageString = message; + item->_responseTimeStamp = QDateTime::currentDateTime().toString(Qt::RFC2822Date).toUtf8(); + Q_EMIT ProgressDispatcher::instance()->itemCompleted(QDir::toNativeSeparators(localPath), item); +} +} + SocketUploadJob::SocketUploadJob(const QSharedPointer<SocketApiJobV2> &job) : _apiJob(job) { connect(job.data(), &SocketApiJobV2::finished, this, &SocketUploadJob::deleteLater); } + void SocketUploadJob::start() { - const auto localPath = _apiJob->arguments()[QLatin1String("localPath")].toString(); + _localPath = _apiJob->arguments()[QLatin1String("localPath")].toString(); auto remotePath = _apiJob->arguments()[QLatin1String("remotePath")].toString(); if (!remotePath.startsWith(QLatin1Char('/'))) { remotePath = QLatin1Char('/') + remotePath; @@ -45,42 +61,48 @@ void SocketUploadJob::start() AccountStatePtr account; account = AccountManager::instance()->account(accname); + logMessage(_localPath, tr("Backup of %1 started").arg(QDir::toNativeSeparators(_localPath))); + if (!account) { - _apiJob->failure(QStringLiteral("Failed to find %1").arg(QString::fromUtf8(QJsonDocument(_apiJob->arguments()[QLatin1String("account")].toObject()).toJson()))); + fail(tr("Failed to find %1").arg(QString::fromUtf8(QJsonDocument(_apiJob->arguments()[QLatin1String("account")].toObject()).toJson()))); return; } - if (!QFileInfo(localPath).isAbsolute()) { - _apiJob->failure(QStringLiteral("Local path must be a an absolute path")); + if (!QFileInfo(_localPath).isAbsolute()) { + fail(tr("Local path must be a an absolute path")); return; } auto tmp = new QTemporaryFile(this); if (!tmp->open()) { - _apiJob->failure(QStringLiteral("Failed to create temporary database")); + fail(tr("Failed to create temporary database")); return; } auto db = new SyncJournalDb(tmp->fileName(), this); - auto engine = new SyncEngine(account->account(), localPath.endsWith(QLatin1Char('/')) ? localPath : localPath + QLatin1Char('/'), remotePath, db); + auto engine = new SyncEngine(account->account(), _localPath.endsWith(QLatin1Char('/')) ? _localPath : _localPath + QLatin1Char('/'), remotePath, db); engine->setParent(db); + connect(engine, &OCC::SyncEngine::transmissionProgress, this, [this](const ProgressInfo &info) { + Q_EMIT ProgressDispatcher::instance()->progressInfo(_localPath, info); + }); connect(engine, &OCC::SyncEngine::itemCompleted, this, [this](const OCC::SyncFileItemPtr item) { _syncedFiles.append(item->_file); }); - connect(engine, &OCC::SyncEngine::finished, this, [this, localPath](bool ok) { + connect(engine, &OCC::SyncEngine::finished, this, [this](bool ok) { if (ok) { - _apiJob->success({ { "localPath", localPath }, { "syncedFiles", QJsonArray::fromStringList(_syncedFiles) } }); + logMessage(_localPath, tr("Backup of %1 succeeded").arg(QDir::toNativeSeparators(_localPath))); + _apiJob->success({ { QStringLiteral("localPath"), _localPath }, { QStringLiteral("syncedFiles"), QJsonArray::fromStringList(_syncedFiles) } }); } }); connect(engine, &OCC::SyncEngine::syncError, this, [this](const QString &error, ErrorCategory) { - _apiJob->failure(error); + fail(error); }); auto opt = engine->syncOptions(); opt.setFilePattern(pattern); if (!opt.fileRegex().isValid()) { - _apiJob->failure(opt.fileRegex().errorString()); + fail(opt.fileRegex().errorString()); return; } engine->setSyncOptions(opt); @@ -92,10 +114,16 @@ void SocketUploadJob::start() if (reply->error() == QNetworkReply::NoError) { engine->startSync(); } else if (reply->error() == 202) { - _apiJob->failure(QStringLiteral("Destination %1 already exists").arg(remotePath)); + fail(QStringLiteral("Destination %1 already exists").arg(remotePath)); } else { - _apiJob->failure(reply->errorString()); + fail(reply->errorString()); } }); mkdir->start(); } + +void SocketUploadJob::fail(const QString &error) +{ + logMessage(_localPath, tr("Backup of %1 failed with: %2").arg(QDir::toNativeSeparators(_localPath), error)); + _apiJob->failure(error); +} diff --git a/src/gui/socketapi/socketuploadjob.h b/src/gui/socketapi/socketuploadjob.h index f7a80fe7a..f9dd24838 100644 --- a/src/gui/socketapi/socketuploadjob.h +++ b/src/gui/socketapi/socketuploadjob.h @@ -30,6 +30,9 @@ public: void start(); private: + void fail(const QString &error); + + QString _localPath; QSharedPointer<SocketApiJobV2> _apiJob; QStringList _syncedFiles; }; |