From 089818f9078c53de7ff9e6596eb7eb82cc8d6727 Mon Sep 17 00:00:00 2001 From: dec05eba Date: Wed, 2 Nov 2022 19:29:18 +0100 Subject: Matrix: update room info in ui when receiving updates --- src/QuickMedia.cpp | 65 +++++++++++++++++++++++++++++++++++------------------- 1 file changed, 42 insertions(+), 23 deletions(-) (limited to 'src/QuickMedia.cpp') diff --git a/src/QuickMedia.cpp b/src/QuickMedia.cpp index fbf2006..432dccb 100644 --- a/src/QuickMedia.cpp +++ b/src/QuickMedia.cpp @@ -5462,6 +5462,23 @@ namespace QuickMedia { bool move_room = false; + const float room_name_text_height = std::floor(18.0f * get_config().scale * get_config().font_scale); + mgl::Text room_name_text("", *FontLoader::get_font(FontLoader::FontType::LATIN_BOLD, room_name_text_height)); + const float room_name_text_padding_y = std::floor(10.0f * get_config().scale); + const float room_name_total_height = room_name_text_height + room_name_text_padding_y * 2.0f; + const float room_avatar_height = 32.0f; + + const float room_topic_text_height = std::floor(12.0f * get_config().scale * get_config().font_scale); + mgl::Text room_topic_text("", *FontLoader::get_font(FontLoader::FontType::LATIN, room_topic_text_height)); + room_topic_text.set_color(get_theme().faded_text_color); + + mgl::Text room_label(matrix_chat_page->rooms_page->get_title(), *FontLoader::get_font(FontLoader::FontType::LATIN_BOLD, 18 * get_config().scale * get_config().font_scale)); + room_label.set_position(mgl::vec2f(15.0f, room_name_text_padding_y + 4.0f)); + + mgl::Sprite room_avatar_sprite; + auto room_avatar_thumbnail_data = std::make_shared(); + bool avatar_applied = false; + std::vector tabs; ChatTab pinned_tab; @@ -5494,7 +5511,27 @@ namespace QuickMedia { matrix_chat_page->chat_body = tabs[MESSAGES_TAB_INDEX].body.get(); matrix_chat_page->messages_tab_visible = true; - matrix_chat_page->set_current_room(current_room, tabs[USERS_TAB_INDEX].body.get()); + matrix_chat_page->set_current_room(current_room, tabs[USERS_TAB_INDEX].body.get(), + [&](const MatrixEventRoomInfo &room_info) { + if(room_info.name) { + window.set_title(("QuickMedia - matrix - " + room_info.name.value()).c_str()); + std::string room_name = current_room->get_name(); + string_replace_all(room_name, '\n', ' '); + room_name_text.set_string(std::move(room_name)); + } + + if(room_info.topic) { + std::string room_topic = current_room->get_topic(); + string_replace_all(room_topic, '\n', ' '); + room_topic_text.set_string(std::move(room_topic)); + } + + if(room_info.avatar_url) { + room_avatar_sprite.set_texture(nullptr); + room_avatar_thumbnail_data.reset(); + avatar_applied = false; + } + }); size_t prev_num_users_in_room = 0; bool redraw = true; @@ -5560,22 +5597,6 @@ namespace QuickMedia { logo_sprite.set_scale(mgl::vec2f(0.8f * get_config().scale, 0.8f * get_config().scale)); mgl::vec2f logo_size(plugin_logo.get_size().x * logo_sprite.get_scale().x, plugin_logo.get_size().y * logo_sprite.get_scale().y); - const float room_name_text_height = std::floor(18.0f * get_config().scale * get_config().font_scale); - mgl::Text room_name_text("", *FontLoader::get_font(FontLoader::FontType::LATIN_BOLD, room_name_text_height)); - const float room_name_text_padding_y = std::floor(10.0f * get_config().scale); - const float room_name_total_height = room_name_text_height + room_name_text_padding_y * 2.0f; - const float room_avatar_height = 32.0f; - - const float room_topic_text_height = std::floor(12.0f * get_config().scale * get_config().font_scale); - mgl::Text room_topic_text("", *FontLoader::get_font(FontLoader::FontType::LATIN, room_topic_text_height)); - room_topic_text.set_color(get_theme().faded_text_color); - - mgl::Text room_label(matrix_chat_page->rooms_page->get_title(), *FontLoader::get_font(FontLoader::FontType::LATIN_BOLD, 18 * get_config().scale * get_config().font_scale)); - room_label.set_position(mgl::vec2f(15.0f, room_name_text_padding_y + 4.0f)); - - mgl::Sprite room_avatar_sprite; - auto room_avatar_thumbnail_data = std::make_shared(); - bool draw_room_list = show_room_side_panel; // TODO: What if these never end up referencing events? clean up automatically after a while? @@ -6364,8 +6385,6 @@ namespace QuickMedia { const float logo_padding_x = std::floor(10.0f * get_config().scale * get_config().spacing_scale); const float chat_input_padding_x = std::floor(10.0f * get_config().scale * get_config().spacing_scale); const float chat_input_padding_y = std::floor(10.0f * get_config().scale * get_config().spacing_scale); - - bool avatar_applied = false; auto jump_to_message = [&](const std::string &event_id) { const int selected_tab = ui_tabs.get_selected(); @@ -7245,7 +7264,7 @@ namespace QuickMedia { break; } case PageType::CHAT_LOGIN: { - matrix_chat_page->set_current_room(nullptr, nullptr); + matrix_chat_page->set_current_room(nullptr, nullptr, nullptr); fetch_messages_future.cancel(); cleanup_tasks(); tabs.clear(); @@ -7660,7 +7679,7 @@ namespace QuickMedia { if(matrix && !matrix->is_initial_sync_finished()) { std::string err_msg; if(matrix->did_initial_sync_fail(err_msg)) { - matrix_chat_page->set_current_room(nullptr, nullptr); + matrix_chat_page->set_current_room(nullptr, nullptr, nullptr); fetch_messages_future.cancel(); cleanup_tasks(); tabs.clear(); @@ -7696,7 +7715,7 @@ namespace QuickMedia { while(!matrix->is_initial_sync_finished()) { std::this_thread::sleep_for(std::chrono::milliseconds(10)); if(matrix->did_initial_sync_fail(err_msg)) { - matrix_chat_page->set_current_room(nullptr, nullptr); + matrix_chat_page->set_current_room(nullptr, nullptr, nullptr); fetch_messages_future.cancel(); cleanup_tasks(); tabs.clear(); @@ -7753,7 +7772,7 @@ namespace QuickMedia { } chat_page_end: - matrix_chat_page->set_current_room(nullptr, nullptr); + matrix_chat_page->set_current_room(nullptr, nullptr, nullptr); fetch_messages_future.cancel(); cleanup_tasks(); window.set_title("QuickMedia - matrix"); -- cgit v1.2.3