From 8025d1075db0779bde635148f6e38303eb29d6c8 Mon Sep 17 00:00:00 2001 From: dec05eba Date: Sun, 6 Nov 2022 13:54:02 +0100 Subject: Formatted text with color in matrix, monospace for codeblocks --- src/QuickMedia.cpp | 41 ++++++++++++++++++++++++++--------------- 1 file changed, 26 insertions(+), 15 deletions(-) (limited to 'src/QuickMedia.cpp') 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(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 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(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(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->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; } -- cgit v1.2.3