From: Claudio Cambra Date: Mon, 5 Dec 2022 12:54:11 +0000 (+0100) Subject: Display action button for conflict files in activity X-Git-Tag: archive/raspbian/3.16.7-1_deb13u1+rpi1~1^2~12^2~11^2~27^2~12 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=5908ac41766a6df44d23121117d10ab9e05f768c;p=nextcloud-desktop.git Display action button for conflict files in activity Signed-off-by: Claudio Cambra --- diff --git a/src/gui/tray/ActivityItem.qml b/src/gui/tray/ActivityItem.qml index ebbac6e5a..e4705562f 100644 --- a/src/gui/tray/ActivityItem.qml +++ b/src/gui/tray/ActivityItem.qml @@ -45,7 +45,7 @@ ItemDelegate { Layout.fillWidth: true Layout.minimumHeight: Style.minActivityHeight - showDismissButton: model.links.length > 0 + showDismissButton: model.isDismissable iconSize: root.iconSize diff --git a/src/gui/tray/activitylistmodel.cpp b/src/gui/tray/activitylistmodel.cpp index 837ce46bf..e41b88b03 100644 --- a/src/gui/tray/activitylistmodel.cpp +++ b/src/gui/tray/activitylistmodel.cpp @@ -73,6 +73,8 @@ QHash ActivityListModel::roleNames() const roles[PointInTimeRole] = "dateTime"; roles[DisplayActions] = "displayActions"; roles[ShowFileDetailsRole] = "showFileDetails"; + roles[ShareableRole] = "isShareable"; + roles[DismissableRole] = "isDismissable"; roles[IsCurrentUserFileActivityRole] = "isCurrentUserFileActivity"; roles[IsCurrentUserFileActivityRole] = "isCurrentUserFileActivity"; roles[ThumbnailRole] = "thumbnail"; @@ -344,6 +346,12 @@ QVariant ActivityListModel::data(const QModelIndex &index, int role) const _displayActions && a._fileAction != "file_deleted" && a._syncFileItemStatus != SyncFileItem::FileIgnored; + case DismissableRole: + // Do not allow dismissal of things requiring user input regarding syncing + return !a._links.isEmpty() && + a._syncFileItemStatus != SyncFileItem::FileNameClash && + a._syncFileItemStatus != SyncFileItem::Conflict && + a._syncFileItemStatus != SyncFileItem::FileNameInvalid; case IsCurrentUserFileActivityRole: return a._isCurrentUserFileActivity; case ThumbnailRole: { @@ -741,6 +749,11 @@ void ActivityListModel::slotTriggerAction(const int activityIndex, const int act if (action._verb == "WEB") { Utility::openBrowser(QUrl(action._link)); return; + } else if (action._verb == "FIX_CONFLICT_LOCALLY" && + activity._type == Activity::SyncFileItemType && + (activity._syncFileItemStatus == SyncFileItem::Conflict || activity._syncFileItemStatus == SyncFileItem::FileNameClash)) { + slotTriggerDefaultAction(activityIndex); + return; } emit sendNotificationRequest(activity._accName, action._link, action._verb, activityIndex); @@ -768,10 +781,6 @@ QVariantList ActivityListModel::convertLinksToActionButtons(const Activity &acti { QVariantList customList; - if (activity._links.size() == 1) { - return customList; - } - if (static_cast(activity._links.size()) > maxActionButtons()) { customList << ActivityListModel::convertLinkToActionButton(activity._links.first()); return customList; diff --git a/src/gui/tray/activitylistmodel.h b/src/gui/tray/activitylistmodel.h index a1dce8341..3e21ebd11 100644 --- a/src/gui/tray/activitylistmodel.h +++ b/src/gui/tray/activitylistmodel.h @@ -67,6 +67,8 @@ public: AccountConnectedRole, DisplayActions, ShowFileDetailsRole, + ShareableRole, + DismissableRole, IsCurrentUserFileActivityRole, ThumbnailRole, TalkNotificationConversationTokenRole, diff --git a/src/gui/tray/usermodel.cpp b/src/gui/tray/usermodel.cpp index f55e1fefc..cc702e114 100644 --- a/src/gui/tray/usermodel.cpp +++ b/src/gui/tray/usermodel.cpp @@ -595,6 +595,16 @@ void User::slotAddErrorToGui(const QString &folderAlias, SyncFileItem::Status st activity._accName = folderInstance->accountState()->account()->displayName(); activity._folder = folderAlias; + if (status == SyncFileItem::Conflict || status == SyncFileItem::FileNameClash) { + ActivityLink buttonActivityLink; + buttonActivityLink._label = tr("Resolve conflict"); + buttonActivityLink._link = activity._link.toString(); + buttonActivityLink._verb = "FIX_CONFLICT_LOCALLY"; + buttonActivityLink._primary = true; + + activity._links = {buttonActivityLink}; + } + // Error notifications don't have ids by themselves so we will create one for it activity._id = -static_cast(qHash(activity._subject + activity._message)); @@ -708,6 +718,14 @@ void User::processCompletedSyncItem(const Folder *folder, const SyncFileItemPtr // add 'protocol error' to activity list if (item->_status == SyncFileItem::Status::FileNameInvalid) { showDesktopNotification(item->_file, activity._subject, activity._id); + } else if (item->_status == SyncFileItem::Conflict || item->_status == SyncFileItem::FileNameClash) { + ActivityLink buttonActivityLink; + buttonActivityLink._label = tr("Resolve conflict"); + buttonActivityLink._link = activity._link.toString(); + buttonActivityLink._verb = "FIX_CONFLICT_LOCALLY"; + buttonActivityLink._primary = true; + + activity._links = {buttonActivityLink}; } _activityModel->addErrorToActivityList(activity); }