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
145 | 145 |
|
146 | 146 |
q->setCapabilities(KJob::Killable);
|
147 | 147 |
q->setTotalAmount(KJob::Bytes, channel->size());
|
148 | |
q->setProcessedAmount(KJob::Bytes, 0);
|
|
148 |
q->setProcessedAmountAndCalculateSpeed(0);
|
149 | 149 |
|
150 | 150 |
q->connect(channel.data(),
|
151 | 151 |
SIGNAL(invalidated(Tp::DBusProxy*,QString,QString)),
|
|
423 | 423 |
this->offset = offset;
|
424 | 424 |
|
425 | 425 |
file->seek(offset);
|
426 | |
q->setProcessedAmount(KJob::Bytes, offset);
|
|
426 |
q->setProcessedAmountAndCalculateSpeed(offset);
|
427 | 427 |
}
|
428 | 428 |
|
429 | 429 |
void HandleIncomingFileTransferChannelJobPrivate::__k__onFileTransferChannelStateChanged(Tp::FileTransferState state,
|
|
483 | 483 |
kDebug().nospace() << "Receiving " << channel->fileName() << " - "
|
484 | 484 |
<< "transferred bytes" << " = " << offset + count << " ("
|
485 | 485 |
<< ((int)(((double)(offset + count) / channel->size()) * 100)) << "% done)";
|
486 | |
q->setProcessedAmount(KJob::Bytes, offset + count);
|
|
486 |
q->setProcessedAmountAndCalculateSpeed(offset + count);
|
487 | 487 |
}
|
488 | 488 |
|
489 | 489 |
void HandleIncomingFileTransferChannelJobPrivate::__k__onAcceptFileFinished(Tp::PendingOperation* op)
|
144 | 144 |
|
145 | 145 |
q->setCapabilities(KJob::Killable);
|
146 | 146 |
q->setTotalAmount(KJob::Bytes, channel->size());
|
147 | |
q->setProcessedAmount(KJob::Bytes, 0);
|
|
147 |
q->setProcessedAmountAndCalculateSpeed(0);
|
148 | 148 |
|
149 | 149 |
q->connect(channel.data(),
|
150 | 150 |
SIGNAL(invalidated(Tp::DBusProxy*,QString,QString)),
|
|
204 | 204 |
Q_Q(HandleOutgoingFileTransferChannelJob);
|
205 | 205 |
|
206 | 206 |
this->offset = offset;
|
207 | |
q->setProcessedAmount(KJob::Bytes, offset);
|
|
207 |
q->setProcessedAmountAndCalculateSpeed(offset);
|
208 | 208 |
}
|
209 | 209 |
|
210 | 210 |
void HandleOutgoingFileTransferChannelJobPrivate::__k__onFileTransferChannelStateChanged(Tp::FileTransferState state,
|
|
265 | 265 |
kDebug().nospace() << "Sending " << channel->fileName() << " - "
|
266 | 266 |
<< "Transferred bytes = " << offset + count << " ("
|
267 | 267 |
<< ((int)(((double)(offset + count) / channel->size()) * 100)) << "% done)";
|
268 | |
q->setProcessedAmount(KJob::Bytes, offset + count);
|
|
268 |
q->setProcessedAmountAndCalculateSpeed(offset + count);
|
269 | 269 |
}
|
270 | 270 |
|
271 | 271 |
void HandleOutgoingFileTransferChannelJobPrivate::__k__onProvideFileFinished(Tp::PendingOperation* op)
|
28 | 28 |
|
29 | 29 |
TelepathyBaseJobPrivate::TelepathyBaseJobPrivate()
|
30 | 30 |
: q_ptr(0)
|
|
31 |
, alreadyProcessed(0)
|
31 | 32 |
{
|
32 | 33 |
}
|
33 | 34 |
|
|
56 | 57 |
TelepathyBaseJob::~TelepathyBaseJob()
|
57 | 58 |
{
|
58 | 59 |
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);
|
59 | 82 |
}
|
60 | 83 |
|
61 | 84 |
void TelepathyBaseJobPrivate::__k__tpOperationFinished(Tp::PendingOperation* op)
|
95 | 95 |
explicit TelepathyBaseJob(TelepathyBaseJobPrivate &dd, QObject *parent = 0);
|
96 | 96 |
virtual ~TelepathyBaseJob();
|
97 | 97 |
|
|
98 |
void setProcessedAmountAndCalculateSpeed(qulonglong amount);
|
|
99 |
|
98 | 100 |
TelepathyBaseJobPrivate * const d_ptr;
|
99 | 101 |
};
|
100 | 102 |
|
21 | 21 |
|
22 | 22 |
#include "telepathy-base-job.h"
|
23 | 23 |
|
|
24 |
#include <QTime>
|
24 | 25 |
|
25 | 26 |
namespace Tp
|
26 | 27 |
{
|
|
41 | 42 |
TelepathyBaseJobPrivate();
|
42 | 43 |
virtual ~TelepathyBaseJobPrivate();
|
43 | 44 |
|
|
45 |
QTime time;
|
|
46 |
qulonglong alreadyProcessed;
|
44 | 47 |
QList< Tp::PendingOperation* > operations;
|
45 | 48 |
QList< QPair< QString, QString > > telepathyErrors;
|
46 | 49 |
|