From 8e1e42f609432b4ac27aa742d79d5de6074409ac Mon Sep 17 00:00:00 2001 From: yggverse Date: Thu, 12 Sep 2024 01:51:46 +0300 Subject: [PATCH] implement page update progress listener --- src/app/browser/main/tab/page.cpp | 39 +++++++++++++++++-------------- src/app/browser/main/tab/page.hpp | 1 + 2 files changed, 23 insertions(+), 17 deletions(-) diff --git a/src/app/browser/main/tab/page.cpp b/src/app/browser/main/tab/page.cpp index c26ab71f..591d927b 100644 --- a/src/app/browser/main/tab/page.cpp +++ b/src/app/browser/main/tab/page.cpp @@ -158,7 +158,7 @@ void Page::update() void Page::navigation_reload( const bool & ADD_HISTORY ) { - // Update navigation history + // Update navigation history? if (ADD_HISTORY) { pageNavigation->history_add( @@ -167,7 +167,7 @@ void Page::navigation_reload( ); } - // Update page data + // Reset page data mime = MIME::UNDEFINED; title = _("Update"); @@ -179,7 +179,26 @@ void Page::navigation_reload( progress_fraction = 0; - action__update->signal_activate(); + // Begin progress listener in main thread (as this method use async data loader) + Glib::signal_timeout().connect( + [this]() -> bool + { + // Page update in progress.. + if (progress_fraction < 1) + { + return true; // continue + } + + // Page update completed, reset progress_fraction anyway + progress_fraction = 0; + + // Activate window update action + action__update->signal_activate(); + + return false; // stop iteration + }, + 500 // @TODO add timeout + ); // Connect scheme driver if ("file" == pageNavigation->get_request_scheme()) @@ -218,8 +237,6 @@ void Page::navigation_reload( progress_fraction = .25; - action__update->signal_activate(); - try { GioSocketConnection = GioSocketClient->connect_to_uri_finish( @@ -235,8 +252,6 @@ void Page::navigation_reload( description = EXCEPTION.what(); progress_fraction = 1; - - action__update->signal_activate(); } // Connection established, begin request @@ -260,8 +275,6 @@ void Page::navigation_reload( progress_fraction = .5; - action__update->signal_activate(); - // Response GioSocketConnection->get_input_stream()->read_async( // | read_all_async buffer, @@ -279,8 +292,6 @@ void Page::navigation_reload( progress_fraction = .75; - action__update->signal_activate(); - // Parse meta auto meta = Glib::Regex::split_simple( R"regex(^(\d+)?\s([\w]+\/[\w]+)?)regex", @@ -309,8 +320,6 @@ void Page::navigation_reload( pageContent->set_text_gemini( // @TODO buffer ); - - action__update->signal_activate(); } else @@ -321,8 +330,6 @@ void Page::navigation_reload( description = _("MIME type not supported"); progress_fraction = 1; - - action__update->signal_activate(); } } @@ -337,8 +344,6 @@ void Page::navigation_reload( ); progress_fraction = 1; - - action__update->signal_activate(); } GioSocketConnection->close(); diff --git a/src/app/browser/main/tab/page.hpp b/src/app/browser/main/tab/page.hpp index 1d09fae1..4689ba8a 100644 --- a/src/app/browser/main/tab/page.hpp +++ b/src/app/browser/main/tab/page.hpp @@ -8,6 +8,7 @@ #include #include #include +#include #include #include #include