From b0132ebc84bfbf3fcc1710503a467d1f4090be70 Mon Sep 17 00:00:00 2001 From: Slava Monich Date: Fri, 5 Aug 2016 17:03:21 +0300 Subject: [PATCH] [transfer-engine] Added clearTransfer method to the D-Bus interface. Contributes to JB#15452 --- dbus/org.nemo.transferengine.xml | 4 ++++ declarative/declarativetransfermodel.cpp | 9 ++++++++- declarative/declarativetransfermodel.h | 3 ++- lib/transferengineclient.cpp | 11 ++++++++++- lib/transferengineclient.h | 3 ++- src/dbmanager.cpp | 19 +++++++++++++++++++ src/dbmanager.h | 2 ++ src/transferengine.cpp | 12 ++++++++++++ src/transferengine.h | 2 ++ 9 files changed, 61 insertions(+), 4 deletions(-) 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);