File indexing completed on 2024-12-01 13:09:19

0001 /*
0002    SPDX-FileCopyrightText: 2022-2024 Laurent Montel <montel@kde.org>
0003 
0004    SPDX-License-Identifier: LGPL-2.0-or-later
0005 */
0006 
0007 #include "uploadfilemanager.h"
0008 #include "connection.h"
0009 #include "rocketchataccount.h"
0010 #include "ruqola_debug.h"
0011 
0012 #include <QFile>
0013 
0014 int UploadFileManager::uploadIdentifier = 0;
0015 UploadFileManager::UploadFileManager(RocketChatAccount *account, QObject *parent)
0016     : QObject{parent}
0017     , mRocketChatAccount(account)
0018 {
0019 }
0020 
0021 UploadFileManager::~UploadFileManager() = default;
0022 
0023 int UploadFileManager::addUpload(const RocketChatRestApi::UploadFileJob::UploadFileInfo &info)
0024 {
0025     QPointer<RocketChatRestApi::UploadFileJob> job = new RocketChatRestApi::UploadFileJob(this);
0026     mRocketChatAccount->restApi()->initializeRestApiJob(job);
0027     job->setUploadFileInfo(info);
0028     uploadIdentifier++;
0029     const int jobIdentifier = uploadIdentifier;
0030     connect(job,
0031             &RocketChatRestApi::UploadFileJob::uploadProgress,
0032             this,
0033             [this, jobIdentifier](const RocketChatRestApi::UploadFileJob::UploadStatusInfo &info) {
0034                 Q_EMIT uploadProgress(info, jobIdentifier, mRocketChatAccount->accountName());
0035             });
0036     // Need to delete temporary file.
0037     connect(job, &RocketChatRestApi::UploadFileJob::uploadFinished, this, [info, jobIdentifier, this]() {
0038         if (info.deleteTemporaryFile) {
0039             QFile f(info.filenameUrl.toLocalFile());
0040             if (f.remove()) {
0041                 qCWarning(RUQOLA_LOG) << "Impossible to delete file" << f.fileName();
0042             }
0043         }
0044         mUploadMap.remove(jobIdentifier);
0045     });
0046     if (!job->start()) {
0047         qCWarning(RUQOLA_LOG) << "Impossible to start UploadFileJob job";
0048         return -1;
0049     } else {
0050         mUploadMap.insert(uploadIdentifier, job);
0051         return uploadIdentifier;
0052     }
0053 }
0054 
0055 void UploadFileManager::removeFile(const RocketChatRestApi::UploadFileJob::UploadFileInfo &info)
0056 {
0057     if (info.deleteTemporaryFile) {
0058         QFile f(info.filenameUrl.toLocalFile());
0059         if (f.remove()) {
0060             qCWarning(RUQOLA_LOG) << "Impossible to delete file" << f.fileName();
0061         }
0062     }
0063 }
0064 
0065 void UploadFileManager::cancelJob(int identifier)
0066 {
0067     auto job = mUploadMap.take(identifier);
0068     // Abort will remove job too.
0069     if (job) {
0070         removeFile(job->uploadFileInfo());
0071         job->abort();
0072     }
0073 }
0074 
0075 #include "moc_uploadfilemanager.cpp"