aboutsummaryrefslogtreecommitdiff
path: root/plugins
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 /plugins
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 'plugins')
-rw-r--r--plugins/MediaGeneric.hpp2
-rw-r--r--plugins/Page.hpp11
-rw-r--r--plugins/Youtube.hpp7
3 files changed, 16 insertions, 4 deletions
diff --git a/plugins/MediaGeneric.hpp b/plugins/MediaGeneric.hpp
index b1f9030..8885db2 100644
--- a/plugins/MediaGeneric.hpp
+++ b/plugins/MediaGeneric.hpp
@@ -84,7 +84,7 @@ namespace QuickMedia {
MediaGenericVideoPage(Program *program, MediaGenericSearchPage *search_page, const std::string &url) : VideoPage(program, url), search_page(search_page) {}
const char* get_title() const override { return ""; }
BodyItems get_related_media(const std::string &url) override;
- std::unique_ptr<Page> create_search_page(Program *program, int &search_delay) override;
+ bool create_search_page(Program *program, Tab &tab) override;
std::unique_ptr<RelatedVideosPage> create_related_videos_page(Program *program) override;
std::unique_ptr<Page> create_channels_page(Program*, const std::string&) override {
return nullptr;
diff --git a/plugins/Page.hpp b/plugins/Page.hpp
index c61fd6d..9d5bade 100644
--- a/plugins/Page.hpp
+++ b/plugins/Page.hpp
@@ -29,6 +29,9 @@ namespace QuickMedia {
virtual bool search_is_filter() { return true; }
// This show be overriden if search_is_filter is overriden to return false
virtual SearchResult search(const std::string &str, BodyItems &result_items) { (void)str; (void)result_items; return SearchResult::ERR; }
+ // If this returns true then |submit_suggestion| is called when submitting the selected item instead of |submit|
+ // and |submit| is called when submitting the response of |submit_suggestion|
+ virtual bool search_is_suggestion() { return false; }
// Return empty |result_tabs| and PluginResult::OK to do nothing; which is useful for implementing custom actions on item submit
virtual PluginResult submit(const std::string &title, const std::string &url, std::vector<Tab> &result_tabs) {
@@ -40,6 +43,12 @@ namespace QuickMedia {
// Override and return false to make submit run in the main (ui) thread
virtual bool submit_is_async() { return true; }
virtual bool clear_search_after_submit() { return false; }
+ virtual PluginResult submit_suggestion(const std::string &title, const std::string &url, BodyItems &result_items) {
+ (void)title;
+ (void)url;
+ (void)result_items;
+ return PluginResult::ERR;
+ }
// Note: If pagination is done by fetching the next page until we get to |page|, then the "current page" should be reset everytime |search| is called.
// Note: the first page is 0
virtual PluginResult get_page(const std::string &str, int page, BodyItems &result_items) { (void)str; (void)page; (void)result_items; return PluginResult::OK; }
@@ -110,7 +119,7 @@ namespace QuickMedia {
virtual PageTypez get_type() const override { return PageTypez::VIDEO; }
virtual bool autoplay_next_item() { return false; }
virtual BodyItems get_related_media(const std::string &url) { (void)url; return {}; }
- virtual std::unique_ptr<Page> create_search_page(Program *program, int &search_delay) { (void)program; (void)search_delay; return nullptr; }
+ virtual bool create_search_page(Program *program, Tab &tab) { (void)program; (void)tab; return false; }
virtual std::unique_ptr<Page> create_comments_page(Program *program) { (void)program; return nullptr; }
// Return nullptr if the service doesn't support related videos page
virtual std::unique_ptr<RelatedVideosPage> create_related_videos_page(Program *program) = 0;
diff --git a/plugins/Youtube.hpp b/plugins/Youtube.hpp
index 50412de..c7aff93 100644
--- a/plugins/Youtube.hpp
+++ b/plugins/Youtube.hpp
@@ -30,17 +30,20 @@ namespace QuickMedia {
class YoutubeSearchPage : public LazyFetchPage {
public:
- YoutubeSearchPage(Program *program) : LazyFetchPage(program) {}
+ YoutubeSearchPage(Program *program, std::string video_id = "") : LazyFetchPage(program), video_id(std::move(video_id)) {}
const char* get_title() const override { return "Search"; }
+ bool search_is_suggestion() override { return true; }
bool search_is_filter() override { return false; }
SearchResult search(const std::string &str, BodyItems &result_items) override;
PluginResult get_page(const std::string &str, int page, BodyItems &result_items) override;
PluginResult submit(const std::string &title, const std::string &url, std::vector<Tab> &result_tabs) override;
+ PluginResult submit_suggestion(const std::string &title, const std::string &url, BodyItems &result_items) override;
PluginResult lazy_fetch(BodyItems &result_items) override;
bool lazy_fetch_is_loader() override { return true; }
private:
PluginResult search_get_continuation(const std::string &url, const std::string &continuation_token, BodyItems &result_items);
private:
+ std::string video_id;
std::string search_url;
std::string continuation_token;
int current_page = 0;
@@ -138,7 +141,7 @@ namespace QuickMedia {
YoutubeVideoPage(Program *program, std::string url);
const char* get_title() const override { return ""; }
BodyItems get_related_media(const std::string &url) override;
- std::unique_ptr<Page> create_search_page(Program *program, int &search_delay) override;
+ bool create_search_page(Program *program, Tab &tab) override;
std::unique_ptr<Page> create_comments_page(Program *program) override;
std::unique_ptr<RelatedVideosPage> create_related_videos_page(Program *program) override;
std::unique_ptr<Page> create_channels_page(Program *program, const std::string &channel_url) override;