diff options
Diffstat (limited to 'src/QuickMedia.cpp')
-rw-r--r-- | src/QuickMedia.cpp | 30 |
1 files changed, 17 insertions, 13 deletions
diff --git a/src/QuickMedia.cpp b/src/QuickMedia.cpp index a2c936f..4f2fa99 100644 --- a/src/QuickMedia.cpp +++ b/src/QuickMedia.cpp @@ -2889,7 +2889,7 @@ namespace QuickMedia { return str; } - static std::shared_ptr<BodyItem> message_to_body_item(Message *message) { + static std::shared_ptr<BodyItem> message_to_body_item(Message *message, UserInfo *me) { auto body_item = BodyItem::create(""); body_item->set_author(message->user->display_name); std::string text = message->body; @@ -2907,17 +2907,19 @@ namespace QuickMedia { } // TODO: Show image thumbnail inline instead of url to image and showing it as the thumbnail of the body item body_item->url = message->url; - body_item->author_color = message->user->display_name_color; + body_item->set_author_color(message->user->display_name_color); body_item->userdata = (void*)message; // Note: message has to be valid as long as body_item is used! if(message->related_event_type == RelatedEventType::REDACTION || message->related_event_type == RelatedEventType::EDIT) body_item->visible = false; + if(message->mentions_me || (me && message_contains_user_mention(message->body, me->display_name))) + body_item->set_description_color(sf::Color(255, 100, 100)); return body_item; } - static BodyItems messages_to_body_items(const Messages &messages) { + static BodyItems messages_to_body_items(const Messages &messages, UserInfo *me) { BodyItems result_items(messages.size()); for(size_t i = 0; i < messages.size(); ++i) { - result_items[i] = message_to_body_item(messages[i].get()); + result_items[i] = message_to_body_item(messages[i].get(), me); } return result_items; } @@ -2979,7 +2981,7 @@ namespace QuickMedia { for(auto &message : messages) { if(message->mentions_me) { was_mentioned = true; - message->mentions_me = false; + //message->mentions_me = false; // TODO: What if the message or username begins with "-"? also make the notification image be the avatar of the user if(!is_window_focused || room != current_room) show_notification("QuickMedia matrix - " + matrix->message_get_author_displayname(message.get()) + " (" + room->name + ")", message->body); @@ -3005,7 +3007,7 @@ namespace QuickMedia { room_desc = matrix->message_get_author_displayname(messages.back().get()) + ": " + extract_first_line(messages.back()->body, 150); if(was_mentioned) { room_desc += "\n** You were mentioned **"; // TODO: Better notification? - room_body_item_it->second.body_item->title_color = sf::Color(255, 100, 100); + room_body_item_it->second.body_item->set_title_color(sf::Color(255, 100, 100)); room_body_item_it->second.last_message_read = false; } room_body_item_it->second.body_item->set_description(std::move(room_desc)); @@ -3014,7 +3016,7 @@ namespace QuickMedia { if(was_mentioned) room_desc += "\n** You were mentioned **"; // TODO: Better notification? room_body_item_it->second.body_item->set_description(std::move(room_desc)); - room_body_item_it->second.body_item->title_color = sf::Color(255, 100, 100); + room_body_item_it->second.body_item->set_title_color(sf::Color(255, 100, 100)); room_body_item_it->second.last_message_read = false; } } @@ -3289,12 +3291,12 @@ namespace QuickMedia { return result; }; - auto add_new_messages_to_current_room = [&tabs](Messages &messages) { + auto add_new_messages_to_current_room = [this, &tabs, ¤t_room](Messages &messages) { int num_items = tabs[MESSAGES_TAB_INDEX].body->items.size(); bool scroll_to_end = (num_items == 0 || tabs[MESSAGES_TAB_INDEX].body->is_selected_item_last_visible_item()); BodyItem *selected_item = tabs[MESSAGES_TAB_INDEX].body->get_selected(); - tabs[MESSAGES_TAB_INDEX].body->insert_items_by_timestamps(messages_to_body_items(messages)); + tabs[MESSAGES_TAB_INDEX].body->insert_items_by_timestamps(messages_to_body_items(messages, matrix->get_me(current_room).get())); if(selected_item && !scroll_to_end) { int selected_item_index = tabs[MESSAGES_TAB_INDEX].body->get_index_by_body_item(selected_item); if(selected_item_index != -1) @@ -3359,6 +3361,7 @@ namespace QuickMedia { body_item->embedded_item_status = EmbeddedItemStatus::NONE; body_item->thumbnail_url = message->user->avatar_url; body_item->thumbnail_mask_type = ThumbnailMaskType::NONE; + body_item->set_description_color(sf::Color::White); } it = unreferenced_events.erase(it); } else { @@ -3385,6 +3388,7 @@ namespace QuickMedia { body_item->embedded_item_status = EmbeddedItemStatus::NONE; body_item->thumbnail_url = message->user->avatar_url; body_item->thumbnail_mask_type = ThumbnailMaskType::NONE; + body_item->set_description_color(sf::Color::White); } } else { unreferenced_events.push_back(message); @@ -3642,7 +3646,7 @@ namespace QuickMedia { Messages new_messages; if(matrix->get_all_synced_room_messages(current_room, new_messages) == PluginResult::OK) { - tabs[MESSAGES_TAB_INDEX].body->insert_items_by_timestamps(messages_to_body_items(new_messages)); + tabs[MESSAGES_TAB_INDEX].body->insert_items_by_timestamps(messages_to_body_items(new_messages, matrix->get_me(current_room).get())); tabs[MESSAGES_TAB_INDEX].body->select_last_item(); modify_related_messages_in_current_room(new_messages); } else { @@ -3849,7 +3853,7 @@ namespace QuickMedia { size_t num_new_messages = new_messages.size(); if(num_new_messages > 0 && previous_messages_future_room == current_room) { BodyItem *selected_item = tabs[MESSAGES_TAB_INDEX].body->get_selected(); - BodyItems new_body_items = messages_to_body_items(new_messages); + BodyItems new_body_items = messages_to_body_items(new_messages, matrix->get_me(current_room).get()); size_t num_new_body_items = new_body_items.size(); tabs[MESSAGES_TAB_INDEX].body->insert_items_by_timestamps(std::move(new_body_items)); if(selected_item) { @@ -3869,7 +3873,7 @@ namespace QuickMedia { // Ignore finished fetch of messages if it happened in another room. When we navigate back to the room we will get the messages again if(fetch_reply_future_room == current_room) { if(replied_to_message) { - fetch_reply_body_item->embedded_item = message_to_body_item(replied_to_message.get()); + fetch_reply_body_item->embedded_item = message_to_body_item(replied_to_message.get(), matrix->get_me(current_room).get()); fetch_reply_body_item->embedded_item_status = EmbeddedItemStatus::FINISHED_LOADING; } else { fetch_reply_body_item->embedded_item_status = EmbeddedItemStatus::FAILED_TO_LOAD; @@ -3980,7 +3984,7 @@ namespace QuickMedia { room_desc = room_desc.substr(0, room_desc.size() - 25); current_room_body_data->body_item->set_description(std::move(room_desc)); // TODO: Show a line like nheko instead for unread messages, or something else - current_room_body_data->body_item->title_color = sf::Color::White; + current_room_body_data->body_item->set_title_color(sf::Color::White); current_room_body_data->last_message_read = true; } } else if(!current_room_body_data->last_message_read) { |