Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
Merge branch 'open_file_action' into 'master'
[transferengine] Offer 'open' action for downloaded files on the notification. Fixes JB#46934

See merge request mer-core/transfer-engine!23
  • Loading branch information
pvuorela committed Mar 15, 2021
2 parents aebd9b7 + 743820c commit f82591e
Show file tree
Hide file tree
Showing 2 changed files with 32 additions and 5 deletions.
33 changes: 29 additions & 4 deletions src/transferengine.cpp
Expand Up @@ -193,8 +193,10 @@ TransferEnginePrivate::TransferEnginePrivate(TransferEngine *parent):
settings.endGroup();

if (!service.isEmpty() && !path.isEmpty() && !iface.isEmpty() && !method.isEmpty()) {
m_defaultActions << Notification::remoteAction("default", "", service, path, iface, method)
<< Notification::remoteAction("app", "", service, path, iface, method);
m_defaultActions << Notification::remoteAction("default", QString(), service, path, iface, method);
//% "Show transfers"
m_showTransfersAction = Notification::remoteAction(QString(), qtTrId("transferengine-no-show_transfers"),
service, path, iface, method);
}
}
}
Expand Down Expand Up @@ -330,7 +332,8 @@ void TransferEnginePrivate::sendNotification(TransferEngineData::TransferType ty
qreal progress,
const QString &fileName,
int transferId,
bool canCancel)
bool canCancel,
const QUrl &localFileUrl)
{
if (!m_notificationsEnabled || fileName.isEmpty()) {
return;
Expand Down Expand Up @@ -378,6 +381,17 @@ void TransferEnginePrivate::sendNotification(TransferEngineData::TransferType ty
//% "File downloaded"
body = qtTrId("transferengine-no-file-download-success");
summary = fileName;
if (!localFileUrl.isEmpty()) {
remoteActions.clear();
remoteActions.append(Notification::remoteAction(QLatin1String("default"),
QString(),
"org.sailfishos.fileservice",
"/",
"org.sailfishos.fileservice",
"openUrl",
QVariantList() << localFileUrl.toString()));
remoteActions.append(m_showTransfersAction);
}
break;
case TransferEngineData::Sync:
// Ok exit
Expand Down Expand Up @@ -492,6 +506,7 @@ void TransferEnginePrivate::sendNotification(TransferEngineData::TransferType ty
if (useProgress) {
notification.setHintValue(TRANSFER_PROGRESS_HINT, static_cast<double>(progress));
}

notification.publish();
int newId = notification.replacesId();

Expand Down Expand Up @@ -1194,6 +1209,8 @@ void TransferEngine::finishTransfer(int transferId, int status, const QString &r
}

QString fileName;
QUrl localFileUrl;

// Read the file path from the database for download
if (type == TransferEngineData::Download) {
MediaItem *mediaItem = DbManager::instance()->mediaItem(transferId);
Expand All @@ -1202,14 +1219,22 @@ void TransferEngine::finishTransfer(int transferId, int status, const QString &r
return;
}
fileName = d->mediaFileOrResourceName(mediaItem);
QString mediaUrl = mediaItem->value(MediaItem::Url).toString();

if (mediaUrl.startsWith(QLatin1String("/"))) {
localFileUrl = QUrl::fromLocalFile(mediaUrl);
} else if (mediaUrl.startsWith(QLatin1String("file://"))) {
localFileUrl = QUrl(mediaUrl);
}
}

TransferEngineData::TransferStatus transferStatus = static_cast<TransferEngineData::TransferStatus>(status);
if (transferStatus == TransferEngineData::TransferFinished ||
transferStatus == TransferEngineData::TransferCanceled ||
transferStatus == TransferEngineData::TransferInterrupted) {
DbManager::instance()->updateTransferStatus(transferId, transferStatus);
d->sendNotification(type, transferStatus, DbManager::instance()->transferProgress(transferId), fileName, transferId, false);
d->sendNotification(type, transferStatus, DbManager::instance()->transferProgress(transferId), fileName, transferId, false, localFileUrl);

if (d->m_activityMonitor->isActiveTransfer(transferId)) {
d->m_activityMonitor->activityFinished(transferId);
}
Expand Down
4 changes: 3 additions & 1 deletion src/transferengine_p.h
Expand Up @@ -107,7 +107,8 @@ class TransferEnginePrivate: QObject
qreal progress,
const QString &fileName,
int transferId,
bool canCancel);
bool canCancel,
const QUrl &localFileUrl = QUrl());
int uploadMediaItem(MediaItem *mediaItem,
MediaTransferInterface *muif,
const QVariantMap &userData);
Expand Down Expand Up @@ -146,6 +147,7 @@ public Q_SLOTS:
ClientActivityMonitor *m_activityMonitor;
TransferEngine *q_ptr;
QVariantList m_defaultActions;
QVariant m_showTransfersAction;
Q_DECLARE_PUBLIC(TransferEngine)
};

Expand Down

0 comments on commit f82591e

Please sign in to comment.