diff options
-rw-r--r-- | include/Body.hpp | 2 | ||||
-rw-r--r-- | src/Body.cpp | 2 | ||||
-rw-r--r-- | src/QuickMedia.cpp | 54 | ||||
-rw-r--r-- | src/plugins/Matrix.cpp | 6 |
4 files changed, 25 insertions, 39 deletions
diff --git a/include/Body.hpp b/include/Body.hpp index 738c41b..5e68b5b 100644 --- a/include/Body.hpp +++ b/include/Body.hpp @@ -132,7 +132,7 @@ namespace QuickMedia { std::unique_ptr<Text> title_text; std::unique_ptr<Text> description_text; std::unique_ptr<Text> author_text; - std::unique_ptr<sf::Text> timestamp_text; + std::unique_ptr<sf::Text> timestamp_text; // TODO: Remove // Used by image boards for example. The elements are indices to other body items std::vector<size_t> replies; std::string post_number; diff --git a/src/Body.cpp b/src/Body.cpp index 10708f0..de924da 100644 --- a/src/Body.cpp +++ b/src/Body.cpp @@ -1100,7 +1100,7 @@ namespace QuickMedia { item_pos.y += reaction_max_height + reaction_padding_y; } - if(item->timestamp_text) { + if(item_index == selected_item && item->timestamp_text) { item->timestamp_text->setPosition(std::floor(item_pos.x + size.x - item->timestamp_text->getLocalBounds().width - padding_x), timestamp_text_y + 8.0f); window.draw(*item->timestamp_text); } diff --git a/src/QuickMedia.cpp b/src/QuickMedia.cpp index 3b687dd..cb570fc 100644 --- a/src/QuickMedia.cpp +++ b/src/QuickMedia.cpp @@ -3257,6 +3257,20 @@ namespace QuickMedia { Message *message = nullptr; }; + static void user_update_display_info(BodyItem *body_item, RoomData *room, Message *message) { + body_item->set_author(room->get_user_display_name(message->user)); + + if(!is_visual_media_message_type(message->type)) { + 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 = AVATAR_THUMBNAIL_SIZE; + } + + if(body_item->embedded_item_status == FetchStatus::FINISHED_LOADING && body_item->embedded_item && body_item->userdata) + user_update_display_info(body_item->embedded_item.get(), room, (Message*)body_item->embedded_item->userdata); + } + bool Program::chat_page(MatrixChatPage *matrix_chat_page, RoomData *current_room, std::vector<Tab> &room_tabs, int room_selected_tab, TabAssociatedData &room_tab_associated_data) { assert(current_room); assert(strcmp(plugin_name, "matrix") == 0); @@ -3872,6 +3886,7 @@ namespace QuickMedia { if(related_body_item) { body_item->embedded_item = std::make_shared<BodyItem>(""); *body_item->embedded_item = *related_body_item; + body_item->embedded_item->embedded_item = nullptr; body_item->embedded_item->reactions.clear(); if(related_body_item->userdata && static_cast<Message*>(related_body_item->userdata)->user == me) body_item->set_description_color(sf::Color(255, 100, 100)); @@ -3977,6 +3992,7 @@ namespace QuickMedia { if(related_body_item) { body_item->embedded_item = std::make_shared<BodyItem>(""); *body_item->embedded_item = *related_body_item; + body_item->embedded_item->embedded_item = nullptr; body_item->embedded_item->reactions.clear(); if((related_body_item->userdata && static_cast<Message*>(related_body_item->userdata)->user == me) || message_contains_user_mention(message->body, current_room->get_user_display_name(me)) || message_contains_user_mention(message->body, me->user_id)) body_item->set_description_color(sf::Color(255, 100, 100)); @@ -4211,42 +4227,24 @@ namespace QuickMedia { auto update_pinned_messages_author = [&tabs, ¤t_room](const std::shared_ptr<UserInfo> &user) { fprintf(stderr, "updated pinned messages author for user: %s\n", user->user_id.c_str()); - std::string user_display_name = current_room->get_user_display_name(user); - std::string user_avatar_url = current_room->get_user_avatar_url(user); - for(auto &pinned_body_item : tabs[PINNED_TAB_INDEX].body->items) { Message *message = static_cast<PinnedEventData*>(pinned_body_item->userdata)->message; // Its fine if we dont set it now. When the message is fetches, it will have updated user info since its fetched later if(!message || message->user != user) continue; - pinned_body_item->set_author(user_display_name); - if(!is_visual_media_message_type(message->type)) { - pinned_body_item->thumbnail_url = user_avatar_url; - pinned_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 - pinned_body_item->thumbnail_size = AVATAR_THUMBNAIL_SIZE; - } + user_update_display_info(pinned_body_item.get(), current_room, message); } }; auto update_messages_author = [&tabs, ¤t_room](const std::shared_ptr<UserInfo> &user) { fprintf(stderr, "updated messages author for user: %s\n", user->user_id.c_str()); - std::string user_display_name = current_room->get_user_display_name(user); - std::string user_avatar_url = current_room->get_user_avatar_url(user); - for(auto &message_body_items : tabs[MESSAGES_TAB_INDEX].body->items) { Message *message = static_cast<Message*>(message_body_items->userdata); if(!message || message->user != user) continue; - message_body_items->set_author(user_display_name); - if(!is_visual_media_message_type(message->type)) { - message_body_items->thumbnail_url = user_avatar_url; - message_body_items->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 - message_body_items->thumbnail_size = AVATAR_THUMBNAIL_SIZE; - } + user_update_display_info(message_body_items.get(), current_room, message); } }; @@ -4259,13 +4257,7 @@ namespace QuickMedia { if(!message) continue; - pinned_body_item->set_author(current_room->get_user_display_name(message->user)); - if(!is_visual_media_message_type(message->type)) { - pinned_body_item->thumbnail_url = current_room->get_user_avatar_url(message->user); - pinned_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 - pinned_body_item->thumbnail_size = AVATAR_THUMBNAIL_SIZE; - } + user_update_display_info(pinned_body_item.get(), current_room, message); } }; @@ -4277,13 +4269,7 @@ namespace QuickMedia { if(!message) continue; - message_body_items->set_author(current_room->get_user_display_name(message->user)); - if(!is_visual_media_message_type(message->type)) { - message_body_items->thumbnail_url = current_room->get_user_avatar_url(message->user); - message_body_items->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 - message_body_items->thumbnail_size = AVATAR_THUMBNAIL_SIZE; - } + user_update_display_info(message_body_items.get(), current_room, message); } }; diff --git a/src/plugins/Matrix.cpp b/src/plugins/Matrix.cpp index 263a948..1460687 100644 --- a/src/plugins/Matrix.cpp +++ b/src/plugins/Matrix.cpp @@ -3012,7 +3012,7 @@ namespace QuickMedia { auto fetched_message_it = room->fetched_messages_by_event_id.find(event_id); if(fetched_message_it != room->fetched_messages_by_event_id.end()) return fetched_message_it->second; -#if 1 +#if 0 rapidjson::Document request_data(rapidjson::kObjectType); request_data.AddMember("lazy_load_members", true, request_data.GetAllocator()); @@ -3086,12 +3086,12 @@ namespace QuickMedia { room->fetched_messages_by_event_id.insert(std::make_pair(event_id, nullptr)); return nullptr; } -#if 1 +#if 0 const rapidjson::Value &state_json = GetMember(json_root, "state"); events_add_user_info(state_json, room); #endif //events_set_room_name(state_json, room); -#if 1 +#if 0 const rapidjson::Value &event_json = GetMember(json_root, "event"); std::shared_ptr<Message> new_message = parse_message_event(event_json, room); #else |