aboutsummaryrefslogtreecommitdiff
path: root/plugins/Soundcloud.hpp
diff options
context:
space:
mode:
authordec05eba <dec05eba@protonmail.com>2021-03-26 16:45:41 +0100
committerdec05eba <dec05eba@protonmail.com>2021-03-26 16:45:41 +0100
commitda827778f8c5d2f0cfc56b297099ba58454c38ed (patch)
tree9e17efe65eca94a23374aa8ea00da0da50d45bfe /plugins/Soundcloud.hpp
parentd96e65b2abf2a569a4be4c160fa30a504abdb2fc (diff)
Add soundcloud
Diffstat (limited to 'plugins/Soundcloud.hpp')
-rw-r--r--plugins/Soundcloud.hpp56
1 files changed, 56 insertions, 0 deletions
diff --git a/plugins/Soundcloud.hpp b/plugins/Soundcloud.hpp
new file mode 100644
index 0000000..4962c04
--- /dev/null
+++ b/plugins/Soundcloud.hpp
@@ -0,0 +1,56 @@
+#pragma once
+
+#include "Page.hpp"
+
+namespace QuickMedia {
+ class SoundcloudPage : public Page {
+ public:
+ SoundcloudPage(Program *program) : Page(program) {}
+ virtual ~SoundcloudPage() = default;
+ PluginResult submit(const std::string &title, const std::string &url, std::vector<Tab> &result_tabs) override;
+ };
+
+ class SoundcloudSearchPage : public SoundcloudPage {
+ public:
+ SoundcloudSearchPage(Program *program) : SoundcloudPage(program) {}
+ const char* get_title() const override { return "Search"; }
+ 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;
+ private:
+ std::string query_urn;
+ };
+
+ class SoundcloudUserPage : public SoundcloudPage {
+ public:
+ SoundcloudUserPage(Program *program, const std::string &username, const std::string &userpage_url, std::string next_href) : SoundcloudPage(program), username(username), userpage_url(userpage_url), next_href(std::move(next_href)), current_page(0) {}
+ const char* get_title() const override { return username.c_str(); }
+ PluginResult get_page(const std::string &str, int page, BodyItems &result_items) override;
+ private:
+ PluginResult get_continuation_page(BodyItems &result_items);
+ private:
+ std::string username;
+ std::string userpage_url;
+ std::string next_href;
+ int current_page;
+ };
+
+ class SoundcloudPlaylistPage : public SoundcloudPage {
+ public:
+ SoundcloudPlaylistPage(Program *program, const std::string &playlist_name) : SoundcloudPage(program), playlist_name(playlist_name) {}
+ const char* get_title() const override { return playlist_name.c_str(); }
+ private:
+ std::string playlist_name;
+ };
+
+ class SoundcloudAudioPage : public VideoPage {
+ public:
+ SoundcloudAudioPage(Program *program, const std::string &url) : VideoPage(program), url(url) {}
+ const char* get_title() const override { return ""; }
+ std::unique_ptr<RelatedVideosPage> create_related_videos_page(Program *, const std::string &, const std::string &) override { return nullptr; }
+ std::unique_ptr<LazyFetchPage> create_channels_page(Program *, const std::string &) override { return nullptr; }
+ std::string get_url() override { return url; }
+ private:
+ std::string url;
+ };
+} \ No newline at end of file