File indexing completed on 2024-05-12 05:48:11

0001 // SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL
0002 // SPDX-FileCopyrightText: 2022 Harald Sitter <sitter@kde.org>
0003 
0004 #include "putcommand.h"
0005 
0006 #include <KIO/TransferJob>
0007 
0008 PutCommand::PutCommand(const QUrl &url, int permissions, KIO::JobFlags flags, const QString &remoteService, const QDBusObjectPath &objectPath, QObject *parent)
0009     : BusObject(remoteService, objectPath, parent)
0010     , m_url(url)
0011     , m_permissions(permissions)
0012     , m_flags(flags)
0013 {
0014 }
0015 
0016 void PutCommand::start()
0017 {
0018     qDebug() << Q_FUNC_INFO;
0019     if (!isAuthorized()) {
0020         sendErrorReply(QDBusError::AccessDenied);
0021         return;
0022     }
0023 
0024     auto job = KIO::put(m_url, m_permissions, m_flags);
0025     setParent(job);
0026     connect(job, &KIO::TransferJob::dataReq, this, [this](KIO::Job *, QByteArray &data) {
0027         qDebug() << Q_FUNC_INFO << "data request";
0028         sendSignal(&PutCommand::dataRequest);
0029         m_loop.exec();
0030         data = m_newData;
0031     });
0032     connect(job, &KIO::TransferJob::result, this, [this, job](KJob *) {
0033         qDebug() << Q_FUNC_INFO << "result" << job->errorString();
0034         sendSignal(&PutCommand::result, job->error(), job->errorString());
0035     });
0036 }
0037 
0038 void PutCommand::data(const QByteArray &data)
0039 {
0040     qDebug() << Q_FUNC_INFO;
0041     if (!isAuthorized()) {
0042         sendErrorReply(QDBusError::AccessDenied);
0043         return;
0044     }
0045 
0046     m_newData = data;
0047     m_loop.quit();
0048 }
0049 
0050 void PutCommand::kill()
0051 {
0052     doKill();
0053 }