From 48198668fdcbbea01976817f5558353b561e0229 Mon Sep 17 00:00:00 2001 From: yggverse Date: Fri, 26 Jul 2024 13:34:24 +0300 Subject: [PATCH] save session on browser close only --- src/Entity/Browser.php | 27 +++++++++++ .../Browser/Container/Page/Navbar/Request.php | 33 ------------- src/Entity/Browser/Container/Tab.php | 47 ++++--------------- src/Yoda.php | 10 +--- 4 files changed, 38 insertions(+), 79 deletions(-) diff --git a/src/Entity/Browser.php b/src/Entity/Browser.php index 52ada2ad..8905ab6e 100644 --- a/src/Entity/Browser.php +++ b/src/Entity/Browser.php @@ -4,6 +4,7 @@ declare(strict_types=1); namespace Yggverse\Yoda\Entity; +use \Gtk; use \GtkWindow; use \Yggverse\Yoda\Entity\Browser\Header; @@ -78,5 +79,31 @@ class Browser // @TODO render data wordwrap by $window->get_size() } ); + + $this->gtk->connect( + 'destroy', + function() + { + // Save session + $pid = pcntl_fork(); + + if ($pid === 0) + { + $this->database->cleanSession(); + + foreach ($this->container->tab->pages as $page) + { + $this->database->addSession( + $page->navbar->request->getValue() + ); + } + + exit; + } + + // Exit application + Gtk::main_quit(); + } + ); } } \ No newline at end of file diff --git a/src/Entity/Browser/Container/Page/Navbar/Request.php b/src/Entity/Browser/Container/Page/Navbar/Request.php index ddc5aae8..94da1527 100644 --- a/src/Entity/Browser/Container/Page/Navbar/Request.php +++ b/src/Entity/Browser/Container/Page/Navbar/Request.php @@ -5,7 +5,6 @@ declare(strict_types=1); namespace Yggverse\Yoda\Entity\Browser\Container\Page\Navbar; use \GdkEvent; -use \Gtk; use \GtkEntry; use \Yggverse\Yoda\Abstract\Entity\Entry; @@ -17,9 +16,6 @@ class Request extends Entry // Defaults public const PLACEHOLDER = 'URL or search term...'; - // Extras - private ?int $_changed = null; - // Dependencies public Navbar $navbar; @@ -57,8 +53,6 @@ class Request extends Entry $this->navbar->page->open( $this->getValue() ); - - $this->navbar->page->container->tab->update(); } protected function _onKeyRelease( @@ -81,33 +75,6 @@ class Request extends Entry // Show suggestions autocomplete $this->completion->refresh(); - - // Update session - if (isset($this->navbar->page->container->tab)) - { - // Reset keyup time - if ($this->_changed) - { - Gtk::source_remove( - $this->_changed - ); - - $this->_changed = null; - } - - // Wait for one second to apply act - $this->_changed = Gtk::timeout_add( - 1000, - function() - { - $this->navbar->page->container->tab->update(); - - $this->_changed = null; - - return false; // stop - } - ); - } } protected function _onFocusOut( diff --git a/src/Entity/Browser/Container/Tab.php b/src/Entity/Browser/Container/Tab.php index e13f24c8..a118a110 100644 --- a/src/Entity/Browser/Container/Tab.php +++ b/src/Entity/Browser/Container/Tab.php @@ -26,7 +26,7 @@ class Tab public const SCROLLABLE = true; // Extras - private array $_page = []; + public array $pages = []; public function __construct( Container $container @@ -119,7 +119,7 @@ class Tab { // Extendable classes not supported by PHP-GTK3 #117 // create internal pages registry - $this->_page[] = $page = new Page( + $this->pages[] = $page = new Page( $this->container ); @@ -204,13 +204,13 @@ class Tab } // Validate page index exists - if (empty($this->_page[$page_num])) + if (empty($this->pages[$page_num])) { throw new Exception; } // Return page entity - return $this->_page[$page_num]; + return $this->pages[$page_num]; } public function close( @@ -229,14 +229,12 @@ class Tab } } - public function reorder( - bool $session = true - ): void + public function reorder(): void { // Init new index - $_page = []; + $pages = []; - foreach ($this->_page as $page) + foreach ($this->pages as $page) { // Get current entity $page_num $page_num = $this->gtk->page_num( @@ -253,39 +251,14 @@ class Tab } // Update position - $_page[$page_num] = $page; + $pages[$page_num] = $page; } // Reorder entities - $this->_page = $_page; + $this->pages = $pages; ksort( - $this->_page + $this->pages ); - - // Update session - if ($session) - { - $this->update(); - } - } - - public function update(): void - { - $pid = pcntl_fork(); - - if ($pid === 0) - { - $this->container->browser->database->cleanSession(); - - foreach ($this->_page as $page) - { - $this->container->browser->database->addSession( - $page->navbar->request->getValue() - ); - } - - exit; - } } } \ No newline at end of file diff --git a/src/Yoda.php b/src/Yoda.php index 10f6c855..47b3cb70 100644 --- a/src/Yoda.php +++ b/src/Yoda.php @@ -24,18 +24,10 @@ $database = new \Yggverse\Yoda\Model\Database( \Gtk::init(); // Init browser -$browser = new \Yggverse\Yoda\Entity\Browser( +new \Yggverse\Yoda\Entity\Browser( $database ); -$browser->gtk->connect( - 'destroy', - function() - { - \Gtk::main_quit(); - } -); - // Init theme $css = new \GtkCssProvider;