aboutsummaryrefslogtreecommitdiff
path: root/src/QuickMedia.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/QuickMedia.cpp')
-rw-r--r--src/QuickMedia.cpp21
1 files changed, 16 insertions, 5 deletions
diff --git a/src/QuickMedia.cpp b/src/QuickMedia.cpp
index cd4a279..cd1377a 100644
--- a/src/QuickMedia.cpp
+++ b/src/QuickMedia.cpp
@@ -561,7 +561,6 @@ namespace QuickMedia {
}
void Program::init(Window parent_window, std::string &program_path) {
- XInitThreads();
disp = XOpenDisplay(NULL);
if (!disp)
throw std::runtime_error("Failed to open display to X11 server");
@@ -2187,8 +2186,15 @@ namespace QuickMedia {
return;
channel_url.clear();
- // TODO: Remove this and use lazy_fetch instead
- related_videos = video_page->get_related_media(video_url, channel_url);
+ TaskResult load_related_media_result = run_task_with_loading_screen([video_page, &related_videos, &video_url, &channel_url]{
+ related_videos = video_page->get_related_media(video_url, channel_url);
+ return true;
+ });
+
+ if(load_related_media_result == TaskResult::CANCEL) {
+ current_page = previous_page;
+ return;
+ }
// TODO: Make this also work for other video plugins
if(strcmp(plugin_name, "youtube") != 0 || resume_video)
@@ -2297,7 +2303,7 @@ namespace QuickMedia {
KeySym pressed_keysym = XKeycodeToKeysym(disp, xev.xkey.keycode, 0);
#pragma GCC diagnostic pop
bool pressing_ctrl = (CLEANMASK(xev.xkey.state) == ControlMask);
- if(pressed_keysym == XK_Escape || pressed_keysym == XK_BackSpace || pressed_keysym == XK_q) {
+ if(pressed_keysym == XK_Escape || pressed_keysym == XK_q || pressed_keysym == XK_BackSpace) {
current_page = previous_page;
break;
} else if(pressed_keysym == XK_f && pressing_ctrl) {
@@ -2402,7 +2408,7 @@ namespace QuickMedia {
if(new_video_url.empty() && parent_page && parent_body_page) {
BodyItems new_body_items;
const int fetch_page = (*parent_body_page) + 1;
- run_task_with_loading_screen([parent_page, parent_page_search, fetch_page, &new_body_items] {
+ TaskResult load_next_page_result = run_task_with_loading_screen([parent_page, parent_page_search, fetch_page, &new_body_items] {
if(parent_page->get_page(parent_page_search, fetch_page, new_body_items) != PluginResult::OK) {
fprintf(stderr, "Failed to get next page (page %d)\n", fetch_page);
return false;
@@ -2418,6 +2424,11 @@ namespace QuickMedia {
related_videos = std::move(new_body_items);
find_next_video();
}
+
+ if(load_next_page_result == TaskResult::CANCEL) {
+ current_page = previous_page;
+ continue;
+ }
}
// If there are no videos to play, then dont play any...