aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--plugins/Page.hpp5
-rw-r--r--plugins/Youtube.hpp4
-rw-r--r--src/QuickMedia.cpp16
-rw-r--r--src/plugins/Youtube.cpp8
4 files changed, 20 insertions, 13 deletions
diff --git a/plugins/Page.hpp b/plugins/Page.hpp
index 3ecb016..6944afb 100644
--- a/plugins/Page.hpp
+++ b/plugins/Page.hpp
@@ -151,7 +151,10 @@ namespace QuickMedia {
virtual std::string url_get_playable_url(const std::string &url) { return url; }
virtual bool video_should_be_skipped(const std::string &url) { (void)url; return false; }
// This needs to be called before the other functions are called
- virtual PluginResult load(std::string &title, std::string &channel_url, std::vector<MediaChapter> &chapters) { (void)title; (void)channel_url; (void)chapters; return PluginResult::OK; }
+ virtual PluginResult load(std::string &title, std::string &channel_url, std::vector<MediaChapter> &chapters, std::string &err_str) {
+ (void)title; (void)channel_url; (void)chapters; (void)err_str;
+ return PluginResult::OK;
+ }
virtual void mark_watched() {};
// Should not do any network request to not slow down video loading
virtual void get_subtitles(SubtitleData &subtitle_data) { (void)subtitle_data; }
diff --git a/plugins/Youtube.hpp b/plugins/Youtube.hpp
index e2bc2a4..97dea19 100644
--- a/plugins/Youtube.hpp
+++ b/plugins/Youtube.hpp
@@ -151,11 +151,11 @@ namespace QuickMedia {
std::string get_url_timestamp() override { return timestamp; }
std::string get_video_url(int max_height, bool &has_embedded_audio, std::string &ext) override;
std::string get_audio_url(std::string &ext) override;
- PluginResult load(std::string &title, std::string &channel_url, std::vector<MediaChapter> &chapters) override;
+ PluginResult load(std::string &title, std::string &channel_url, std::vector<MediaChapter> &chapters, std::string &err_str) override;
void mark_watched() override;
void get_subtitles(SubtitleData &subtitle_data) override;
private:
- PluginResult parse_video_response(const Json::Value &json_root, std::string &title, std::string &channel_url, std::vector<MediaChapter> &chapters);
+ PluginResult parse_video_response(const Json::Value &json_root, std::string &title, std::string &channel_url, std::vector<MediaChapter> &chapters, std::string &err_str);
void parse_format(const Json::Value &format_json, bool is_adaptive);
void parse_formats(const Json::Value &streaming_data_json);
private:
diff --git a/src/QuickMedia.cpp b/src/QuickMedia.cpp
index 2157a4d..1b48743 100644
--- a/src/QuickMedia.cpp
+++ b/src/QuickMedia.cpp
@@ -2254,7 +2254,7 @@ namespace QuickMedia {
more_items_above_rect.setSize(sf::Vector2f(window_size.x, more_items_height));
more_items_below_rect.setPosition(sf::Vector2f(0.0f, window_size.y - more_items_height));
- more_items_below_rect.setSize(sf::Vector2f(window_size.y, more_items_height));
+ more_items_below_rect.setSize(sf::Vector2f(window_size.x, more_items_height));
}
if(tab_associated_data[selected_tab].fetching_next_page_running) {
@@ -2815,12 +2815,13 @@ namespace QuickMedia {
audio_url.clear();
has_embedded_audio = true;
+ std::string err_str;
const int num_retries = is_youtube ? 3 : 1;
bool load_successful = false;
for(int i = 0; i < num_retries; ++i) {
bool cancelled = false;
TaskResult load_result = run_task_with_loading_screen([&]() {
- if(video_page->load(new_title, channel_url, media_chapters) != PluginResult::OK)
+ if(video_page->load(new_title, channel_url, media_chapters, err_str) != PluginResult::OK)
return false;
std::string ext;
@@ -2880,7 +2881,7 @@ namespace QuickMedia {
}
if(!load_successful) {
- show_notification("QuickMedia", "Failed to load media", Urgency::CRITICAL);
+ show_notification("QuickMedia", "Failed to load media" + (err_str.empty() ? "" : ", error: " + err_str), Urgency::CRITICAL);
current_page = previous_page;
go_to_previous_page = true;
return;
@@ -4420,7 +4421,7 @@ namespace QuickMedia {
more_items_above_rect.setSize(sf::Vector2f(window_size.x, more_items_height));
more_items_below_rect.setPosition(sf::Vector2f(0.0f, window_size.y - more_items_height));
- more_items_below_rect.setSize(sf::Vector2f(window_size.y, more_items_height));
+ more_items_below_rect.setSize(sf::Vector2f(window_size.x, more_items_height));
}
//comment_input.update();
@@ -7163,12 +7164,13 @@ namespace QuickMedia {
bool load_successful = false;
const int largest_monitor_height = get_largest_monitor_height(disp);
+ std::string err_str;
for(int i = 0; i < 3; ++i) {
- task_result = run_task_with_loading_screen([this, &youtube_video_page, &filename, &video_url, &audio_url, &video_content_length, &audio_content_length, largest_monitor_height, &cancelled]{
+ task_result = run_task_with_loading_screen([&]{
std::string channel_url;
std::vector<MediaChapter> chapters;
filename.clear();
- if(youtube_video_page->load(filename, channel_url, chapters) != PluginResult::OK)
+ if(youtube_video_page->load(filename, channel_url, chapters, err_str) != PluginResult::OK)
return false;
std::string ext;
@@ -7218,7 +7220,7 @@ namespace QuickMedia {
}
if(!load_successful) {
- show_notification("QuickMedia", "Download failed", Urgency::CRITICAL);
+ show_notification("QuickMedia", "Download failed" + (err_str.empty() ? "" : ", error: " + err_str), Urgency::CRITICAL);
exit_code = 1;
return;
}
diff --git a/src/plugins/Youtube.cpp b/src/plugins/Youtube.cpp
index 34fd250..d308346 100644
--- a/src/plugins/Youtube.cpp
+++ b/src/plugins/Youtube.cpp
@@ -2321,7 +2321,7 @@ namespace QuickMedia {
}
}
- PluginResult YoutubeVideoPage::parse_video_response(const Json::Value &json_root, std::string &title, std::string &channel_url, std::vector<MediaChapter> &chapters) {
+ PluginResult YoutubeVideoPage::parse_video_response(const Json::Value &json_root, std::string &title, std::string &channel_url, std::vector<MediaChapter> &chapters, std::string &err_str) {
livestream_url.clear();
video_formats.clear();
audio_formats.clear();
@@ -2338,6 +2338,8 @@ namespace QuickMedia {
const Json::Value &status_json = playability_status_json["status"];
if(status_json.isString() && (strcmp(status_json.asCString(), "UNPLAYABLE") == 0 || strcmp(status_json.asCString(), "LOGIN_REQUIRED") == 0)) {
const Json::Value &reason_json = playability_status_json["reason"];
+ if(reason_json.isString())
+ err_str = reason_json.asString();
fprintf(stderr, "Unable to play video, status: %s, reason: %s\n", status_json.asCString(), reason_json.isString() ? reason_json.asCString() : "Unknown");
return PluginResult::ERR;
}
@@ -2432,7 +2434,7 @@ namespace QuickMedia {
return PluginResult::OK;
}
- PluginResult YoutubeVideoPage::load(std::string &title, std::string &channel_url, std::vector<MediaChapter> &chapters) {
+ PluginResult YoutubeVideoPage::load(std::string &title, std::string &channel_url, std::vector<MediaChapter> &chapters, std::string &err_str) {
livestream_url.clear();
video_formats.clear();
audio_formats.clear();
@@ -2479,7 +2481,7 @@ R"END(
DownloadResult download_result = download_json(json_root, "https://www.youtube.com/youtubei/v1/player?key=" + api_key + "&gl=US&hl=en", additional_args, true);
if(download_result != DownloadResult::OK) return download_result_to_plugin_result(download_result);
- return parse_video_response(json_root, title, channel_url, chapters);
+ return parse_video_response(json_root, title, channel_url, chapters, err_str);
}
void YoutubeVideoPage::mark_watched() {