diff options
Diffstat (limited to 'src/QuickMedia.cpp')
-rw-r--r-- | src/QuickMedia.cpp | 64 |
1 files changed, 37 insertions, 27 deletions
diff --git a/src/QuickMedia.cpp b/src/QuickMedia.cpp index 52452d4..dc23892 100644 --- a/src/QuickMedia.cpp +++ b/src/QuickMedia.cpp @@ -1222,7 +1222,7 @@ namespace QuickMedia { if(youtube_url.empty()) { start_tab_index = 1; tabs.push_back(Tab{create_body(false, true), std::make_unique<YoutubeSubscriptionsPage>(this), create_search_bar("Search...", SEARCH_DELAY_FILTER)}); - tabs.push_back(Tab{create_body(false, true), std::make_unique<YoutubeSearchPage>(this), create_search_bar("Search...", 350)}); + tabs.push_back(Tab{create_body(false, false), std::make_unique<YoutubeSearchPage>(this), create_search_bar("Search...", 100)}); auto recommended_page = std::make_unique<YoutubeRecommendedPage>(this); tabs.push_back(Tab{create_body(false, true), std::move(recommended_page), create_search_bar("Search...", SEARCH_DELAY_FILTER)}); @@ -1708,9 +1708,6 @@ namespace QuickMedia { tab_associated_data.push_back(std::move(data)); } - //std::string autocomplete_text; - //bool autocomplete_running = false; - double gradient_inc = 0.0; const float gradient_height = 5.0f; @@ -1733,12 +1730,19 @@ namespace QuickMedia { hide_virtual_keyboard(); std::vector<Tab> new_tabs; + BodyItems new_body_items; + const bool search_suggestion_submitted = tab_associated_data[selected_tab].search_suggestion_submitted; auto prev_selected_item = tabs[selected_tab].page->submit_body_item; tabs[selected_tab].page->submit_body_item = selected_item; - auto plugin_submit_handler = [&tabs, selected_tab, &selected_item, &search_text, &new_tabs]() { - PluginResult plugin_result = tabs[selected_tab].page->submit(selected_item ? selected_item->get_title() : search_text, selected_item ? selected_item->url : search_text, new_tabs); - return plugin_result == PluginResult::OK; + auto plugin_submit_handler = [&tabs, selected_tab, &selected_item, &search_text, &new_tabs, &new_body_items, search_suggestion_submitted]() { + if(tabs[selected_tab].page->search_is_suggestion() && !search_suggestion_submitted) { + PluginResult plugin_result = tabs[selected_tab].page->submit_suggestion(selected_item ? selected_item->get_title() : search_text, selected_item ? selected_item->url : search_text, new_body_items); + return plugin_result == PluginResult::OK; + } else { + PluginResult plugin_result = tabs[selected_tab].page->submit(selected_item ? selected_item->get_title() : search_text, selected_item ? selected_item->url : search_text, new_tabs); + return plugin_result == PluginResult::OK; + } }; TaskResult submit_result; @@ -1769,11 +1773,11 @@ namespace QuickMedia { } } - if(tabs[selected_tab].page->is_single_page()) { + if(tabs[selected_tab].page->is_single_page() && !tabs[selected_tab].page->search_is_suggestion()) { if(tabs[selected_tab].search_bar) tabs[selected_tab].search_bar->clear(); if(new_tabs.size() == 1 && !new_tabs[0].page) { tabs[selected_tab].body = std::move(new_tabs[0].body); - tabs[selected_tab].page->submit_body_item = prev_selected_item; + tabs[selected_tab].page->submit_body_item = nullptr; return; } else if(new_tabs.empty()) { loop_running = false; @@ -1782,6 +1786,15 @@ namespace QuickMedia { } } + if(tabs[selected_tab].page->search_is_suggestion() && !search_suggestion_submitted) { + tabs[selected_tab].body->set_items(std::move(new_body_items)); + tabs[selected_tab].page->submit_body_item = nullptr; + tab_associated_data[selected_tab].search_suggestion_submitted = true; + if(tabs[selected_tab].search_bar) + tabs[selected_tab].search_bar->clear(); + return; + } + if(new_tabs.empty()) { tabs[selected_tab].page->submit_body_item = prev_selected_item; return; @@ -1909,6 +1922,7 @@ namespace QuickMedia { && !tab_associated_data[selected_tab].fetching_next_page_failed && (!tabs[selected_tab].search_bar || !tabs[selected_tab].page->search_is_filter() || tabs[selected_tab].search_bar->is_empty()) && tabs[selected_tab].body->get_num_visible_items() > 0 + && (!tabs[selected_tab].page->search_is_suggestion() || tab_associated_data[selected_tab].search_suggestion_submitted) && tabs[selected_tab].page->is_ready() && (!tabs[selected_tab].page->is_lazy_fetch_page() || tab_associated_data[selected_tab].lazy_fetch_finished)) { @@ -1940,12 +1954,6 @@ namespace QuickMedia { TabAssociatedData &associated_data = tab_associated_data[i]; if(tab.search_bar) { - // tab.search_bar->autocomplete_search_delay = current_plugin->get_autocomplete_delay(); - // tab.search_bar->onAutocompleteRequestCallback = [this, &tabs, &selected_tab, &autocomplete_text](const std::string &text) { - // if(tabs[selected_tab].body == body && !current_plugin->search_is_filter()) - // autocomplete_text = text; - // }; - tab.search_bar->onTextUpdateCallback = [&associated_data, &tabs, i](const std::string &text) { if(!tabs[i].page->search_is_filter()) { associated_data.update_search_text = text; @@ -2000,8 +2008,6 @@ namespace QuickMedia { else if(event.type == sf::Event::KeyPressed) { if(event.key.code == sf::Keyboard::Escape) { return false; - } else if(event.key.code == sf::Keyboard::Tab) { - if(tabs[selected_tab].search_bar) tabs[selected_tab].search_bar->set_to_autocomplete(); } else if(event.key.code == sf::Keyboard::Enter) { if(!tabs[selected_tab].search_bar) { BodyItem *selected_item = tabs[selected_tab].body->get_selected(); @@ -2162,11 +2168,13 @@ namespace QuickMedia { if(associated_data.search_text_updated && associated_data.fetch_status == FetchStatus::NONE && !associated_data.fetching_next_page_running) { std::string update_search_text = associated_data.update_search_text; + if(!tabs[i].page->search_is_suggestion() || associated_data.search_suggestion_submitted) + tabs[i].body->clear_items(); associated_data.search_text_updated = false; - tabs[i].body->clear_items(); associated_data.fetch_status = FetchStatus::LOADING; associated_data.fetch_type = FetchType::SEARCH; associated_data.search_result_text.setString("Searching..."); + associated_data.search_suggestion_submitted = false; Page *page = tabs[i].page.get(); associated_data.fetch_future = AsyncTask<FetchResult>([update_search_text, page]() { FetchResult fetch_result; @@ -2937,18 +2945,18 @@ namespace QuickMedia { window.setMouseCursorVisible(true); cursor_visible = true; - int search_delay = 0; - auto search_page = video_page->create_search_page(this, search_delay); + Tab search_page_tab; + const bool search_page_created = video_page->create_search_page(this, search_page_tab); auto comments_page = video_page->create_comments_page(this); auto related_videos_page = video_page->create_related_videos_page(this); auto channels_page = video_page->create_channels_page(this, channel_url); - if(search_page || related_videos_page || channels_page) { + if(search_page_created || related_videos_page || channels_page) { XUnmapWindow(disp, video_player_window); XSync(disp, False); std::vector<Tab> tabs; - if(search_page) { - tabs.push_back(Tab{create_body(false, true), std::move(search_page), create_search_bar("Search...", search_delay)}); + if(search_page_created) { + tabs.push_back(std::move(search_page_tab)); } if(comments_page) { tabs.push_back(Tab{create_body(), std::move(comments_page), nullptr}); @@ -4755,12 +4763,15 @@ namespace QuickMedia { //message->related_event_id.clear(); //message->related_event_type = RelatedEventType::NONE; Message *original_message = static_cast<Message*>(body_item->userdata); - if(original_message) { + if(original_message && !is_system_message_type(original_message->type)) { body_item->thumbnail_url = current_room->get_user_avatar_url(original_message->user); body_item->thumbnail_mask_type = ThumbnailMaskType::CIRCLE; } body_item->set_description("Message deleted"); - body_item->set_description_color(get_current_theme().text_color); + if(original_message && is_system_message_type(original_message->type)) + body_item->set_description_color(get_current_theme().faded_text_color); + else + body_item->set_description_color(get_current_theme().text_color); body_item->thumbnail_size = AVATAR_THUMBNAIL_SIZE; body_item->url.clear(); }; @@ -6995,8 +7006,7 @@ namespace QuickMedia { if(task_result == TaskResult::TRUE) { if(!new_tabs.empty()) { - new_tabs[0].body->move_items_to(file_manager_body.get()); - file_manager_body->select_first_item(); + file_manager_body = std::move(new_tabs[0].body); search_bar->clear(); } } else if(task_result == TaskResult::FALSE) { |