File indexing completed on 2024-05-05 17:32:40
0001 /* 0002 * SPDX-FileCopyrightText: 2013 Alejandro Fiestas Fiestas <afiestas@kde.org> 0003 * 0004 * SPDX-License-Identifier: GPL-2.0-or-later 0005 */ 0006 0007 #include "transferfilejob.h" 0008 #include "bluedevil_kio_obexftp.h" 0009 #include "kioobexftp.h" 0010 0011 #include <KLocalizedString> 0012 0013 #include <BluezQt/PendingCall> 0014 0015 TransferFileJob::TransferFileJob(BluezQt::ObexTransferPtr transfer, KioFtp *parent) 0016 : KJob(parent) 0017 , m_speedBytes(0) 0018 , m_parent(parent) 0019 , m_transfer(transfer) 0020 { 0021 } 0022 0023 void TransferFileJob::start() 0024 { 0025 QMetaObject::invokeMethod(this, "doStart", Qt::QueuedConnection); 0026 } 0027 0028 void TransferFileJob::doStart() 0029 { 0030 connect(m_transfer.data(), &BluezQt::ObexTransfer::statusChanged, this, &TransferFileJob::statusChanged); 0031 connect(m_transfer.data(), &BluezQt::ObexTransfer::transferredChanged, this, &TransferFileJob::transferredChanged); 0032 } 0033 0034 void TransferFileJob::statusChanged(BluezQt::ObexTransfer::Status status) 0035 { 0036 switch (status) { 0037 case BluezQt::ObexTransfer::Active: 0038 qCDebug(BLUEDEVIL_KIO_OBEXFTP_LOG) << "Transfer Active"; 0039 m_time = QTime::currentTime(); 0040 break; 0041 0042 case BluezQt::ObexTransfer::Complete: 0043 qCDebug(BLUEDEVIL_KIO_OBEXFTP_LOG) << "Transfer Complete"; 0044 emitResult(); 0045 break; 0046 0047 case BluezQt::ObexTransfer::Error: 0048 qCDebug(BLUEDEVIL_KIO_OBEXFTP_LOG) << "Transfer Error"; 0049 setError(KJob::UserDefinedError); 0050 setErrorText(i18n("Bluetooth transfer failed")); 0051 emitResult(); 0052 break; 0053 0054 default: 0055 qCWarning(BLUEDEVIL_KIO_OBEXFTP_LOG) << "Not implemented status: " << status; 0056 break; 0057 } 0058 } 0059 0060 void TransferFileJob::transferredChanged(quint64 transferred) 0061 { 0062 // qCDebug(BLUEDEVIL_KIO_OBEXFTP_LOG) << "Transferred: " << transferred; 0063 0064 if (m_parent->wasKilled()) { 0065 qCDebug(BLUEDEVIL_KIO_OBEXFTP_LOG) << "Kio was killed, aborting task"; 0066 m_parent->cancelTransfer(m_transfer->objectPath().path()); 0067 emitResult(); 0068 return; 0069 } 0070 0071 // If at least 1 second has passed since last update 0072 int secondsSinceLastTime = m_time.secsTo(QTime::currentTime()); 0073 if (secondsSinceLastTime > 0) { 0074 float speed = (transferred - m_speedBytes) / secondsSinceLastTime; 0075 0076 m_parent->speed(speed); 0077 m_time = QTime::currentTime(); 0078 m_speedBytes = transferred; 0079 } 0080 0081 m_parent->processedSize(transferred); 0082 }