Codebase list ktp-filetransfer-handler / 4c1f4a1
Implement speed calculation for incoming/out-going transfers This is not done automagically by KJob so we have to implement it by ourselves. BUG: 326787 Àlex Fiestas 10 years ago
5 changed file(s) with 34 addition(s) and 6 deletion(s). Raw diff Collapse all Expand all
145145
146146 q->setCapabilities(KJob::Killable);
147147 q->setTotalAmount(KJob::Bytes, channel->size());
148 q->setProcessedAmount(KJob::Bytes, 0);
148 q->setProcessedAmountAndCalculateSpeed(0);
149149
150150 q->connect(channel.data(),
151151 SIGNAL(invalidated(Tp::DBusProxy*,QString,QString)),
423423 this->offset = offset;
424424
425425 file->seek(offset);
426 q->setProcessedAmount(KJob::Bytes, offset);
426 q->setProcessedAmountAndCalculateSpeed(offset);
427427 }
428428
429429 void HandleIncomingFileTransferChannelJobPrivate::__k__onFileTransferChannelStateChanged(Tp::FileTransferState state,
483483 kDebug().nospace() << "Receiving " << channel->fileName() << " - "
484484 << "transferred bytes" << " = " << offset + count << " ("
485485 << ((int)(((double)(offset + count) / channel->size()) * 100)) << "% done)";
486 q->setProcessedAmount(KJob::Bytes, offset + count);
486 q->setProcessedAmountAndCalculateSpeed(offset + count);
487487 }
488488
489489 void HandleIncomingFileTransferChannelJobPrivate::__k__onAcceptFileFinished(Tp::PendingOperation* op)
144144
145145 q->setCapabilities(KJob::Killable);
146146 q->setTotalAmount(KJob::Bytes, channel->size());
147 q->setProcessedAmount(KJob::Bytes, 0);
147 q->setProcessedAmountAndCalculateSpeed(0);
148148
149149 q->connect(channel.data(),
150150 SIGNAL(invalidated(Tp::DBusProxy*,QString,QString)),
204204 Q_Q(HandleOutgoingFileTransferChannelJob);
205205
206206 this->offset = offset;
207 q->setProcessedAmount(KJob::Bytes, offset);
207 q->setProcessedAmountAndCalculateSpeed(offset);
208208 }
209209
210210 void HandleOutgoingFileTransferChannelJobPrivate::__k__onFileTransferChannelStateChanged(Tp::FileTransferState state,
265265 kDebug().nospace() << "Sending " << channel->fileName() << " - "
266266 << "Transferred bytes = " << offset + count << " ("
267267 << ((int)(((double)(offset + count) / channel->size()) * 100)) << "% done)";
268 q->setProcessedAmount(KJob::Bytes, offset + count);
268 q->setProcessedAmountAndCalculateSpeed(offset + count);
269269 }
270270
271271 void HandleOutgoingFileTransferChannelJobPrivate::__k__onProvideFileFinished(Tp::PendingOperation* op)
2828
2929 TelepathyBaseJobPrivate::TelepathyBaseJobPrivate()
3030 : q_ptr(0)
31 , alreadyProcessed(0)
3132 {
3233 }
3334
5657 TelepathyBaseJob::~TelepathyBaseJob()
5758 {
5859 delete d_ptr;
60 }
61
62 void TelepathyBaseJob::setProcessedAmountAndCalculateSpeed(qulonglong amount)
63 {
64 kDebug() << amount;
65 Q_D(TelepathyBaseJob);
66
67 //If the transfer is starting
68 if (amount == 0) {
69 d->time = QTime::currentTime();
70 }
71
72 //If a least 1 second has passed since last update
73 int secondsSinceLastTime = d->time.secsTo(QTime::currentTime());
74 if (secondsSinceLastTime > 0) {
75 float speed = (amount - d->alreadyProcessed) / secondsSinceLastTime;
76 emitSpeed(speed);
77
78 d->time = QTime::currentTime();
79 d->alreadyProcessed = amount;
80 }
81 setProcessedAmount(Bytes, amount);
5982 }
6083
6184 void TelepathyBaseJobPrivate::__k__tpOperationFinished(Tp::PendingOperation* op)
9595 explicit TelepathyBaseJob(TelepathyBaseJobPrivate &dd, QObject *parent = 0);
9696 virtual ~TelepathyBaseJob();
9797
98 void setProcessedAmountAndCalculateSpeed(qulonglong amount);
99
98100 TelepathyBaseJobPrivate * const d_ptr;
99101 };
100102
2121
2222 #include "telepathy-base-job.h"
2323
24 #include <QTime>
2425
2526 namespace Tp
2627 {
4142 TelepathyBaseJobPrivate();
4243 virtual ~TelepathyBaseJobPrivate();
4344
45 QTime time;
46 qulonglong alreadyProcessed;
4447 QList< Tp::PendingOperation* > operations;
4548 QList< QPair< QString, QString > > telepathyErrors;
4649