From 033a860a6e3afee4bde207ad9d531eb4cffb9571 Mon Sep 17 00:00:00 2001 From: Javier Date: Tue, 31 Mar 2015 03:08:39 +0200 Subject: add fms delete files support --- saltoqd/cardmanager.cpp | 6 +++- saltoqd/fmsmanager.cpp | 78 +++++++++++++++++++++++++++++++++++++++---------- saltoqd/fmsmanager.h | 7 +++-- 3 files changed, 72 insertions(+), 19 deletions(-) diff --git a/saltoqd/cardmanager.cpp b/saltoqd/cardmanager.cpp index 1bf8dd4..7465cc4 100644 --- a/saltoqd/cardmanager.cpp +++ b/saltoqd/cardmanager.cpp @@ -358,7 +358,11 @@ void CardManager::refreshDeck(CardDeck *deck) qDebug() << data; QString cardsFile = QString("/packages/%1/cards.dat").arg(deck->package()); - _fms->updateFile(cardsFile, data.toUtf8()); + if (!data.isEmpty()) { + _fms->updateFile(cardsFile, data.toUtf8()); + } else { + _fms->deleteFile(cardsFile); + } } void CardManager::handleToqConnected() 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(); } diff --git a/saltoqd/fmsmanager.h b/saltoqd/fmsmanager.h index 3d2ab90..46c68ef 100644 --- a/saltoqd/fmsmanager.h +++ b/saltoqd/fmsmanager.h @@ -19,6 +19,7 @@ public: private: void handleTransferResult(const QJsonObject &msg); + void handleDeleteResult(const QJsonObject &msg); private slots: void handleQueue(); @@ -26,7 +27,7 @@ private slots: void handleObexConnected(); void handleObexDisconnected(); void handleObexError(int response); - void cleanCurTransfer(); + void cleanCurTransaction(); private: struct File { @@ -40,9 +41,9 @@ private: ToqManager *_toq; QMap _files; QSet _pending; + int _curTransaction; ObexTransfer *_curTransfer; - int _curTransferTransactionId; - QString _curTransferPath; + QString _curPath; }; #endif // FMSMANAGER_H -- cgit v1.2.3