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"