Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/owncloud/client.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHannah von Reth <hannah.vonreth@owncloud.com>2021-04-06 15:45:55 +0300
committerHannah von Reth <vonreth@kde.org>2021-04-06 16:19:11 +0300
commit420e55b5f850e953ef2e1ba8ea1cb61a1e8d536a (patch)
tree4ed0391031a744697b945adfcd7490c7c9fb25ca /src/gui/socketapi
parent4d6715b09fa6491c6a3c2fb7e7b025e705f13fc2 (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.cpp52
-rw-r--r--src/gui/socketapi/socketuploadjob.h3
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;
};