From 3eccedbcea41accb708e8cd8e7f956d06c70f4a3 Mon Sep 17 00:00:00 2001 From: dec05eba Date: Sun, 27 Sep 2020 08:01:54 +0200 Subject: Save currently playing video url to clipboard with ctrl+s --- src/QuickMedia.cpp | 42 ++++++++++++++++++++++++++++-------------- 1 file changed, 28 insertions(+), 14 deletions(-) (limited to 'src/QuickMedia.cpp') diff --git a/src/QuickMedia.cpp b/src/QuickMedia.cpp index cec7531..7c718e5 100644 --- a/src/QuickMedia.cpp +++ b/src/QuickMedia.cpp @@ -20,6 +20,7 @@ #include "../include/base64_url.hpp" #include +#include #include #include #include @@ -1564,7 +1565,7 @@ namespace QuickMedia { } }; - video_player = std::make_unique(current_plugin->use_tor, use_system_mpv_config, video_event_callback, on_window_create); + video_player = std::make_unique(current_plugin->use_tor, use_system_mpv_config, video_event_callback, on_window_create, resources_root); load_video_error_check(); sf::Event event; @@ -1581,6 +1582,22 @@ namespace QuickMedia { sf::Clock cursor_hide_timer; bool is_youtube = current_plugin->name == "youtube"; + bool is_pornhub = current_plugin->name == "pornhub"; + bool supports_url_timestamp = is_youtube || is_pornhub; + + auto save_video_url_to_clipboard = [this, &video_player_window, &video_player, &supports_url_timestamp]() { + if(!video_player_window) + return; + + if(supports_url_timestamp) { + double time_in_file; + if(video_player->get_time_in_file(&time_in_file) != VideoPlayer::Error::OK) + time_in_file = 0.0; + sf::Clipboard::setString(content_url + "&t=" + std::to_string((int)time_in_file)); + } else { + sf::Clipboard::setString(content_url); + } + }; while (current_page == Page::VIDEO_CONTENT) { while (window.pollEvent(event)) { @@ -1617,26 +1634,20 @@ namespace QuickMedia { if(!selected_item) continue; - // Make window black while the next video is loading, otherwise it will be stuck at the last view - related_media_window->clear(); - related_media_window->display(); - - related_media_window.reset(); related_media_window_visible = false; - - video_player_window = None; - has_video_started = true; - video_player.reset(); - video_player = std::make_unique(current_plugin->use_tor, use_system_mpv_config, video_event_callback, on_window_create); + related_media_window->setVisible(false); + has_video_started = false; content_url = selected_item->url; content_title = selected_item->get_title(); load_video_error_check(); + } else if(event.key.code == sf::Keyboard::S && event.key.control) { + save_video_url_to_clipboard(); } } } - if(video_player_window && XCheckTypedWindowEvent(disp, video_player_window, KeyPress, &xev)/* && xev.xkey.subwindow == video_player_window*/) { + if(video_player_window && XCheckTypedWindowEvent(disp, video_player_window, KeyPress, &xev)/* && xev.xkey.subwindow == video_player_window*/ && !related_media_window_visible) { #pragma GCC diagnostic push #pragma GCC diagnostic ignored "-Wdeprecated-declarations" KeySym pressed_keysym = XKeycodeToKeysym(disp, xev.xkey.keycode, 0); @@ -1646,12 +1657,14 @@ namespace QuickMedia { current_page = previous_page; } else if(pressed_keysym == XK_f && pressing_ctrl) { window_set_fullscreen(disp, window.getSystemHandle(), WindowFullscreenState::TOGGLE); - } else if(pressed_keysym == XK_r && pressing_ctrl && related_media_window && !related_media_window_visible) { + } else if(pressed_keysym == XK_r && pressing_ctrl && related_media_window) { related_media_window_visible = true; related_media_window->setVisible(related_media_window_visible); if(!cursor_visible) window.setMouseCursorVisible(true); cursor_visible = true; + } else if(pressed_keysym == XK_s && pressing_ctrl) { + save_video_url_to_clipboard(); } } @@ -1668,7 +1681,8 @@ namespace QuickMedia { show_notification("Video player", "Failed to connect to mpv ipc after 10 seconds", Urgency::CRITICAL); current_page = previous_page; break; - } else if(update_err == VideoPlayer::Error::EXITED && video_player->exit_status == 0) { + } else if(update_err == VideoPlayer::Error::EXITED && (video_player->exit_status == 0 || video_player->exit_status == 4)) { + // The exit status is 0 when 'q' is used and the exist status is 4 when ctrl+c is used. fprintf(stderr, "mpv exited with status 0, the user most likely closed mpv with 'q'\n"); current_page = previous_page; break; -- cgit v1.2.3