Browse Source

implement page history recorder

PHP-GTK3
yggverse 8 months ago
parent
commit
374df89a4f
  1. 9
      config.json
  2. 27
      src/Entity/Tab/Page.php
  3. 63
      src/Model/Database.php

9
config.json

@ -78,6 +78,11 @@
} }
} }
}, },
"history":
{
"enabled":true,
"timeout":null
},
"header": "header":
{ {
"margin":8, "margin":8,
@ -129,10 +134,6 @@
} }
} }
} }
},
"history":
{
"enabled":true
} }
} }
} }

27
src/Entity/Tab/Page.php

@ -45,6 +45,14 @@ class Page
// Init history // Init history
$this->history = new \Yggverse\Yoda\Model\History; $this->history = new \Yggverse\Yoda\Model\History;
// Run database cleaner
if ($this->config->history->timeout)
{
$this->app->database->cleanHistory(
$this->config->history->timeout
);
}
// Compose header // Compose header
$this->header = new \GtkBox( $this->header = new \GtkBox(
\GtkOrientation::HORIZONTAL \GtkOrientation::HORIZONTAL
@ -364,17 +372,34 @@ class Page
$history = false; $history = false;
} }
// Ignore history record on same URL stored in DB
if ($result = $this->app->database->getHistory(0, 1))
{
if ($url == $result[0]->url)
{
$history = false;
}
}
// Update address field by requested // Update address field by requested
$this->address->set_text( $this->address->set_text(
$url $url
); );
// Update history pool
if ($history) if ($history)
{ {
// Update history in memory pool
$this->history->add( $this->history->add(
$url $url
); );
// Update history in the database
if ($this->config->history->enabled)
{
$this->app->database->addHistory(
$url
);
}
} }
// Update home button sensibility on match requested // Update home button sensibility on match requested

63
src/Model/Database.php

@ -6,7 +6,7 @@ namespace Yggverse\Yoda\Model;
class Database class Database
{ {
public \PDO $database; public \PDO $_database;
public function __construct( public function __construct(
string $database, string $database,
@ -15,7 +15,7 @@ class Database
) { ) {
try try
{ {
$this->database = new \PDO( $this->_database = new \PDO(
sprintf( sprintf(
'sqlite:%s', 'sqlite:%s',
$database $database
@ -24,22 +24,22 @@ class Database
$password $password
); );
$this->database->setAttribute( $this->_database->setAttribute(
\PDO::ATTR_ERRMODE, \PDO::ATTR_ERRMODE,
\PDO::ERRMODE_EXCEPTION \PDO::ERRMODE_EXCEPTION
); );
$this->database->setAttribute( $this->_database->setAttribute(
\PDO::ATTR_DEFAULT_FETCH_MODE, \PDO::ATTR_DEFAULT_FETCH_MODE,
\PDO::FETCH_OBJ \PDO::FETCH_OBJ
); );
$this->database->query(' $this->_database->query('
CREATE TABLE IF NOT EXISTS "history" CREATE TABLE IF NOT EXISTS "history"
( (
"id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,
"time" INTEGER NOT NULL, "time" INTEGER NOT NULL,
"address" VARCHAR(1024) NOT NULL "url" VARCHAR(1024) NOT NULL
) )
'); ');
} }
@ -54,4 +54,55 @@ class Database
); );
} }
} }
public function addHistory(
string $url
): int
{
$query = $this->_database->prepare(
'INSERT INTO `history` (`time`, `url`) VALUES (:time, :url)'
);
$query->execute(
[
':time' => time(),
':url' => $url
]
);
return (int) $this->_database->lastInsertId();
}
public function getHistory(
int $start = 0,
int $limit = 1000
): array
{
$query = $this->_database->query(
sprintf(
'SELECT * FROM `history` ORDER BY `id` DESC LIMIT %d,%d',
$start,
$limit
)
);
return $query->fetchAll();
}
public function cleanHistory(
int $timeout = 0
): int
{
$query = $this->_database->query(
sprintf(
'DELETE FROM `history` WHERE `time` + %d < %d',
$timeout,
time()
)
);
return $query->rowCount();
}
} }
Loading…
Cancel
Save