Browse Source

implement page update progress listener

CPP-GTK4
yggverse 3 months ago
parent
commit
8e1e42f609
  1. 37
      src/app/browser/main/tab/page.cpp
  2. 1
      src/app/browser/main/tab/page.hpp

37
src/app/browser/main/tab/page.cpp

@ -158,7 +158,7 @@ void Page::update()
void Page::navigation_reload( void Page::navigation_reload(
const bool & ADD_HISTORY const bool & ADD_HISTORY
) { ) {
// Update navigation history // Update navigation history?
if (ADD_HISTORY) if (ADD_HISTORY)
{ {
pageNavigation->history_add( pageNavigation->history_add(
@ -167,7 +167,7 @@ void Page::navigation_reload(
); );
} }
// Update page data // Reset page data
mime = MIME::UNDEFINED; mime = MIME::UNDEFINED;
title = _("Update"); title = _("Update");
@ -179,8 +179,27 @@ void Page::navigation_reload(
progress_fraction = 0; progress_fraction = 0;
// 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(); action__update->signal_activate();
return false; // stop iteration
},
500 // @TODO add timeout
);
// Connect scheme driver // Connect scheme driver
if ("file" == pageNavigation->get_request_scheme()) if ("file" == pageNavigation->get_request_scheme())
{ {
@ -218,8 +237,6 @@ void Page::navigation_reload(
progress_fraction = .25; progress_fraction = .25;
action__update->signal_activate();
try try
{ {
GioSocketConnection = GioSocketClient->connect_to_uri_finish( GioSocketConnection = GioSocketClient->connect_to_uri_finish(
@ -235,8 +252,6 @@ void Page::navigation_reload(
description = EXCEPTION.what(); description = EXCEPTION.what();
progress_fraction = 1; progress_fraction = 1;
action__update->signal_activate();
} }
// Connection established, begin request // Connection established, begin request
@ -260,8 +275,6 @@ void Page::navigation_reload(
progress_fraction = .5; progress_fraction = .5;
action__update->signal_activate();
// Response // Response
GioSocketConnection->get_input_stream()->read_async( // | read_all_async GioSocketConnection->get_input_stream()->read_async( // | read_all_async
buffer, buffer,
@ -279,8 +292,6 @@ void Page::navigation_reload(
progress_fraction = .75; progress_fraction = .75;
action__update->signal_activate();
// Parse meta // Parse meta
auto meta = Glib::Regex::split_simple( auto meta = Glib::Regex::split_simple(
R"regex(^(\d+)?\s([\w]+\/[\w]+)?)regex", R"regex(^(\d+)?\s([\w]+\/[\w]+)?)regex",
@ -309,8 +320,6 @@ void Page::navigation_reload(
pageContent->set_text_gemini( // @TODO pageContent->set_text_gemini( // @TODO
buffer buffer
); );
action__update->signal_activate();
} }
else else
@ -321,8 +330,6 @@ void Page::navigation_reload(
description = _("MIME type not supported"); description = _("MIME type not supported");
progress_fraction = 1; progress_fraction = 1;
action__update->signal_activate();
} }
} }
@ -337,8 +344,6 @@ void Page::navigation_reload(
); );
progress_fraction = 1; progress_fraction = 1;
action__update->signal_activate();
} }
GioSocketConnection->close(); GioSocketConnection->close();

1
src/app/browser/main/tab/page.hpp

@ -8,6 +8,7 @@
#include <giomm/socketclient.h> #include <giomm/socketclient.h>
#include <giomm/socketconnection.h> #include <giomm/socketconnection.h>
#include <glibmm/i18n.h> #include <glibmm/i18n.h>
#include <glibmm/main.h>
#include <glibmm/refptr.h> #include <glibmm/refptr.h>
#include <glibmm/regex.h> #include <glibmm/regex.h>
#include <glibmm/stringutils.h> #include <glibmm/stringutils.h>

Loading…
Cancel
Save