X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=src%2Fcore%2Fcoretransfer.cpp;h=209a800fcd3d23a692399e771ab97711ec28c44a;hp=3ccb5a393936a72f35fce3abab93a31b2d18ea4d;hb=c194ed5fb3d15e14b9364f9796d3521910dc72fe;hpb=695758015a80eb8c158a9ac4c0f1c0b547e70df3 diff --git a/src/core/coretransfer.cpp b/src/core/coretransfer.cpp index 3ccb5a39..209a800f 100644 --- a/src/core/coretransfer.cpp +++ b/src/core/coretransfer.cpp @@ -1,5 +1,5 @@ /*************************************************************************** - * Copyright (C) 2005-2015 by the Quassel Project * + * Copyright (C) 2005-2018 by the Quassel Project * * devel@quassel-irc.org * * * * This program is free software; you can redistribute it and/or modify * @@ -27,11 +27,9 @@ const qint64 chunkSize = 16 * 1024; -INIT_SYNCABLE_OBJECT(CoreTransfer) - CoreTransfer::CoreTransfer(Direction direction, const QString &nick, const QString &fileName, const QHostAddress &address, quint16 port, quint64 fileSize, QObject *parent) : Transfer(direction, nick, fileName, address, port, fileSize, parent), - _socket(0), + _socket(nullptr), _pos(0), _reading(false) { @@ -39,12 +37,18 @@ CoreTransfer::CoreTransfer(Direction direction, const QString &nick, const QStri } +quint64 CoreTransfer::transferred() const +{ + return _pos; +} + + void CoreTransfer::cleanUp() { if (_socket) { _socket->close(); _socket->deleteLater(); - _socket = 0; + _socket = nullptr; } _buffer.clear(); @@ -54,7 +58,7 @@ void CoreTransfer::cleanUp() void CoreTransfer::onSocketDisconnected() { - if (state() == Connecting || state() == Transferring) { + if (status() == Status::Connecting || status() == Status::Transferring) { setError(tr("Socket closed while still transferring!")); } else @@ -66,7 +70,7 @@ void CoreTransfer::onSocketError(QAbstractSocket::SocketError error) { Q_UNUSED(error) - if (state() == Connecting || state() == Transferring) { + if (status() == Status::Connecting || status() == Status::Transferring) { setError(tr("DCC connection error: %1").arg(_socket->errorString())); } } @@ -74,11 +78,11 @@ void CoreTransfer::onSocketError(QAbstractSocket::SocketError error) void CoreTransfer::requestAccepted(PeerPtr peer) { - if (_peer || !peer || state() != New) + if (_peer || !peer || status() != Status::New) return; // transfer was already accepted _peer = peer; - setState(Pending); + setStatus(Status::Pending); emit accepted(peer); @@ -89,11 +93,11 @@ void CoreTransfer::requestAccepted(PeerPtr peer) void CoreTransfer::requestRejected(PeerPtr peer) { - if (_peer || state() != New) + if (_peer || status() != Status::New) return; _peer = peer; - setState(Rejected); + setStatus(Status::Rejected); emit rejected(peer); } @@ -101,7 +105,7 @@ void CoreTransfer::requestRejected(PeerPtr peer) void CoreTransfer::start() { - if (!_peer || state() != Pending || direction() != Receive) + if (!_peer || status() != Status::Pending || direction() != Direction::Receive) return; setupConnectionForReceive(); @@ -115,7 +119,7 @@ void CoreTransfer::setupConnectionForReceive() return; } - setState(Connecting); + setStatus(Status::Connecting); _socket = new QTcpSocket(this); connect(_socket, SIGNAL(connected()), SLOT(startReceiving())); @@ -129,7 +133,7 @@ void CoreTransfer::setupConnectionForReceive() void CoreTransfer::startReceiving() { - setState(Transferring); + setStatus(Status::Transferring); } @@ -142,6 +146,7 @@ void CoreTransfer::onDataReceived() while (_socket->bytesAvailable()) { QByteArray data = _socket->read(chunkSize); _pos += data.size(); + emit transferredChanged(transferred()); if (!relayData(data, true)) return; @@ -162,7 +167,7 @@ void CoreTransfer::onDataReceived() else if (_pos == fileSize()) { qDebug() << "DCC Receive: Transfer finished"; if (relayData(QByteArray(), false)) // empty buffer - setState(Completed); + setStatus(Status::Completed); } _reading = false; @@ -180,7 +185,8 @@ bool CoreTransfer::relayData(const QByteArray &data, bool requireChunkSize) // we only want to send data to the client once we have reached the chunksize if (_buffer.size() > 0 && (_buffer.size() >= chunkSize || !requireChunkSize)) { - SYNC_OTHER(dataReceived, ARG(_peer), ARG(_buffer)); + Peer *p = _peer.data(); + SYNC_OTHER(dataReceived, ARG(p), ARG(_buffer)); _buffer.clear(); }