diff --git a/dbus/org.nemo.transferengine.xml b/dbus/org.nemo.transferengine.xml
index 5ad2828..76e35b6 100644
--- a/dbus/org.nemo.transferengine.xml
+++ b/dbus/org.nemo.transferengine.xml
@@ -99,6 +99,10 @@
+
+
+
+
# enable or disable notifications
diff --git a/declarative/declarativetransfermodel.cpp b/declarative/declarativetransfermodel.cpp
index 3c0e16a..6d17eb8 100644
--- a/declarative/declarativetransfermodel.cpp
+++ b/declarative/declarativetransfermodel.cpp
@@ -1,6 +1,6 @@
/****************************************************************************************
**
-** Copyright (C) 2014 Jolla Ltd.
+** Copyright (C) 2014-2016 Jolla Ltd.
** Contact: Marko Mattila
** All rights reserved.
**
@@ -134,6 +134,13 @@ void TransferModel::clearTransfers()
}
}
+void TransferModel::clearTransfer(int transferId)
+{
+ if (m_client) {
+ m_client->clearTransfer(transferId);
+ }
+}
+
QHash TransferModel::roleNames() const
{
return m_roles;
diff --git a/declarative/declarativetransfermodel.h b/declarative/declarativetransfermodel.h
index f0a2683..888ea5b 100644
--- a/declarative/declarativetransfermodel.h
+++ b/declarative/declarativetransfermodel.h
@@ -1,6 +1,6 @@
/****************************************************************************************
**
-** Copyright (C) 2014 Jolla Ltd.
+** Copyright (C) 2014-2016 Jolla Ltd.
** Contact: Marko Mattila
** All rights reserved.
**
@@ -83,6 +83,7 @@ class TransferModel
Q_INVOKABLE QJSValue get(int index) const;
Q_INVOKABLE void clearTransfers();
+ Q_INVOKABLE void clearTransfer(int transferId);
QHash roleNames() const;
int rowCount(const QModelIndex &parent = QModelIndex()) const;
diff --git a/lib/transferengineclient.cpp b/lib/transferengineclient.cpp
index 4191892..64ca523 100644
--- a/lib/transferengineclient.cpp
+++ b/lib/transferengineclient.cpp
@@ -1,6 +1,6 @@
/****************************************************************************************
**
-** Copyright (C) 2013 Jolla Ltd.
+** Copyright (C) 2013-2016 Jolla Ltd.
** Contact: Marko Mattila
** All rights reserved.
**
@@ -366,6 +366,15 @@ void TransferEngineClient::clearTransfers()
d->m_client->clearTransfers();
}
+/*!
+ Private method for QML interface to clear a finished, canceled or interrupted event.
+ */
+void TransferEngineClient::clearTransfer(int transferId)
+{
+ Q_D(TransferEngineClient);
+ d->m_client->clearTransfer(transferId);
+}
+
/*!
Private method for QML interface to enable notifications.
*/
diff --git a/lib/transferengineclient.h b/lib/transferengineclient.h
index 43a0e5a..ba446be 100644
--- a/lib/transferengineclient.h
+++ b/lib/transferengineclient.h
@@ -1,6 +1,6 @@
/****************************************************************************************
**
-** Copyright (C) 2013 Jolla Ltd.
+** Copyright (C) 2013-2016 Jolla Ltd.
** Contact: Marko Mattila
** All rights reserved.
**
@@ -84,6 +84,7 @@ class TransferEngineClient : public QObject
private:
void cbCancelTransfer(int transferId);
void cbRestartTransfer(int transferId);
+ void clearTransfer(int transferId);
void clearTransfers();
void enableNotifications(bool enable);
bool notificationsEnabled() const;
diff --git a/src/dbmanager.cpp b/src/dbmanager.cpp
index 75ecc05..4f4f6a8 100644
--- a/src/dbmanager.cpp
+++ b/src/dbmanager.cpp
@@ -613,6 +613,25 @@ bool DbManager::clearTransfers()
return true;
}
+bool DbManager::clearTransfer(int key)
+{
+ QSqlQuery query;
+ TransferEngineData::TransferStatus status = transferStatus(key);
+ switch (status) {
+ case TransferEngineData::TransferFinished:
+ case TransferEngineData::TransferCanceled:
+ case TransferEngineData::TransferInterrupted:
+ if (query.exec(QString("DELETE FROM transfers WHERE transfer_id='%1';").arg(QString::number(key)))) {
+ return true;
+ }
+ qWarning() << "Failed to execute SQL query. Couldn't delete transfer" << key;
+ return false;
+ default:
+ qWarning() << "Not clearing transfer" << key << "because its status is" << status;
+ return false;
+ }
+}
+
int DbManager::transferCount() const
{
QSqlQuery query;
diff --git a/src/dbmanager.h b/src/dbmanager.h
index 04e214f..dbe621b 100644
--- a/src/dbmanager.h
+++ b/src/dbmanager.h
@@ -61,6 +61,8 @@ class DbManager
bool clearFailedTransfers(int excludeKey, TransferEngineData::TransferType type);
+ bool clearTransfer(int key);
+
bool clearTransfers();
int transferCount() const;
diff --git a/src/transferengine.cpp b/src/transferengine.cpp
index 33f2c11..0a739a1 100644
--- a/src/transferengine.cpp
+++ b/src/transferengine.cpp
@@ -1248,6 +1248,18 @@ void TransferEngine::clearTransfers()
}
}
+/*!
+ DBus adaptor calls this method to remove a finished, canceled or interrupted transfer from the database.
+ */
+void TransferEngine::clearTransfer(int transferId)
+{
+ Q_D(TransferEngine);
+ d->exitSafely();
+ if (DbManager::instance()->clearTransfer(transferId)) {
+ emit transfersChanged();
+ }
+}
+
/*!
DBus adaptor calls this method to cancel an existing transfer with a \a transferId.
diff --git a/src/transferengine.h b/src/transferengine.h
index 4452528..b8349d0 100644
--- a/src/transferengine.h
+++ b/src/transferengine.h
@@ -89,6 +89,8 @@ public Q_SLOTS:
void clearTransfers();
+ void clearTransfer(int transferId);
+
void cancelTransfer(int transferId);
void enableNotifications(bool enable);