summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJavier <dev.git@javispedro.com>2015-03-31 03:08:39 +0200
committerJavier <dev.git@javispedro.com>2015-03-31 03:08:39 +0200
commit033a860a6e3afee4bde207ad9d531eb4cffb9571 (patch)
tree32ea873d98d9980020c9bf74fcfdd869b7f42a45
parent631af0284a651f1698e4796c2e39aabb83a3bfca (diff)
downloadsaltoq-033a860a6e3afee4bde207ad9d531eb4cffb9571.tar.gz
saltoq-033a860a6e3afee4bde207ad9d531eb4cffb9571.zip
add fms delete files support
-rw-r--r--saltoqd/cardmanager.cpp6
-rw-r--r--saltoqd/fmsmanager.cpp78
-rw-r--r--saltoqd/fmsmanager.h7
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<QString, File> _files;
QSet<QString> _pending;
+ int _curTransaction;
ObexTransfer *_curTransfer;
- int _curTransferTransactionId;
- QString _curTransferPath;
+ QString _curPath;
};
#endif // FMSMANAGER_H