aboutsummaryrefslogtreecommitdiff
path: root/src/QuickMedia.cpp
diff options
context:
space:
mode:
authordec05eba <dec05eba@protonmail.com>2022-11-06 13:54:02 +0100
committerdec05eba <dec05eba@protonmail.com>2022-11-07 14:24:32 +0100
commit8025d1075db0779bde635148f6e38303eb29d6c8 (patch)
tree64dce4cc00fa55edba0ab7d2522e13473e6ef3c4 /src/QuickMedia.cpp
parentf8b3a9d055bfc0e4bb9e9a570ccc8853ec38a225 (diff)
Formatted text with color in matrix, monospace for codeblocks
Diffstat (limited to 'src/QuickMedia.cpp')
-rw-r--r--src/QuickMedia.cpp41
1 files changed, 26 insertions, 15 deletions
diff --git a/src/QuickMedia.cpp b/src/QuickMedia.cpp
index bbff6c6..80ae146 100644
--- a/src/QuickMedia.cpp
+++ b/src/QuickMedia.cpp
@@ -5308,7 +5308,7 @@ namespace QuickMedia {
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)))
- body_item->set_description_color(get_theme().attention_alert_text_color);
+ body_item->set_description_color(get_theme().attention_alert_text_color, true);
else
body_item->set_description_color(get_theme().text_color);
body_item->embedded_item_status = FetchStatus::FINISHED_LOADING;
@@ -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(message_get_body_remove_formatting(message)));
+ body_item->set_description(strip(formatted_text_to_qm_text(message->body.c_str(), message->body.size())));
body_item->set_timestamp(message->timestamp);
if(!message->thumbnail_url.empty()) {
body_item->thumbnail_url = message->thumbnail_url;
@@ -5353,7 +5353,7 @@ namespace QuickMedia {
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)))
- body_item->set_description_color(get_theme().attention_alert_text_color);
+ body_item->set_description_color(get_theme().attention_alert_text_color, true);
return body_item;
}
@@ -5652,9 +5652,11 @@ namespace QuickMedia {
// 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);
- body_item->set_description(strip(message_get_body_remove_formatting(message.get())));
+ std::string qm_formatted_text = formatted_text_to_qm_text(reply_to_message->body.c_str(), reply_to_message->body.size());
+
+ 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)))
- body_item->set_description_color(get_theme().attention_alert_text_color);
+ 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;
@@ -5691,9 +5693,11 @@ namespace QuickMedia {
// 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);
- body_item->set_description(strip(message_get_body_remove_formatting(message.get())));
+ std::string qm_formatted_text = formatted_text_to_qm_text(reply_to_message->body.c_str(), reply_to_message->body.size());
+
+ 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)))
- body_item->set_description_color(get_theme().attention_alert_text_color);
+ 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;
@@ -6114,9 +6118,9 @@ namespace QuickMedia {
auto message = std::make_shared<Message>();
message->user = matrix->get_me(current_room);
if(msgtype == "m.emote")
- message->body = "*" + current_room->get_user_display_name(me) + "* " + text;
+ message->body = "*" + current_room->get_user_display_name(me) + "* " + matrix->body_to_formatted_body(current_room, text);
else
- message->body = text;
+ message->body = matrix->body_to_formatted_body(current_room, text);
message->type = MessageType::TEXT;
message->timestamp = time(NULL) * 1000;
@@ -6196,8 +6200,11 @@ namespace QuickMedia {
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());
+
auto body_item_shared_ptr = tabs[MESSAGES_TAB_INDEX].body->get_item_by_index(body_item_index);
- body_item_shared_ptr->set_description(text);
+ body_item_shared_ptr->set_description(std::move(qm_formatted_text));
body_item_shared_ptr->set_description_color(get_theme().provisional_message_color);
auto edit_body_item = message_to_body_item(current_room, message.get(), current_room->get_user_avatar_url(me), me->user_id);
@@ -6292,7 +6299,7 @@ namespace QuickMedia {
*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))
- body_item->set_description_color(get_theme().attention_alert_text_color);
+ body_item->set_description_color(get_theme().attention_alert_text_color, true);
else
body_item->set_description_color(get_theme().text_color);
event_data->status = FetchStatus::FINISHED_LOADING;
@@ -6928,8 +6935,10 @@ namespace QuickMedia {
if(event.key.control && event.key.code == mgl::Keyboard::C) {
BodyItem *selected = tabs[selected_tab].body->get_selected();
- if(selected)
- set_clipboard(selected->get_description());
+ if(selected) {
+ const std::string body_text_unformatted = Text::to_printable_string(selected->get_description());
+ set_clipboard(body_text_unformatted);
+ }
}
if(selected_tab == MESSAGES_TAB_INDEX) {
@@ -7058,10 +7067,12 @@ namespace QuickMedia {
// TODO: Show inline notification
show_notification("QuickMedia", "You can't edit a message that was posted by somebody else");
} else {
+ const std::string body_text_unformatted = Text::to_printable_string(selected->get_description());
+
chat_state = ChatState::EDITING;
currently_operating_on_item = selected;
chat_input.set_editable(true);
- chat_input.set_text(selected->get_description()); // TODO: Description? it may change in the future, in which case this should be edited
+ chat_input.set_text(std::move(body_text_unformatted)); // TODO: Description? it may change in the future, in which case this should be edited
chat_input.move_caret_to_end();
replying_to_text.set_string("Editing message:");
}
@@ -7480,7 +7491,7 @@ namespace QuickMedia {
fetch_body_item->embedded_item = message_to_body_item(current_room, fetch_message_result.message.get(), current_room->get_user_display_name(me), me->user_id);
fetch_body_item->embedded_item_status = FetchStatus::FINISHED_LOADING;
if(fetch_message_result.message->user == me)
- fetch_body_item->set_description_color(get_theme().attention_alert_text_color);
+ fetch_body_item->set_description_color(get_theme().attention_alert_text_color, true);
} else {
fetch_body_item->embedded_item_status = FetchStatus::FAILED_TO_LOAD;
}