File indexing completed on 2023-11-26 08:17:56

0001 /*
0002    SPDX-FileCopyrightText: 2022-2023 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     if (info.deleteTemporaryFile) {
0038         connect(job, &RocketChatRestApi::UploadFileJob::uploadFinished, this, [info]() {
0039             QFile f(info.filenameUrl.toLocalFile());
0040             if (f.remove()) {
0041                 qCWarning(RUQOLA_LOG) << "Impossible to delete file" << f.fileName();
0042             }
0043         });
0044     }
0045     if (!job->start()) {
0046         qCWarning(RUQOLA_LOG) << "Impossible to start UploadFileJob job";
0047         return -1;
0048     } else {
0049         mUploadMap.insert(uploadIdentifier, job);
0050         return uploadIdentifier;
0051     }
0052 }
0053 
0054 void UploadFileManager::removeFile(const RocketChatRestApi::UploadFileJob::UploadFileInfo &info)
0055 {
0056     if (info.deleteTemporaryFile) {
0057         QFile f(info.filenameUrl.toLocalFile());
0058         if (f.remove()) {
0059             qCWarning(RUQOLA_LOG) << "Impossible to delete file" << f.fileName();
0060         }
0061     }
0062 }
0063 
0064 void UploadFileManager::cancelJob(int identifier)
0065 {
0066     auto job = mUploadMap.take(identifier);
0067     // Abort will remove job too.
0068     if (job) {
0069         removeFile(job->uploadFileInfo());
0070         job->abort();
0071     }
0072 }
0073 
0074 #include "moc_uploadfilemanager.cpp"