aboutsummaryrefslogtreecommitdiff
path: root/src/QuickMedia.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/QuickMedia.cpp')
-rw-r--r--src/QuickMedia.cpp30
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, &current_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) {