summaryrefslogtreecommitdiff
path: root/saltoqd/fmsmanager.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'saltoqd/fmsmanager.cpp')
-rw-r--r--saltoqd/fmsmanager.cpp78
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();
}