diff options
Diffstat (limited to 'src/QuickMedia.cpp')
-rw-r--r-- | src/QuickMedia.cpp | 34 |
1 files changed, 26 insertions, 8 deletions
diff --git a/src/QuickMedia.cpp b/src/QuickMedia.cpp index 644ed6f..6e9fcf3 100644 --- a/src/QuickMedia.cpp +++ b/src/QuickMedia.cpp @@ -1688,7 +1688,14 @@ namespace QuickMedia { video_loaded = false; added_recommendations = false; watched_videos.insert(video_url); - VideoPlayer::Error err = video_player->load_video(video_url.c_str(), window.getSystemHandle(), plugin_name); + std::string video_url_converted; + std::string dummy_id; + if(youtube_url_extract_id(video_url, dummy_id)) { + video_url_converted = "ytdl://" + video_url; + } else { + video_url_converted = video_url; + } + VideoPlayer::Error err = video_player->load_video(video_url_converted.c_str(), window.getSystemHandle(), plugin_name); if(err != VideoPlayer::Error::OK) { std::string err_msg = "Failed to play url: "; err_msg += video_url; @@ -1747,6 +1754,8 @@ namespace QuickMedia { } else if(strcmp(event_name, "file-loaded") == 0) { has_video_started = true; time_watched_timer.restart(); + if(!video_loaded) + video_player->set_property("no-resume-playback", true); video_loaded = true; } else if(strcmp(event_name, "end-file") == 0) { video_loaded = false; @@ -1779,7 +1788,7 @@ namespace QuickMedia { } }; - video_player = std::make_unique<VideoPlayer>(use_tor, no_video, use_system_mpv_config, video_event_callback, on_window_create, resources_root); + video_player = std::make_unique<VideoPlayer>(use_tor, no_video, use_system_mpv_config, false, video_event_callback, on_window_create, resources_root); load_video_error_check(); sf::Event event; @@ -1865,15 +1874,23 @@ namespace QuickMedia { bool page_changed = false; page_loop(tabs, 1, [this, &video_player, &page_changed]() { window.setMouseCursorVisible(true); + video_player->quit_and_save_watch_later(); + while(true) { + VideoPlayer::Error update_err = video_player->update(); + if(update_err != VideoPlayer::Error::OK) + break; + std::this_thread::sleep_for(std::chrono::milliseconds(20)); + } video_player.reset(); page_changed = true; }); if(page_changed) { - if(fullscreen) - window_set_fullscreen(disp, window.getSystemHandle(), WindowFullscreenState::UNSET); - current_page = previous_page; - return; + current_page = PageType::VIDEO_CONTENT; + video_player_window = None; + has_video_started = true; + video_player = std::make_unique<VideoPlayer>(use_tor, no_video, use_system_mpv_config, true, video_event_callback, on_window_create, resources_root); + load_video_error_check(); } else { XMapWindow(disp, video_player_window); XSync(disp, False); @@ -3747,7 +3764,7 @@ namespace QuickMedia { // TODO: Optimize auto update_pinned_messages_authors = [&tabs, ¤t_room]() { - fprintf(stderr, "updated pinned messages author for all users\n"); + fprintf(stderr, "updated pinned messages author for all users in room: %s\n", current_room->id.c_str()); for(auto &pinned_body_item : tabs[PINNED_TAB_INDEX].body->items) { Message *message = static_cast<PinnedEventData*>(pinned_body_item->userdata)->message; // Its fine if we dont set it now. When the message is fetches, it will have updated user info since its fetched later @@ -3766,7 +3783,7 @@ namespace QuickMedia { // TODO: Optimize auto update_messages_authors = [&tabs, ¤t_room]() { - fprintf(stderr, "updated messages author for all users\n"); + fprintf(stderr, "updated messages author for all users in room: %s\n", current_room->id.c_str()); for(auto &message_body_items : tabs[MESSAGES_TAB_INDEX].body->items) { Message *message = static_cast<Message*>(message_body_items->userdata); message_body_items->set_author(current_room->get_user_display_name(message->user)); @@ -3807,6 +3824,7 @@ namespace QuickMedia { // TODO: Remove this once synapse bug has been resolved where /sync does not include user info for new messages when using message filter that limits number of messages for initial sync, // and then only call this when viewing the users tab for the first time. + // Note that this is not needed when new users join the room, as those will be included in the sync timeline (with membership events) if(current_room->users_fetched) { //TODO BLABLA //update_ |