Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/nextcloud/desktop.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatthieu Gallien <matthieu_gallien@yahoo.fr>2022-03-28 18:59:50 +0300
committerGitHub <noreply@github.com>2022-03-28 18:59:50 +0300
commitca63851ebe964590939140cc9c0dfa5ec0b6941c (patch)
tree71a022354e438071b4cbb75f2925ab19afee834b
parentc450c1f6a5277f8a71bf826e84e84250801c5311 (diff)
parent7cc2486d79711ebd47ff1c2f35ed659619462abe (diff)
Merge pull request #4385 from nextcloud/bugfix/talk-reply
Improve talk reply
-rw-r--r--src/gui/tray/ActivityItem.qml3
-rw-r--r--src/gui/tray/ActivityItemContent.qml3
-rw-r--r--src/gui/tray/TalkReplyTextField.qml8
-rw-r--r--src/gui/tray/activitydata.h2
-rw-r--r--src/gui/tray/activitylistmodel.cpp46
-rw-r--r--src/gui/tray/activitylistmodel.h12
-rw-r--r--src/gui/tray/usermodel.cpp6
-rw-r--r--src/gui/tray/usermodel.h6
8 files changed, 67 insertions, 19 deletions
diff --git a/src/gui/tray/ActivityItem.qml b/src/gui/tray/ActivityItem.qml
index b9bc78b26..46c353f94 100644
--- a/src/gui/tray/ActivityItem.qml
+++ b/src/gui/tray/ActivityItem.qml
@@ -73,13 +73,12 @@ MouseArea {
ActivityItemActions {
id: activityActions
- visible: !root.isFileActivityList && model.linksForActionButtons.length > 0
+ visible: !root.isFileActivityList && model.linksForActionButtons.length > 0 && !model.displayReplyOption
Layout.preferredHeight: Style.trayWindowHeaderHeight * 0.85
Layout.fillWidth: true
Layout.leftMargin: 40
Layout.bottomMargin: model.links.length > 1 ? 5 : 0
- Layout.topMargin: isTalkReplyPossible? 48 : 0
displayActions: model.displayActions
objectType: model.objectType
diff --git a/src/gui/tray/ActivityItemContent.qml b/src/gui/tray/ActivityItemContent.qml
index 4d779a524..f18244e56 100644
--- a/src/gui/tray/ActivityItemContent.qml
+++ b/src/gui/tray/ActivityItemContent.qml
@@ -133,7 +133,8 @@ RowLayout {
Loader {
id: talkReplyTextFieldLoader
- active: isChatActivity && isTalkReplyPossible
+ active: isChatActivity && isTalkReplyPossible && model.displayReplyOption
+ visible: model.displayReplyOption
anchors.top: activityTextDateTime.bottom
anchors.topMargin: 10
diff --git a/src/gui/tray/TalkReplyTextField.qml b/src/gui/tray/TalkReplyTextField.qml
index e59c22cec..610e28af1 100644
--- a/src/gui/tray/TalkReplyTextField.qml
+++ b/src/gui/tray/TalkReplyTextField.qml
@@ -12,16 +12,15 @@ Item {
return;
}
- UserModel.currentUser.sendReplyMessage(model.conversationToken, replyMessageTextField.text, model.messageId);
- replyMessageSent.text = replyMessageTextField.text;
- replyMessageTextField.clear();
+ UserModel.currentUser.sendReplyMessage(model.index, model.conversationToken, replyMessageTextField.text, model.messageId);
}
Text {
id: replyMessageSent
+ text: model.messageSent
font.pixelSize: Style.topLinePixelSize
color: Style.menuBorder
- visible: replyMessageSent.text !== ""
+ visible: model.messageSent !== ""
}
TextField {
@@ -43,6 +42,7 @@ Item {
radius: 24
border.width: 1
border.color: Style.ncBlue
+ color: Style.backgroundColor
}
Button {
diff --git a/src/gui/tray/activitydata.h b/src/gui/tray/activitydata.h
index bd7b49ffc..166832f4f 100644
--- a/src/gui/tray/activitydata.h
+++ b/src/gui/tray/activitydata.h
@@ -112,6 +112,8 @@ public:
struct TalkNotificationData {
QString conversationToken;
QString messageId;
+ QString messageSent;
+ bool displayReplyOption = false;
};
Type _type;
diff --git a/src/gui/tray/activitylistmodel.cpp b/src/gui/tray/activitylistmodel.cpp
index ff50ae0d0..a34c2464b 100644
--- a/src/gui/tray/activitylistmodel.cpp
+++ b/src/gui/tray/activitylistmodel.cpp
@@ -77,8 +77,10 @@ QHash<int, QByteArray> ActivityListModel::roleNames() const
roles[ShareableRole] = "isShareable";
roles[IsCurrentUserFileActivityRole] = "isCurrentUserFileActivity";
roles[ThumbnailRole] = "thumbnail";
- roles[TalkConversationTokenRole] = "conversationToken";
- roles[TalkMessageIdRole] = "messageId";
+ roles[TalkNotificationConversationTokenRole] = "conversationToken";
+ roles[TalkNotificationMessageIdRole] = "messageId";
+ roles[TalkNotificationMessageSentRole] = "messageSent";
+ roles[TalkNotificationDisplayReplyOptionRole] = "displayReplyOption";
return roles;
}
@@ -325,10 +327,14 @@ QVariant ActivityListModel::data(const QModelIndex &index, int role) const
const auto preview = a._previews[0];
return(generatePreviewMap(preview));
}
- case TalkConversationTokenRole:
+ case TalkNotificationConversationTokenRole:
return a._talkNotificationData.conversationToken;
- case TalkMessageIdRole:
+ case TalkNotificationMessageIdRole:
return a._talkNotificationData.messageId;
+ case TalkNotificationMessageSentRole:
+ return replyMessageSent(a);
+ case TalkNotificationDisplayReplyOptionRole:
+ return displayReplyOption(a);
default:
return QVariant();
}
@@ -608,6 +614,12 @@ void ActivityListModel::slotTriggerAction(const int activityIndex, const int act
const auto action = activity._links[actionIndex];
+ // TODO this will change with https://github.com/nextcloud/desktop/issues/4159
+ if (action._verb == "WEB" && action._label == tr("View chat")) {
+ setDisplayReplyOption(activityIndex);
+ return;
+ }
+
if (action._verb == "WEB") {
Utility::openBrowser(QUrl(action._link));
return;
@@ -808,5 +820,31 @@ void ActivityListModel::slotRemoveAccount()
_showMoreActivitiesAvailableEntry = false;
}
+void ActivityListModel::setReplyMessageSent(const int activityIndex, const QString &message)
+{
+ if (activityIndex < 0 || activityIndex >= _finalList.size()) {
+ qCWarning(lcActivity) << "Couldn't trigger action on activity at index" << activityIndex << "/ final list size:" << _finalList.size();
+ return;
+ }
+
+ _finalList[activityIndex]._talkNotificationData.messageSent = message;
+
+ emit dataChanged(index(activityIndex, 0), index(activityIndex, 0), {ActivityListModel::TalkNotificationMessageSentRole});
}
+QString ActivityListModel::replyMessageSent(const Activity &activity) const
+{
+ return activity._talkNotificationData.messageSent;
+}
+
+void ActivityListModel::setDisplayReplyOption(const int activityIndex)
+{
+ _finalList[activityIndex]._talkNotificationData.displayReplyOption = true;
+ emit dataChanged(index(activityIndex, 0), index(activityIndex, 0), {ActivityListModel::TalkNotificationDisplayReplyOptionRole});
+}
+
+bool ActivityListModel::displayReplyOption(const Activity &activity) const
+{
+ return activity._talkNotificationData.displayReplyOption;
+}
+}
diff --git a/src/gui/tray/activitylistmodel.h b/src/gui/tray/activitylistmodel.h
index ee6959f60..c0698a9e6 100644
--- a/src/gui/tray/activitylistmodel.h
+++ b/src/gui/tray/activitylistmodel.h
@@ -68,8 +68,10 @@ public:
ShareableRole,
IsCurrentUserFileActivityRole,
ThumbnailRole,
- TalkConversationTokenRole,
- TalkMessageIdRole,
+ TalkNotificationConversationTokenRole,
+ TalkNotificationMessageIdRole,
+ TalkNotificationMessageSentRole,
+ TalkNotificationDisplayReplyOptionRole,
};
Q_ENUM(DataRole)
@@ -104,6 +106,10 @@ public:
void setCurrentItem(const int currentItem);
+ void setReplyMessageSent(const int activityIndex, const QString &message);
+ QString replyMessageSent(const Activity &activity) const;
+ bool displayReplyOption(const Activity &activity) const;
+
public slots:
void slotRefreshActivity();
void slotRemoveAccount();
@@ -143,6 +149,8 @@ private:
void ingestActivities(const QJsonArray &activities);
+ void setDisplayReplyOption(const int activityIndex);
+
ActivityList _activityLists;
ActivityList _syncFileItemLists;
ActivityList _notificationLists;
diff --git a/src/gui/tray/usermodel.cpp b/src/gui/tray/usermodel.cpp
index 1298fc627..16d3c8263 100644
--- a/src/gui/tray/usermodel.cpp
+++ b/src/gui/tray/usermodel.cpp
@@ -793,10 +793,13 @@ void User::removeAccount() const
AccountManager::instance()->save();
}
-void User::slotSendReplyMessage(const QString &token, const QString &message, const QString &replyTo)
+void User::slotSendReplyMessage(const int activityIndex, const QString &token, const QString &message, const QString &replyTo)
{
QPointer<TalkReply> talkReply = new TalkReply(_account.data(), this);
talkReply->sendReplyMessage(token, message, replyTo);
+ connect(talkReply, &TalkReply::replyMessageSent, this, [&](const QString &message) {
+ _activityModel->setReplyMessageSent(activityIndex, message);
+ });
}
/*-------------------------------------------------------------------------------------*/
@@ -1230,5 +1233,4 @@ QHash<int, QByteArray> UserAppsModel::roleNames() const
roles[IconUrlRole] = "appIconUrl";
return roles;
}
-
}
diff --git a/src/gui/tray/usermodel.h b/src/gui/tray/usermodel.h
index 2f1fdc74d..81036f940 100644
--- a/src/gui/tray/usermodel.h
+++ b/src/gui/tray/usermodel.h
@@ -87,7 +87,7 @@ signals:
void headerColorChanged();
void headerTextColorChanged();
void accentColorChanged();
- void sendReplyMessage(const QString &token, const QString &message, const QString &replyTo);
+ void sendReplyMessage(const int activityIndex, const QString &conversationToken, const QString &message, const QString &replyTo);
public slots:
void slotItemCompleted(const QString &folder, const SyncFileItemPtr &item);
@@ -107,7 +107,7 @@ public slots:
void slotRefreshImmediately();
void setNotificationRefreshInterval(std::chrono::milliseconds interval);
void slotRebuildNavigationAppList();
- void slotSendReplyMessage(const QString &conversationToken, const QString &message, const QString &replyTo);
+ void slotSendReplyMessage(const int activityIndex, const QString &conversationToken, const QString &message, const QString &replyTo);
private:
void slotPushNotificationsReady();
@@ -142,7 +142,6 @@ private:
// number of currently running notification requests. If non zero,
// no query for notifications is started.
int _notificationRequestsRunning;
- QString textSentStr;
};
class UserModel : public QAbstractListModel
@@ -255,6 +254,5 @@ private:
AccountAppList _apps;
};
-
}
#endif // USERMODEL_H