aboutsummaryrefslogtreecommitdiff
path: root/src/QuickMedia.cpp
diff options
context:
space:
mode:
authordec05eba <dec05eba@protonmail.com>2022-11-07 14:23:49 +0100
committerdec05eba <dec05eba@protonmail.com>2022-11-07 14:24:32 +0100
commitc65a57e884de51cade584e3f01c7c5627aa6ebd8 (patch)
tree8dfdff1f60c83f15b354e415534bc4f7b62db6f7 /src/QuickMedia.cpp
parentf791d96362cbe7ef8435e999adaaf05e6f2683a5 (diff)
Matrix: fix edit being replaced with old message when re-entering the room (without restart)
Add quote colors to 4chan, monospace for codeblocks
Diffstat (limited to 'src/QuickMedia.cpp')
-rw-r--r--src/QuickMedia.cpp40
1 files changed, 22 insertions, 18 deletions
diff --git a/src/QuickMedia.cpp b/src/QuickMedia.cpp
index 80ae146..d72f465 100644
--- a/src/QuickMedia.cpp
+++ b/src/QuickMedia.cpp
@@ -5307,7 +5307,7 @@ namespace QuickMedia {
*body_item->embedded_item = *related_body_item;
body_item->embedded_item->embedded_item = nullptr;
body_item->embedded_item->reactions.clear();
- if(message->user->user_id != my_user_id && ((related_body_item->userdata && static_cast<Message*>(related_body_item->userdata)->user.get() == me) || message_contains_user_mention(body_item->get_description(), my_display_name) || message_contains_user_mention(body_item->get_description(), my_user_id)))
+ if(message->user->user_id != my_user_id && ((related_body_item->userdata && static_cast<Message*>(related_body_item->userdata)->user.get() == me) || message_contains_user_mention(body_item, my_display_name, my_user_id)))
body_item->set_description_color(get_theme().attention_alert_text_color, true);
else
body_item->set_description_color(get_theme().text_color);
@@ -5322,7 +5322,7 @@ namespace QuickMedia {
static std::shared_ptr<BodyItem> message_to_body_item(RoomData *room, Message *message, const std::string &my_display_name, const std::string &my_user_id) {
auto body_item = BodyItem::create("");
body_item->set_author(extract_first_line_remove_newline_elipses(room->get_user_display_name(message->user), AUTHOR_MAX_LENGTH));
- body_item->set_description(strip(formatted_text_to_qm_text(message->body.c_str(), message->body.size())));
+ body_item->set_description(strip(formatted_text_to_qm_text(message->body.c_str(), message->body.size(), true)));
body_item->set_timestamp(message->timestamp);
if(!message->thumbnail_url.empty()) {
body_item->thumbnail_url = message->thumbnail_url;
@@ -5352,7 +5352,7 @@ namespace QuickMedia {
body_item->set_description_color(get_theme().faded_text_color);
body_item->thumbnail_url.clear();
}
- if(message->user->user_id != my_user_id && (message_contains_user_mention(body_item->get_description(), my_display_name) || message_contains_user_mention(body_item->get_description(), my_user_id)))
+ if(message->user->user_id != my_user_id && message_contains_user_mention(body_item.get(), my_display_name, my_user_id))
body_item->set_description_color(get_theme().attention_alert_text_color, true);
return body_item;
}
@@ -5651,16 +5651,16 @@ namespace QuickMedia {
} else {
// TODO: Properly check reply message objects for mention of user instead of message data, but only when synapse fixes that notifications
// are not triggered by reply to a message with our display name/user id.
- Message *reply_to_message = static_cast<Message*>(body_item->userdata);
- std::string qm_formatted_text = formatted_text_to_qm_text(reply_to_message->body.c_str(), reply_to_message->body.size());
+ Message *edited_message_ref = static_cast<Message*>(body_item->userdata);
+ std::string qm_formatted_text = formatted_text_to_qm_text(message->body.c_str(), message->body.size(), true);
body_item->set_description(std::move(qm_formatted_text));
- if(message->user != me && (message_contains_user_mention(reply_to_message->body, my_display_name) || message_contains_user_mention(reply_to_message->body, me->user_id)))
+ if(message->user != me && message_contains_user_mention(message.get(), my_display_name, me->user_id))
body_item->set_description_color(get_theme().attention_alert_text_color, true);
else
body_item->set_description_color(get_theme().text_color);
- message->replaces = reply_to_message;
- reply_to_message->replaced_by = message;
+ message->replaces = edited_message_ref;
+ edited_message_ref->replaced_by = message;
}
it = unreferenced_events.erase(it);
} else {
@@ -5692,16 +5692,16 @@ namespace QuickMedia {
} else {
// TODO: Properly check reply message objects for mention of user instead of message data, but only when synapse fixes that notifications
// are not triggered by reply to a message with our display name/user id.
- Message *reply_to_message = static_cast<Message*>(body_item->userdata);
- std::string qm_formatted_text = formatted_text_to_qm_text(reply_to_message->body.c_str(), reply_to_message->body.size());
+ Message *edited_message_ref = static_cast<Message*>(body_item->userdata);
+ std::string qm_formatted_text = formatted_text_to_qm_text(message->body.c_str(), message->body.size(), true);
body_item->set_description(std::move(qm_formatted_text));
- if(message->user != me && (message_contains_user_mention(reply_to_message->body, my_display_name) || message_contains_user_mention(reply_to_message->body, me->user_id)))
+ if(message->user != me && message_contains_user_mention(message.get(), my_display_name, me->user_id))
body_item->set_description_color(get_theme().attention_alert_text_color, true);
else
body_item->set_description_color(get_theme().text_color);
- message->replaces = reply_to_message;
- reply_to_message->replaced_by = message;
+ message->replaces = edited_message_ref;
+ edited_message_ref->replaced_by = message;
}
} else {
unreferenced_events.push_back(message);
@@ -6194,14 +6194,17 @@ namespace QuickMedia {
tabs[MESSAGES_TAB_INDEX].body->select_last_item();
return true;
} else if(chat_state == ChatState::EDITING) {
- void *related_to_message = currently_operating_on_item->userdata;
+ Message *related_to_message = (Message*)currently_operating_on_item->userdata;
message->related_event_type = RelatedEventType::EDIT;
- message->related_event_id = static_cast<Message*>(related_to_message)->event_id;
+ message->related_event_id = related_to_message->event_id;
+ // TODO:
+ //related_to_message->replaced_by = message;
+ //message->replaces = related_to_message;
size_t body_item_index = 0;
auto body_item = find_body_item_by_event_id(tabs[MESSAGES_TAB_INDEX].body->get_items().data(), tabs[MESSAGES_TAB_INDEX].body->get_items().size(), message->related_event_id, &body_item_index);
if(body_item) {
const std::string formatted_text = matrix->body_to_formatted_body(current_room, text);
- std::string qm_formatted_text = formatted_text_to_qm_text(formatted_text.c_str(), formatted_text.size());
+ std::string qm_formatted_text = formatted_text_to_qm_text(formatted_text.c_str(), formatted_text.size(), true);
auto body_item_shared_ptr = tabs[MESSAGES_TAB_INDEX].body->get_item_by_index(body_item_index);
body_item_shared_ptr->set_description(std::move(qm_formatted_text));
@@ -6298,7 +6301,7 @@ namespace QuickMedia {
if(related_body_item) {
*body_item = *related_body_item;
body_item->reactions.clear();
- if(message_contains_user_mention(related_body_item->get_description(), current_room->get_user_display_name(me)) || message_contains_user_mention(related_body_item->get_description(), me->user_id))
+ if(message_contains_user_mention(related_body_item.get(), current_room->get_user_display_name(me), me->user_id))
body_item->set_description_color(get_theme().attention_alert_text_color, true);
else
body_item->set_description_color(get_theme().text_color);
@@ -6698,7 +6701,7 @@ namespace QuickMedia {
});
};
- auto cleanup_tasks = [&set_read_marker_future, &fetch_message_future, &fetch_users_future, &typing_state_queue, &typing_state_thread, &post_task_queue, &provisional_message_queue, &fetched_messages_set, &sent_messages, &pending_sent_replies, &post_thread, &tabs, MESSAGES_TAB_INDEX, PINNED_TAB_INDEX, USERS_TAB_INDEX]() {
+ auto cleanup_tasks = [&]() {
set_read_marker_future.cancel();
fetch_message_future.cancel();
fetch_users_future.cancel();
@@ -6730,6 +6733,7 @@ namespace QuickMedia {
}
//tabs.clear();
+ matrix->on_exit_room(current_room);
};
// TODO: Remove this once synapse bug has been resolved where /sync does not include user info for new messages when using message filter that limits number of messages for initial sync,