Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
[transfer-engine] Add progress info to notifications. Contributes to …
…JB#31692

Extra categories are now also removed in favor of just defining the
properties explicitly. Switched to using freedesktop.org categories
just because they exist, no actual expected effect as of now.
  • Loading branch information
pvuorela committed Jan 17, 2018
1 parent b63f5b4 commit 11c3fe7
Show file tree
Hide file tree
Showing 12 changed files with 178 additions and 69 deletions.
6 changes: 0 additions & 6 deletions data/data.pro

This file was deleted.

3 changes: 0 additions & 3 deletions data/notificationcategories/x-nemo.transfer.complete.conf

This file was deleted.

4 changes: 0 additions & 4 deletions data/notificationcategories/x-nemo.transfer.conf

This file was deleted.

2 changes: 0 additions & 2 deletions data/notificationcategories/x-nemo.transfer.error.conf

This file was deleted.

Whitespace-only changes.
1 change: 0 additions & 1 deletion lib/mediatransferinterface.h
Expand Up @@ -53,7 +53,6 @@ class MediaTransferInterface: public QObject

MediaItem *mediaItem();


virtual QString displayName() const = 0;
virtual QUrl serviceIcon() const = 0;
virtual bool cancelEnabled() const = 0;
Expand Down
2 changes: 0 additions & 2 deletions lib/transferdbrecord.h
Expand Up @@ -32,9 +32,7 @@

class TransferDBRecord
{

public:

enum TransferDBRecordField {
TransferID = 0,
TransferType,
Expand Down
Empty file modified lib/transfermethodinfo.cpp
Whitespace-only changes.
1 change: 0 additions & 1 deletion rpm/transfer-engine-qt5.spec
Expand Up @@ -36,7 +36,6 @@ Obsoletes: nemo-transferengine <= 0.0.19
%{_bindir}/nemo-transfer-engine
%{_datadir}/dbus-1/services/org.nemo.transferengine.service
%{_datadir}/translations/nemo-transfer-engine_eng_en.qm
%{_datadir}/lipstick/notificationcategories/*

%package -n libnemotransferengine-qt5
Summary: Transfer engine library.
Expand Down
93 changes: 87 additions & 6 deletions src/dbmanager.cpp
Expand Up @@ -81,7 +81,8 @@
"strip_metadata INTEGER,\n" \
"scale_percent REAL,\n" \
"cancel_supported INTEGER,\n" \
"restart_supported INTEGER\n" \
"restart_supported INTEGER,\n" \
"notification_id INTEGER\n" \
");\n"

// Cascade trigger i.e. when transfer is removed and it has metadata or callbacks, this
Expand All @@ -95,7 +96,7 @@
"END;\n"

// Update the following version if database schema changes.
#define USER_VERSION 1
#define USER_VERSION 2
#define PRAGMA_USER_VERSION QString("PRAGMA user_version=%1").arg(USER_VERSION)

class DbManagerPrivate {
Expand Down Expand Up @@ -247,6 +248,23 @@ DbManager::DbManager():
}
} else {
// Database exists, check the schema version
if (d->userVersion() == 1) {
// For this we get away with DeclarativeTransferModel directly reading database without
// update because notification_id is the last column
QSqlQuery query;
if (query.exec("ALTER TABLE transfers ADD COLUMN notification_id INTEGER")) {
qWarning() << "Extended transfers table";

if (!query.exec(PRAGMA_USER_VERSION)) {
qWarning() << "DbManager pragma user_version update:"
<< query.lastError().text() << ":" << query.lastError().databaseText();
}
} else {
qWarning() << "Failed to extend transfers table!"
<< query.lastError().text() << ":" << query.lastError().databaseText();
}
}

if (d->userVersion() != USER_VERSION) {
d->deleteOldTables();
d->createDatabaseSchema();
Expand Down Expand Up @@ -408,9 +426,11 @@ int DbManager::createTransferEntry(const MediaItem *mediaItem)
Q_D(DbManager);
QSqlQuery query;
query.prepare("INSERT INTO transfers (transfer_type, timestamp, status, progress, display_name, application_icon, thumbnail_icon, "
"service_icon, url, resource_name, mime_type, file_size, plugin_id, account_id, strip_metadata, scale_percent, cancel_supported, restart_supported)"
"VALUES (:transfer_type, :timestamp, :status, :progress, :display_name, :application_icon, :thumbnail_icon, :service_icon, "
":url, :resource_name, :mime_type, :file_size, :plugin_id, :account_id, :strip_metadata, :scale_percent, :cancel_supported, :restart_supported)");
" service_icon, url, resource_name, mime_type, file_size, plugin_id, account_id, strip_metadata, scale_percent, "
" cancel_supported, restart_supported, notification_id)"
"VALUES (:transfer_type, :timestamp, :status, :progress, :display_name, :application_icon, :thumbnail_icon, "
" :service_icon, :url, :resource_name, :mime_type, :file_size, :plugin_id, :account_id, :strip_metadata, :scale_percent, "
" :cancel_supported, :restart_supported, :notification_id)");
query.bindValue(":transfer_type", mediaItem->value(MediaItem::TransferType));
query.bindValue(":status", TransferEngineData::NotStarted);
query.bindValue(":timestamp", d->currentDateTime());
Expand All @@ -429,9 +449,10 @@ int DbManager::createTransferEntry(const MediaItem *mediaItem)
query.bindValue(":scale_percent", mediaItem->value(MediaItem::ScalePercent));
query.bindValue(":cancel_supported", mediaItem->value(MediaItem::CancelSupported));
query.bindValue(":restart_supported", mediaItem->value(MediaItem::RestartSupported));
query.bindValue(":notification_id", 0);

if (!query.exec()) {
qWarning() << "DbManager::createTransfereEntry: Failed to execute SQL query. Couldn't create an entry!"
qWarning() << "DbManager::createTransferEntry: Failed to execute SQL query. Couldn't create an entry!"
<< query.lastError().text() << ": "
<< query.lastError().databaseText();
return -1;
Expand Down Expand Up @@ -771,6 +792,66 @@ TransferEngineData::TransferStatus DbManager::transferStatus(int key) const
return TransferEngineData::Unknown;
}
}

/*!
Returns the transfer progress or -1 if unavailable
*/
qreal DbManager::transferProgress(int key) const
{
QString queryStr = QString("SELECT progress FROM transfers WHERE transfer_id='%1';").arg(QString::number(key));

QSqlQuery query;
if (!query.exec(queryStr)) {
qWarning() << "DbManager::transferStatus: Failed to execute SQL query. Couldn't get the progress!"
<< query.lastError().text() << ": "
<< query.lastError().databaseText();
return -1;
}

if (query.isActive() && query.isSelect()) {
query.first();
return static_cast<qreal>(query.value(0).toReal());
} else {
return -1;
}
}

int DbManager::notificationId(int key)
{
QString queryStr = QString("SELECT notification_id FROM transfers WHERE transfer_id='%1';").arg(QString::number(key));

QSqlQuery query;
if (!query.exec(queryStr)) {
qWarning() << "DbManager::transferStatus: Failed to execute SQL query. Couldn't get the notification id!"
<< query.lastError().text() << ": "
<< query.lastError().databaseText();
return 0;
}

if (query.isActive() && query.isSelect()) {
query.first();
return static_cast<qreal>(query.value(0).toReal());
} else {
return 0;
}
}

bool DbManager::setNotificationId(int key, int notificationId)
{
QString queryStr = QString("UPDATE transfers SET notification_id='%1' WHERE transfer_id='%2';")
.arg(QString::number(notificationId)).arg(QString::number(key));

QSqlQuery query;
if (!query.exec(queryStr)) {
qWarning() << "Failed to execute SQL query. Couldn't update the notification id!"
<< query.lastError().text() << ": "
<< query.lastError().databaseText();
return false;
}
query.finish();
return true;
}

/*!
Reads the callback method names from the database for the transfer with \a key. The method names are set to the
output arguments \a cancelMethod and \a restartMethod.
Expand Down
5 changes: 5 additions & 0 deletions src/dbmanager.h
Expand Up @@ -77,6 +77,11 @@ class DbManager

TransferEngineData::TransferStatus transferStatus(int key) const;

qreal transferProgress(int key) const;

int notificationId(int key);
bool setNotificationId(int key, int notificationId);

bool callbackMethods(int key, QString &cancelMethod, QString &restartMethod) const;

MediaItem * mediaItem(int key) const;
Expand Down

0 comments on commit 11c3fe7

Please sign in to comment.