property bool isChatActivity: model.objectType === "chat" || model.objectType === "room" || model.objectType === "call"
property bool isTalkReplyPossible: model.conversationToken !== ""
- property bool displayTalkReplyOptions: false
- Connections {
- target: activityModel
- function onDisplayTalkReplyOptions(activityIndex) {
- if (model.index === activityIndex) {
- displayTalkReplyOptions = true;
- }
- }
- }
-
signal fileActivityButtonClicked(string absolutePath)
enabled: (model.path !== "" || model.link !== "" || model.isCurrentUserFileActivity === true)
ActivityItemActions {
id: activityActions
- visible: !root.isFileActivityList && model.linksForActionButtons.length > 0 && !displayTalkReplyOptions
+ visible: !root.isFileActivityList && model.linksForActionButtons.length > 0 && !model.displayReplyOption
Layout.preferredHeight: Style.trayWindowHeaderHeight * 0.85
Layout.fillWidth: true
Loader {
id: talkReplyTextFieldLoader
- active: isChatActivity && isTalkReplyPossible && displayTalkReplyOptions
- visible: displayTalkReplyOptions
+ active: isChatActivity && isTalkReplyPossible && model.displayReplyOption
+ visible: model.displayReplyOption
anchors.top: activityTextDateTime.bottom
anchors.topMargin: 10
Item {
id: root
- Connections {
- target: activityModel
- function onMessageSent() {
- replyMessageTextField.clear();
- replyMessageSent.text = activityModel.replyMessageSent(model.index);
- }
- }
-
function sendReplyMessage() {
if (replyMessageTextField.text === "") {
return;
Text {
id: replyMessageSent
+ text: model.messageSent
font.pixelSize: Style.topLinePixelSize
color: Style.menuBorder
- visible: replyMessageSent.text !== ""
+ visible: model.messageSent !== ""
}
TextField {
QString conversationToken;
QString messageId;
QString messageSent;
+ bool displayReplyOption = false;
};
Type _type;
roles[TalkNotificationConversationTokenRole] = "conversationToken";
roles[TalkNotificationMessageIdRole] = "messageId";
roles[TalkNotificationMessageSentRole] = "messageSent";
+ roles[TalkNotificationDisplayReplyOptionRole] = "displayReplyOption";
return roles;
}
case TalkNotificationMessageIdRole:
return a._talkNotificationData.messageId;
case TalkNotificationMessageSentRole:
- return a._talkNotificationData.messageSent;
+ return replyMessageSent(a);
+ case TalkNotificationDisplayReplyOptionRole:
+ return displayReplyOption(a);
default:
return QVariant();
}
// TODO this will change with https://github.com/nextcloud/desktop/issues/4159
if (action._verb == "WEB" && action._label == tr("View chat")) {
- emit displayTalkReplyOptions(activityIndex);
+ setDisplayReplyOption(activityIndex);
return;
}
_finalList[activityIndex]._talkNotificationData.messageSent = message;
- emit messageSent();
+ emit dataChanged(index(activityIndex, 0), index(activityIndex, 0), {ActivityListModel::TalkNotificationMessageSentRole});
}
-QString ActivityListModel::replyMessageSent(const int activityIndex) const
+QString ActivityListModel::replyMessageSent(const Activity &activity) const
{
- if (activityIndex < 0 || activityIndex >= _finalList.size()) {
- qCWarning(lcActivity) << "Couldn't trigger action on activity at index" << activityIndex << "/ final list size:" << _finalList.size();
- return {};
- }
+ return activity._talkNotificationData.messageSent;
+}
- return _finalList[activityIndex]._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;
}
}
Q_PROPERTY(quint32 maxActionButtons READ maxActionButtons CONSTANT)
Q_PROPERTY(AccountState *accountState READ accountState CONSTANT)
-
public:
enum DataRole {
DarkIconRole = Qt::UserRole + 1,
TalkNotificationConversationTokenRole,
TalkNotificationMessageIdRole,
TalkNotificationMessageSentRole,
+ TalkNotificationDisplayReplyOptionRole,
};
Q_ENUM(DataRole)
void setCurrentItem(const int currentItem);
void setReplyMessageSent(const int activityIndex, const QString &message);
- Q_INVOKABLE QString replyMessageSent(const int activityIndex) const;
+ QString replyMessageSent(const Activity &activity) const;
+ bool displayReplyOption(const Activity &activity) const;
public slots:
void slotRefreshActivity();
signals:
void activityJobStatusCode(int statusCode);
void sendNotificationRequest(const QString &accountName, const QString &link, const QByteArray &verb, int row);
- void messageSent();
- void displayTalkReplyOptions(const int activityIndex);
protected:
void setup();
void ingestActivities(const QJsonArray &activities);
+ void setDisplayReplyOption(const int activityIndex);
+
ActivityList _activityLists;
ActivityList _syncFileItemLists;
ActivityList _notificationLists;