Browse Source

save session on browser close only

PHP-GTK3
yggverse 4 months ago
parent
commit
48198668fd
  1. 27
      src/Entity/Browser.php
  2. 33
      src/Entity/Browser/Container/Page/Navbar/Request.php
  3. 47
      src/Entity/Browser/Container/Tab.php
  4. 10
      src/Yoda.php

27
src/Entity/Browser.php

@ -4,6 +4,7 @@ declare(strict_types=1); @@ -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 @@ -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();
}
);
}
}

33
src/Entity/Browser/Container/Page/Navbar/Request.php

@ -5,7 +5,6 @@ declare(strict_types=1); @@ -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 @@ -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 @@ -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 @@ -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(

47
src/Entity/Browser/Container/Tab.php

@ -26,7 +26,7 @@ class Tab @@ -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 @@ -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 @@ -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 @@ -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 @@ -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;
}
}
}

10
src/Yoda.php

@ -24,18 +24,10 @@ $database = new \Yggverse\Yoda\Model\Database( @@ -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;

Loading…
Cancel
Save