/***************************************************************************
- * Copyright (C) 2005-2015 by the Quassel Project *
+ * Copyright (C) 2005-2016 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
}
+quint64 CoreTransfer::transferred() const
+{
+ return _pos;
+}
+
+
void CoreTransfer::cleanUp()
{
if (_socket) {
void CoreTransfer::onSocketDisconnected()
{
- if (state() == State::Connecting || state() == State::Transferring) {
+ if (status() == Status::Connecting || status() == Status::Transferring) {
setError(tr("Socket closed while still transferring!"));
}
else
{
Q_UNUSED(error)
- if (state() == State::Connecting || state() == State::Transferring) {
+ if (status() == Status::Connecting || status() == Status::Transferring) {
setError(tr("DCC connection error: %1").arg(_socket->errorString()));
}
}
void CoreTransfer::requestAccepted(PeerPtr peer)
{
- if (_peer || !peer || state() != State::New)
+ if (_peer || !peer || status() != Status::New)
return; // transfer was already accepted
_peer = peer;
- setState(State::Pending);
+ setStatus(Status::Pending);
emit accepted(peer);
void CoreTransfer::requestRejected(PeerPtr peer)
{
- if (_peer || state() != State::New)
+ if (_peer || status() != Status::New)
return;
_peer = peer;
- setState(State::Rejected);
+ setStatus(Status::Rejected);
emit rejected(peer);
}
void CoreTransfer::start()
{
- if (!_peer || state() != State::Pending || direction() != Direction::Receive)
+ if (!_peer || status() != Status::Pending || direction() != Direction::Receive)
return;
setupConnectionForReceive();
return;
}
- setState(State::Connecting);
+ setStatus(Status::Connecting);
_socket = new QTcpSocket(this);
connect(_socket, SIGNAL(connected()), SLOT(startReceiving()));
void CoreTransfer::startReceiving()
{
- setState(State::Transferring);
+ setStatus(Status::Transferring);
}
while (_socket->bytesAvailable()) {
QByteArray data = _socket->read(chunkSize);
_pos += data.size();
+ emit transferredChanged(transferred());
if (!relayData(data, true))
return;
else if (_pos == fileSize()) {
qDebug() << "DCC Receive: Transfer finished";
if (relayData(QByteArray(), false)) // empty buffer
- setState(State::Completed);
+ setStatus(Status::Completed);
}
_reading = false;