File indexing completed on 2024-05-05 05:28:55

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 }
0083 
0084 #include "moc_transferfilejob.cpp"