aboutsummaryrefslogtreecommitdiff
path: root/src/QuickMedia.cpp
diff options
context:
space:
mode:
authordec05eba <dec05eba@protonmail.com>2021-08-09 18:22:43 +0200
committerdec05eba <dec05eba@protonmail.com>2021-08-09 18:22:43 +0200
commit44bc399ccbd7e37107ae754db7da3d918229422d (patch)
treecf989a2699c7638328f292bcde49ed66ac013640 /src/QuickMedia.cpp
parentc2efd1e6587223cf9fff302fbc0ef80fcb4340e2 (diff)
Youtube: show search suggestions instead of immediate search
Fix save file dialog not showing all files after navigating to another directory if the search is not empty. Fix matrix system message deletion reverting back to use message (for avatar) and text color.
Diffstat (limited to 'src/QuickMedia.cpp')
-rw-r--r--src/QuickMedia.cpp64
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) {