aboutsummaryrefslogtreecommitdiff
path: root/src/QuickMedia.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/QuickMedia.cpp')
-rw-r--r--src/QuickMedia.cpp34
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, &current_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, &current_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_