diff options
Diffstat (limited to 'saltoqd/fmsmanager.cpp')
-rw-r--r-- | saltoqd/fmsmanager.cpp | 78 |
1 files changed, 63 insertions, 15 deletions
diff --git a/saltoqd/fmsmanager.cpp b/saltoqd/fmsmanager.cpp index cdb9ee4..14220b7 100644 --- a/saltoqd/fmsmanager.cpp +++ b/saltoqd/fmsmanager.cpp @@ -22,7 +22,7 @@ static QString generate_send_name(const QString &path, int transactionId, int ch FmsManager::FmsManager(ObexConnection *obex, ToqManager *toq) : QObject(toq), _obex(obex), _toq(toq), - _curTransfer(0) + _curTransaction(0), _curTransfer(0), _curPath() { connect(_toq, &ToqManager::disconnected, this, &FmsManager::handleToqDisconnected); @@ -41,6 +41,9 @@ void FmsManager::handleMessage(const ToqConnection::Message &msg) case 0x4001: // Reply to file transfer handleTransferResult(msg.toJson().object()); break; + case 0x4002: // Reply to file delete + handleDeleteResult(msg.toJson().object()); + break; default: qWarning() << "Unknown message type" << msg.type; break; @@ -71,7 +74,7 @@ void FmsManager::deleteFile(const QString &path) void FmsManager::handleTransferResult(const QJsonObject &msg) { - if (msg["transaction_id"].toInt() != _curTransferTransactionId) { + if (msg["transaction_id"].toInt() != _curTransaction) { qWarning() << "Received a result for an invalid transaction id"; return; } @@ -79,17 +82,46 @@ void FmsManager::handleTransferResult(const QJsonObject &msg) int result = msg["result"].toInt(); if (result != 0) { qWarning() << "FMS transfer file failed with result" << result; + } else { + qDebug() << "Transfer finished succesfully"; + } + + cleanCurTransaction(); + handleQueue(); +} + +void FmsManager::handleDeleteResult(const QJsonObject &msg) +{ + if (msg["transaction_id"].toInt() != _curTransaction) { + qWarning() << "Received a result for an invalid transaction id"; + return; + } + + int result = msg["result"].toInt(); + if (result != 0) { + qWarning() << "FMS delete file failed with result" << result; + } else { + qDebug() << "Deleted file succesfully"; } - cleanCurTransfer(); + cleanCurTransaction(); handleQueue(); } void FmsManager::handleQueue() { - if (_pending.isEmpty()) return; - if (_curTransfer) return; - if (!_obex->isConnected()) return; + if (_pending.isEmpty()) { + qDebug() << "Queue empty"; + return; + } + if (_curTransaction) { + qDebug() << "Already in transaction"; + return; + } + if (!_obex->isConnected()) { + qDebug() << "Currently not connected"; + return; + } QString path = *_pending.begin(); _pending.remove(path); @@ -105,17 +137,32 @@ void FmsManager::handleQueue() obj.insert("transaction_id", transactionId); obj.insert("checksum", qint64(file.checksum)); + qDebug() << "Uploading file" << path; + _toq->sendMessage(ToqConnection::FMSEndpoint, ToqConnection::FMSEndpoint + 1, transactionId, 1, obj); + _curTransaction = transactionId; _curTransfer = _obex->put(name, file.contents); - _curTransferTransactionId = transactionId; - _curTransferPath = path; + _curPath = path; connect(_curTransfer, &ObexTransfer::error, this, &FmsManager::handleObexError); } else { - // TODO Remove files! + int transactionId = _toq->newTransactionId(); + + QJsonObject obj; + obj.insert("file_path", path); + obj.insert("transaction_id", transactionId); + obj.insert("type", QLatin1String("file")); + + qDebug() << "Deleting remote file" << path; + + _toq->sendMessage(ToqConnection::FMSEndpoint, ToqConnection::FMSEndpoint + 1, + transactionId, 2, obj); + + _curTransaction = transactionId; + _curPath = path; } } @@ -124,8 +171,8 @@ void FmsManager::handleToqDisconnected() _pending.clear(); if (_curTransfer) { _curTransfer->cancel(); - cleanCurTransfer(); } + cleanCurTransaction(); } void FmsManager::handleObexConnected() @@ -142,16 +189,17 @@ void FmsManager::handleObexError(int response) { Q_ASSERT(_curTransfer == sender()); Q_UNUSED(response); - qWarning() << "OBEX error while uploading" << _curTransferPath; - cleanCurTransfer(); + qWarning() << "OBEX error while uploading" << _curPath; + cleanCurTransaction(); } -void FmsManager::cleanCurTransfer() +void FmsManager::cleanCurTransaction() { + qDebug() << "Clearing current transaction"; + _curTransaction = 0; if (_curTransfer) { _curTransfer->deleteLater(); _curTransfer = 0; - _curTransferTransactionId = 0; - _curTransferPath.clear(); } + _curPath.clear(); } |