mirror of
https://github.com/YGGverse/Yoda.git
synced 2026-03-31 16:45:27 +00:00
cache connection data on browser close only
This commit is contained in:
parent
1cb3db9923
commit
48c682459d
6 changed files with 44 additions and 66 deletions
|
|
@ -244,27 +244,6 @@ abstract class Connection implements \Yggverse\Yoda\Interface\Model\Connection
|
|||
);
|
||||
}
|
||||
|
||||
public function cache(
|
||||
string $request
|
||||
): void
|
||||
{
|
||||
$pid = pcntl_fork(); // not wait
|
||||
|
||||
if ($pid === 0)
|
||||
{
|
||||
$this->_database->renewCache(
|
||||
$request,
|
||||
$this->getMime(),
|
||||
$this->getTitle(),
|
||||
$this->getSubtitle(),
|
||||
$this->getTooltip(),
|
||||
$this->getData()
|
||||
);
|
||||
|
||||
exit;
|
||||
}
|
||||
}
|
||||
|
||||
public function reset(): void
|
||||
{
|
||||
$this->_pool->reset();
|
||||
|
|
|
|||
|
|
@ -84,18 +84,33 @@ class Browser
|
|||
'destroy',
|
||||
function()
|
||||
{
|
||||
// Save session
|
||||
// Save session data
|
||||
$pid = pcntl_fork();
|
||||
|
||||
if ($pid === 0)
|
||||
{
|
||||
// Reset previous records
|
||||
$this->database->cleanSession();
|
||||
|
||||
foreach ($this->container->tab->pages as $page)
|
||||
{
|
||||
// Save page session data
|
||||
$this->database->addSession(
|
||||
$page->navbar->request->getValue()
|
||||
);
|
||||
|
||||
// Cache connection pool data
|
||||
if ($page->connection)
|
||||
{
|
||||
$this->database->renewCache(
|
||||
$page->navbar->request->getValue(),
|
||||
$page->connection->getMime(),
|
||||
$page->connection->getTitle(),
|
||||
$page->connection->getSubtitle(),
|
||||
$page->connection->getTooltip(),
|
||||
$page->connection->getData()
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
exit;
|
||||
|
|
|
|||
|
|
@ -29,6 +29,8 @@ class Page
|
|||
public Page\Content $content;
|
||||
public Page\Response $response;
|
||||
|
||||
public ?Connection $connection = null;
|
||||
|
||||
public function __construct(
|
||||
Container $container
|
||||
) {
|
||||
|
|
@ -165,13 +167,20 @@ class Page
|
|||
// Hide response form
|
||||
$this->response->hide();
|
||||
|
||||
// Drop previous connection
|
||||
if ($this->connection)
|
||||
{
|
||||
// Free memory
|
||||
$this->connection->close();
|
||||
}
|
||||
|
||||
// Update content using multi-protocol driver
|
||||
$connection = new Connection(
|
||||
$this->connection = new Connection(
|
||||
$this->container->browser->database
|
||||
);
|
||||
|
||||
// Async request
|
||||
$connection->request(
|
||||
$this->connection->request(
|
||||
$this->navbar->request->getValue(),
|
||||
$timeout
|
||||
);
|
||||
|
|
@ -182,10 +191,10 @@ class Page
|
|||
// Listen response
|
||||
Gtk::timeout_add(
|
||||
$refresh,
|
||||
function() use ($connection, $expire, $history)
|
||||
function() use ($expire, $history)
|
||||
{
|
||||
// Redirect requested
|
||||
if ($location = $connection->getRedirect())
|
||||
if ($location = $this->connection->getRedirect())
|
||||
{
|
||||
// Follow
|
||||
$this->open(
|
||||
|
|
@ -195,20 +204,17 @@ class Page
|
|||
// Hide progressbar
|
||||
$this->progressbar->hide();
|
||||
|
||||
// Free shared memory pool
|
||||
$connection->close();
|
||||
|
||||
return false; // stop
|
||||
}
|
||||
|
||||
// Response form requested
|
||||
if ($request = $connection->getRequest())
|
||||
if ($request = $this->connection->getRequest())
|
||||
{
|
||||
// Update title
|
||||
$this->title->set(
|
||||
$connection->getTitle(),
|
||||
$connection->getSubtitle(),
|
||||
$connection->getTooltip()
|
||||
$this->connection->getTitle(),
|
||||
$this->connection->getSubtitle(),
|
||||
$this->connection->getTooltip()
|
||||
);
|
||||
|
||||
// Refresh header by new title if current page is active
|
||||
|
|
@ -229,20 +235,17 @@ class Page
|
|||
// Hide progressbar
|
||||
$this->progressbar->hide();
|
||||
|
||||
// Free shared memory pool
|
||||
$connection->close();
|
||||
|
||||
return false; // stop
|
||||
}
|
||||
|
||||
// Stop event loop on request completed
|
||||
if ($connection->isCompleted())
|
||||
if ($this->connection->isCompleted())
|
||||
{
|
||||
// Update title
|
||||
$this->title->set(
|
||||
$connection->getTitle(),
|
||||
$connection->getSubtitle(),
|
||||
$connection->getTooltip()
|
||||
$this->connection->getTitle(),
|
||||
$this->connection->getSubtitle(),
|
||||
$this->connection->getTooltip()
|
||||
);
|
||||
|
||||
// Refresh header by new title if current page is active
|
||||
|
|
@ -256,16 +259,13 @@ class Page
|
|||
|
||||
// Update content
|
||||
$this->content->set(
|
||||
$connection->getMime(),
|
||||
$connection->getData()
|
||||
$this->connection->getMime(),
|
||||
$this->connection->getData()
|
||||
);
|
||||
|
||||
// Hide progressbar
|
||||
$this->progressbar->hide();
|
||||
|
||||
// Free shared memory pool
|
||||
$connection->close();
|
||||
|
||||
// Update history
|
||||
if ($history)
|
||||
{
|
||||
|
|
@ -317,9 +317,6 @@ class Page
|
|||
// Hide progressbar
|
||||
$this->progressbar->hide();
|
||||
|
||||
// Free shared memory pool
|
||||
$connection->close();
|
||||
|
||||
// Stop
|
||||
return false;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -80,10 +80,6 @@ interface Connection
|
|||
string $request
|
||||
): ?object;
|
||||
|
||||
public function cache(
|
||||
string $request
|
||||
): void;
|
||||
|
||||
public function reset(): void;
|
||||
|
||||
public function close(): void;
|
||||
|
|
|
|||
|
|
@ -4,13 +4,14 @@ declare(strict_types=1);
|
|||
|
||||
namespace Yggverse\Yoda\Model\Connection;
|
||||
|
||||
use \Yggverse\Gemini\Client\Request;
|
||||
use \Yggverse\Gemini\Client\Response;
|
||||
use \Yggverse\Net\Address;
|
||||
|
||||
use \Yggverse\Yoda\Model\Connection;
|
||||
use \Yggverse\Yoda\Model\Filesystem;
|
||||
|
||||
use \Yggverse\Gemini\Client\Request;
|
||||
use \Yggverse\Gemini\Client\Response;
|
||||
|
||||
use \Yggverse\Net\Address;
|
||||
|
||||
class Gemini
|
||||
{
|
||||
private Connection $_connection;
|
||||
|
|
@ -114,11 +115,6 @@ class Gemini
|
|||
$response->getBody()
|
||||
);
|
||||
|
||||
// Cache
|
||||
$this->_connection->cache(
|
||||
$address->get()
|
||||
);
|
||||
|
||||
break;
|
||||
|
||||
case 31: // redirect
|
||||
|
|
|
|||
|
|
@ -72,11 +72,6 @@ class Nex
|
|||
$this->_connection->setData(
|
||||
$response
|
||||
);
|
||||
|
||||
// Cache
|
||||
$this->_connection->cache(
|
||||
$address->get()
|
||||
);
|
||||
}
|
||||
|
||||
// Try cache
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue