diff options
author | dec05eba <dec05eba@protonmail.com> | 2020-11-09 00:08:53 +0100 |
---|---|---|
committer | dec05eba <dec05eba@protonmail.com> | 2020-11-09 00:08:53 +0100 |
commit | 4af367373f6f92b0fc1d79b2871fa942e1eb86fa (patch) | |
tree | dcf40ea78a8973069e3cbd5889c7a379a217b453 /src/QuickMedia.cpp | |
parent | f8748d14ea11d6d53ad46aee2832180daf05fb77 (diff) |
Matrix: update user display name/avatar when updated in /sync; fix backspace search delay
Diffstat (limited to 'src/QuickMedia.cpp')
-rw-r--r-- | src/QuickMedia.cpp | 36 |
1 files changed, 15 insertions, 21 deletions
diff --git a/src/QuickMedia.cpp b/src/QuickMedia.cpp index 0ec8d1d..fdaf3d1 100644 --- a/src/QuickMedia.cpp +++ b/src/QuickMedia.cpp @@ -657,8 +657,6 @@ namespace QuickMedia { } } else if(handle_searchbar) { assert(search_bar); - if(event.type == sf::Event::TextEntered) - search_bar->onTextEntered(event.text.unicode); search_bar->on_event(event); } } @@ -1126,8 +1124,6 @@ namespace QuickMedia { } if(tabs[selected_tab].search_bar) { - if(event.type == sf::Event::TextEntered) - tabs[selected_tab].search_bar->onTextEntered(event.text.unicode); tabs[selected_tab].search_bar->on_event(event); } @@ -2988,8 +2984,6 @@ namespace QuickMedia { redraw = true; } else if(event.type == sf::Event::GainedFocus) { redraw = true; - } else if(event.type == sf::Event::TextEntered) { - inputs[focused_input]->onTextEntered(event.text.unicode); } else if(event.type == sf::Event::KeyPressed && event.key.code == sf::Keyboard::Tab) { for(int i = 0; i < num_inputs; ++i) { inputs[i]->caret_visible = false; @@ -3047,9 +3041,9 @@ namespace QuickMedia { static const sf::Vector2i CHAT_MESSAGE_THUMBNAIL_MAX_SIZE(600, 337); - static std::shared_ptr<BodyItem> message_to_body_item(Message *message, UserInfo *me) { + 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(message->user->display_name); + body_item->set_author(room->get_user_display_name(message->user)); body_item->set_description(message_get_body_remove_formatting(message)); body_item->set_timestamp(message->timestamp); if(!message->thumbnail_url.empty()) { @@ -3059,7 +3053,7 @@ namespace QuickMedia { body_item->thumbnail_url = message->url; body_item->thumbnail_size = message->thumbnail_size; } else { - body_item->thumbnail_url = message->user->avatar_url; + body_item->thumbnail_url = room->get_user_avatar_url(message->user); body_item->thumbnail_mask_type = ThumbnailMaskType::CIRCLE; // if construct is not configured to use ImageMagic then it wont give thumbnails of size 32x32 even when requested and the spec says that the server SHOULD do that body_item->thumbnail_size = sf::Vector2i(32, 32); @@ -3070,15 +3064,15 @@ namespace QuickMedia { 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(me && (message_contains_user_mention(message->body, me->display_name) || message_contains_user_mention(message->body, me->user_id))) + if(message_contains_user_mention(message->body, my_display_name) || message_contains_user_mention(message->body, my_user_id)) body_item->set_description_color(sf::Color(255, 100, 100)); return body_item; } - static BodyItems messages_to_body_items(const Messages &messages, UserInfo *me) { + static BodyItems messages_to_body_items(RoomData *room, const Messages &messages, const std::string &my_display_name, const std::string &my_user_id) { BodyItems result_items(messages.size()); for(size_t i = 0; i < messages.size(); ++i) { - result_items[i] = message_to_body_item(messages[i].get(), me); + result_items[i] = message_to_body_item(room, messages[i].get(), my_display_name, my_user_id); } return result_items; } @@ -3190,10 +3184,10 @@ namespace QuickMedia { // TODO: What if these never end up referencing events? clean up automatically after a while? std::unordered_map<RoomData*, Messages> unreferenced_event_by_room; - auto set_body_as_deleted = [](Message *message, BodyItem *body_item) { + auto set_body_as_deleted = [¤t_room](Message *message, BodyItem *body_item) { body_item->embedded_item = nullptr; body_item->embedded_item_status = FetchStatus::NONE; - body_item->thumbnail_url = message->user->avatar_url; + body_item->thumbnail_url = current_room->get_user_avatar_url(message->user); body_item->thumbnail_mask_type = ThumbnailMaskType::CIRCLE; body_item->set_description_color(sf::Color::White); body_item->thumbnail_size = sf::Vector2i(32, 32); @@ -3306,7 +3300,8 @@ namespace QuickMedia { for(auto &message : all_messages) { fetched_messages_set.insert(message->event_id); } - tabs[MESSAGES_TAB_INDEX].body->insert_items_by_timestamps(messages_to_body_items(all_messages, matrix->get_me(current_room).get())); + auto me = matrix->get_me(current_room); + tabs[MESSAGES_TAB_INDEX].body->insert_items_by_timestamps(messages_to_body_items(current_room, all_messages, current_room->get_user_display_name(me), me->user_id)); modify_related_messages_in_current_room(all_messages); tabs[MESSAGES_TAB_INDEX].body->select_last_item(); @@ -3577,7 +3572,7 @@ namespace QuickMedia { } }; - auto add_new_messages_to_current_room = [this, &tabs, &selected_tab, ¤t_room](Messages &messages) { + auto add_new_messages_to_current_room = [&me, &tabs, &selected_tab, ¤t_room](Messages &messages) { if(messages.empty()) return; @@ -3587,7 +3582,7 @@ namespace QuickMedia { scroll_to_end = true; BodyItem *selected_item = tabs[MESSAGES_TAB_INDEX].body->get_selected(); - tabs[MESSAGES_TAB_INDEX].body->insert_items_by_timestamps(messages_to_body_items(messages, matrix->get_me(current_room).get())); + tabs[MESSAGES_TAB_INDEX].body->insert_items_by_timestamps(messages_to_body_items(current_room, messages, current_room->get_user_display_name(me), me->user_id)); 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) @@ -3896,7 +3891,6 @@ namespace QuickMedia { if((chat_state == ChatState::TYPING_MESSAGE || chat_state == ChatState::REPLYING || chat_state == ChatState::EDITING) && selected_tab == MESSAGES_TAB_INDEX && !frame_skip_text_entry) { frame_skip_text_entry = false; if(event.type == sf::Event::TextEntered) { - //chat_input.onTextEntered(event.text.unicode); // TODO: Also show typing event when ctrl+v pasting? if(event.text.unicode != 13) { // Return key start_typing_timer.restart(); @@ -4094,7 +4088,7 @@ namespace QuickMedia { size_t num_new_messages = new_messages.size(); if(num_new_messages > 0) { BodyItem *selected_item = tabs[MESSAGES_TAB_INDEX].body->get_selected(); - BodyItems new_body_items = messages_to_body_items(new_messages, matrix->get_me(current_room).get()); + BodyItems new_body_items = messages_to_body_items(current_room, new_messages, current_room->get_user_display_name(me), me->user_id); 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) { @@ -4124,7 +4118,7 @@ namespace QuickMedia { if(fetch_message_tab == PINNED_TAB_INDEX) { PinnedEventData *event_data = static_cast<PinnedEventData*>(fetch_body_item->userdata); if(message) { - *fetch_body_item = *message_to_body_item(message.get(), matrix->get_me(current_room).get()); + *fetch_body_item = *message_to_body_item(current_room, message.get(), current_room->get_user_display_name(me), me->user_id); event_data->status = FetchStatus::FINISHED_LOADING; event_data->message = message.get(); fetch_body_item->userdata = event_data; @@ -4134,7 +4128,7 @@ namespace QuickMedia { } } else if(fetch_message_tab == MESSAGES_TAB_INDEX) { if(message) { - fetch_body_item->embedded_item = message_to_body_item(message.get(), matrix->get_me(current_room).get()); + fetch_body_item->embedded_item = message_to_body_item(current_room, message.get(), current_room->get_user_display_name(me), me->user_id); fetch_body_item->embedded_item_status = FetchStatus::FINISHED_LOADING; } else { fetch_body_item->embedded_item_status = FetchStatus::FAILED_TO_LOAD; |