move static methods out of main db struct implementation

This commit is contained in:
yggverse 2024-11-12 17:22:07 +02:00
parent 5b3e091f2b
commit da33fa053e
28 changed files with 828 additions and 931 deletions

View file

@ -2,7 +2,6 @@ mod browser;
mod database; mod database;
use browser::Browser; use browser::Browser;
use database::Database;
use crate::profile::Profile; use crate::profile::Profile;
use adw::Application; use adw::Application;
@ -51,7 +50,7 @@ impl App {
match connection.unchecked_transaction() { match connection.unchecked_transaction() {
Ok(transaction) => { Ok(transaction) => {
// Restore previous session from DB // Restore previous session from DB
match Database::records(&transaction) { match database::records(&transaction) {
Ok(records) => { Ok(records) => {
// Restore child components // Restore child components
for record in records { for record in records {
@ -92,11 +91,11 @@ impl App {
// Create transaction // Create transaction
match connection.transaction() { match connection.transaction() {
Ok(transaction) => { Ok(transaction) => {
match Database::records(&transaction) { match database::records(&transaction) {
Ok(records) => { Ok(records) => {
// Cleanup previous session records // Cleanup previous session records
for record in records { for record in records {
match Database::delete(&transaction, &record.id) { match database::delete(&transaction, &record.id) {
Ok(_) => { Ok(_) => {
// Delegate clean action to childs // Delegate clean action to childs
if let Err(e) = if let Err(e) =
@ -110,12 +109,12 @@ impl App {
} }
// Save current session to DB // Save current session to DB
match Database::add(&transaction) { match database::add(&transaction) {
Ok(_) => { Ok(_) => {
// Delegate save action to childs // Delegate save action to childs
if let Err(e) = browser.save( if let Err(e) = browser.save(
&transaction, &transaction,
&Database::last_insert_id(&transaction), &database::last_insert_id(&transaction),
) { ) {
todo!("{e}") todo!("{e}")
} }
@ -268,7 +267,7 @@ impl App {
// Tools // Tools
fn migrate(tx: &Transaction) -> Result<(), String> { fn migrate(tx: &Transaction) -> Result<(), String> {
// Migrate self components // Migrate self components
if let Err(e) = Database::init(tx) { if let Err(e) = database::init(tx) {
return Err(e.to_string()); return Err(e.to_string());
} }

View file

@ -6,7 +6,6 @@ mod window;
use about::About; use about::About;
use action::Action; use action::Action;
use database::Database;
use widget::Widget; use widget::Widget;
use window::Window; use window::Window;
@ -101,10 +100,10 @@ impl Browser {
// Actions // Actions
pub fn clean(&self, transaction: &Transaction, app_id: &i64) -> Result<(), String> { pub fn clean(&self, transaction: &Transaction, app_id: &i64) -> Result<(), String> {
match Database::records(transaction, app_id) { match database::records(transaction, app_id) {
Ok(records) => { Ok(records) => {
for record in records { for record in records {
match Database::delete(transaction, &record.id) { match database::delete(transaction, &record.id) {
Ok(_) => { Ok(_) => {
// Delegate clean action to childs // Delegate clean action to childs
self.window.clean(transaction, &record.id)?; self.window.clean(transaction, &record.id)?;
@ -124,7 +123,7 @@ impl Browser {
} }
pub fn restore(&self, transaction: &Transaction, app_id: &i64) -> Result<(), String> { pub fn restore(&self, transaction: &Transaction, app_id: &i64) -> Result<(), String> {
match Database::records(transaction, app_id) { match database::records(transaction, app_id) {
Ok(records) => { Ok(records) => {
for record in records { for record in records {
// Delegate restore action to childs // Delegate restore action to childs
@ -142,9 +141,9 @@ impl Browser {
} }
pub fn save(&self, transaction: &Transaction, app_id: &i64) -> Result<(), String> { pub fn save(&self, transaction: &Transaction, app_id: &i64) -> Result<(), String> {
match Database::add(transaction, app_id) { match database::add(transaction, app_id) {
Ok(_) => { Ok(_) => {
let id = Database::last_insert_id(transaction); let id = database::last_insert_id(transaction);
// Delegate save action to childs // Delegate save action to childs
self.widget.save(transaction, &id)?; self.widget.save(transaction, &id)?;
@ -185,7 +184,7 @@ impl Browser {
// Tools // Tools
pub fn migrate(tx: &Transaction) -> Result<(), String> { pub fn migrate(tx: &Transaction) -> Result<(), String> {
// Migrate self components // Migrate self components
if let Err(e) = Database::init(tx) { if let Err(e) = database::init(tx) {
return Err(e.to_string()); return Err(e.to_string());
} }

View file

@ -5,51 +5,45 @@ pub struct Table {
// pub app_id: i64, not in use // pub app_id: i64, not in use
} }
pub struct Database { pub fn init(tx: &Transaction) -> Result<usize, Error> {
// nothing yet.. tx.execute(
"CREATE TABLE IF NOT EXISTS `app_browser`
(
`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,
`app_id` INTEGER NOT NULL
)",
[],
)
} }
impl Database { pub fn add(tx: &Transaction, app_id: &i64) -> Result<usize, Error> {
pub fn init(tx: &Transaction) -> Result<usize, Error> { tx.execute("INSERT INTO `app_browser` (`app_id`) VALUES (?)", [app_id])
tx.execute( }
"CREATE TABLE IF NOT EXISTS `app_browser`
( pub fn records(tx: &Transaction, app_id: &i64) -> Result<Vec<Table>, Error> {
`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, let mut stmt = tx.prepare("SELECT `id`, `app_id` FROM `app_browser` WHERE `app_id` = ?")?;
`app_id` INTEGER NOT NULL
)", let result = stmt.query_map([app_id], |row| {
[], Ok(Table {
) id: row.get(0)?,
} // app_id: row.get(1)?, not in use
})
pub fn add(tx: &Transaction, app_id: &i64) -> Result<usize, Error> { })?;
tx.execute("INSERT INTO `app_browser` (`app_id`) VALUES (?)", [app_id])
} let mut records = Vec::new();
pub fn records(tx: &Transaction, app_id: &i64) -> Result<Vec<Table>, Error> { for record in result {
let mut stmt = tx.prepare("SELECT `id`, `app_id` FROM `app_browser` WHERE `app_id` = ?")?; let table = record?;
records.push(table);
let result = stmt.query_map([app_id], |row| { }
Ok(Table {
id: row.get(0)?, Ok(records)
// app_id: row.get(1)?, not in use }
})
})?; pub fn delete(tx: &Transaction, id: &i64) -> Result<usize, Error> {
tx.execute("DELETE FROM `app_browser` WHERE `id` = ?", [id])
let mut records = Vec::new(); }
for record in result { pub fn last_insert_id(tx: &Transaction) -> i64 {
let table = record?; tx.last_insert_rowid()
records.push(table);
}
Ok(records)
}
pub fn delete(tx: &Transaction, id: &i64) -> Result<usize, Error> {
tx.execute("DELETE FROM `app_browser` WHERE `id` = ?", [id])
}
pub fn last_insert_id(tx: &Transaction) -> i64 {
tx.last_insert_rowid()
}
} }

View file

@ -1,5 +1,4 @@
mod database; mod database;
use database::Database;
use adw::ApplicationWindow; use adw::ApplicationWindow;
use gtk::{ use gtk::{
@ -43,10 +42,10 @@ impl Widget {
// Actions // Actions
pub fn clean(&self, transaction: &Transaction, app_browser_id: &i64) -> Result<(), String> { pub fn clean(&self, transaction: &Transaction, app_browser_id: &i64) -> Result<(), String> {
match Database::records(transaction, app_browser_id) { match database::records(transaction, app_browser_id) {
Ok(records) => { Ok(records) => {
for record in records { for record in records {
match Database::delete(transaction, &record.id) { match database::delete(transaction, &record.id) {
Ok(_) => { Ok(_) => {
// Delegate clean action to childs // Delegate clean action to childs
// nothing yet.. // nothing yet..
@ -62,7 +61,7 @@ impl Widget {
} }
pub fn restore(&self, transaction: &Transaction, app_browser_id: &i64) -> Result<(), String> { pub fn restore(&self, transaction: &Transaction, app_browser_id: &i64) -> Result<(), String> {
match Database::records(transaction, app_browser_id) { match database::records(transaction, app_browser_id) {
Ok(records) => { Ok(records) => {
for record in records { for record in records {
// Restore widget // Restore widget
@ -81,7 +80,7 @@ impl Widget {
} }
pub fn save(&self, transaction: &Transaction, app_browser_id: &i64) -> Result<(), String> { pub fn save(&self, transaction: &Transaction, app_browser_id: &i64) -> Result<(), String> {
match Database::add( match database::add(
transaction, transaction,
app_browser_id, app_browser_id,
&self.gobject.default_width(), &self.gobject.default_width(),
@ -108,7 +107,7 @@ impl Widget {
// Tools // Tools
pub fn migrate(tx: &Transaction) -> Result<(), String> { pub fn migrate(tx: &Transaction) -> Result<(), String> {
// Migrate self components // Migrate self components
if let Err(e) = Database::init(tx) { if let Err(e) = database::init(tx) {
return Err(e.to_string()); return Err(e.to_string());
} }

View file

@ -8,83 +8,77 @@ pub struct Table {
pub is_maximized: bool, pub is_maximized: bool,
} }
pub struct Database { pub fn init(tx: &Transaction) -> Result<usize, Error> {
// nothing yet.. tx.execute(
"CREATE TABLE IF NOT EXISTS `app_browser_widget`
(
`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,
`app_browser_id` INTEGER NOT NULL,
`default_width` INTEGER NOT NULL,
`default_height` INTEGER NOT NULL,
`is_maximized` INTEGER NOT NULL
)",
[],
)
} }
impl Database { pub fn add(
pub fn init(tx: &Transaction) -> Result<usize, Error> { tx: &Transaction,
tx.execute( app_browser_id: &i64,
"CREATE TABLE IF NOT EXISTS `app_browser_widget` default_width: &i32,
( default_height: &i32,
`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, is_maximized: &bool,
`app_browser_id` INTEGER NOT NULL, ) -> Result<usize, Error> {
`default_width` INTEGER NOT NULL, tx.execute(
`default_height` INTEGER NOT NULL, "INSERT INTO `app_browser_widget` (
`is_maximized` INTEGER NOT NULL `app_browser_id`,
)", `default_width`,
[], `default_height`,
) `is_maximized`
} ) VALUES (?, ?, ?, ?)",
[
app_browser_id,
&(*default_width as i64),
&(*default_height as i64),
&(*is_maximized as i64),
],
)
}
pub fn add( pub fn records(tx: &Transaction, app_browser_id: &i64) -> Result<Vec<Table>, Error> {
tx: &Transaction, let mut stmt = tx.prepare(
app_browser_id: &i64, "SELECT `id`,
default_width: &i32,
default_height: &i32,
is_maximized: &bool,
) -> Result<usize, Error> {
tx.execute(
"INSERT INTO `app_browser_widget` (
`app_browser_id`, `app_browser_id`,
`default_width`, `default_width`,
`default_height`, `default_height`,
`is_maximized` `is_maximized` FROM `app_browser_widget` WHERE `app_browser_id` = ?",
) VALUES (?, ?, ?, ?)", )?;
[
app_browser_id, let result = stmt.query_map([app_browser_id], |row| {
&(*default_width as i64), Ok(Table {
&(*default_height as i64), id: row.get(0)?,
&(*is_maximized as i64), // app_browser_id: row.get(1)?, not in use
], default_width: row.get(2)?,
) default_height: row.get(3)?,
is_maximized: row.get(4)?,
})
})?;
let mut records = Vec::new();
for record in result {
let table = record?;
records.push(table);
} }
pub fn records(tx: &Transaction, app_browser_id: &i64) -> Result<Vec<Table>, Error> { Ok(records)
let mut stmt = tx.prepare(
"SELECT `id`,
`app_browser_id`,
`default_width`,
`default_height`,
`is_maximized` FROM `app_browser_widget` WHERE `app_browser_id` = ?",
)?;
let result = stmt.query_map([app_browser_id], |row| {
Ok(Table {
id: row.get(0)?,
// app_browser_id: row.get(1)?, not in use
default_width: row.get(2)?,
default_height: row.get(3)?,
is_maximized: row.get(4)?,
})
})?;
let mut records = Vec::new();
for record in result {
let table = record?;
records.push(table);
}
Ok(records)
}
pub fn delete(tx: &Transaction, id: &i64) -> Result<usize, Error> {
tx.execute("DELETE FROM `app_browser_widget` WHERE `id` = ?", [id])
}
/* not in use
pub fn last_insert_id(tx: &Transaction) -> i64 {
tx.last_insert_rowid()
} */
} }
pub fn delete(tx: &Transaction, id: &i64) -> Result<usize, Error> {
tx.execute("DELETE FROM `app_browser_widget` WHERE `id` = ?", [id])
}
/* not in use
pub fn last_insert_id(tx: &Transaction) -> i64 {
tx.last_insert_rowid()
} */

View file

@ -5,7 +5,6 @@ mod tab;
mod widget; mod widget;
use action::Action; use action::Action;
use database::Database;
use header::Header; use header::Header;
use sqlite::Transaction; use sqlite::Transaction;
use tab::Tab; use tab::Tab;
@ -107,10 +106,10 @@ impl Window {
} }
pub fn clean(&self, transaction: &Transaction, app_browser_id: &i64) -> Result<(), String> { pub fn clean(&self, transaction: &Transaction, app_browser_id: &i64) -> Result<(), String> {
match Database::records(transaction, app_browser_id) { match database::records(transaction, app_browser_id) {
Ok(records) => { Ok(records) => {
for record in records { for record in records {
match Database::delete(transaction, &record.id) { match database::delete(transaction, &record.id) {
Ok(_) => { Ok(_) => {
// Delegate clean action to childs // Delegate clean action to childs
self.tab.clean(transaction, &record.id)?; self.tab.clean(transaction, &record.id)?;
@ -126,7 +125,7 @@ impl Window {
} }
pub fn restore(&self, transaction: &Transaction, app_browser_id: &i64) -> Result<(), String> { pub fn restore(&self, transaction: &Transaction, app_browser_id: &i64) -> Result<(), String> {
match Database::records(transaction, app_browser_id) { match database::records(transaction, app_browser_id) {
Ok(records) => { Ok(records) => {
for record in records { for record in records {
// Delegate restore action to childs // Delegate restore action to childs
@ -140,12 +139,12 @@ impl Window {
} }
pub fn save(&self, transaction: &Transaction, app_browser_id: &i64) -> Result<(), String> { pub fn save(&self, transaction: &Transaction, app_browser_id: &i64) -> Result<(), String> {
match Database::add(transaction, app_browser_id) { match database::add(transaction, app_browser_id) {
Ok(_) => { Ok(_) => {
// Delegate save action to childs // Delegate save action to childs
if let Err(e) = self if let Err(e) = self
.tab .tab
.save(transaction, &Database::last_insert_id(transaction)) .save(transaction, &database::last_insert_id(transaction))
{ {
return Err(e.to_string()); return Err(e.to_string());
} }
@ -174,7 +173,7 @@ impl Window {
// Tools // Tools
pub fn migrate(tx: &Transaction) -> Result<(), String> { pub fn migrate(tx: &Transaction) -> Result<(), String> {
// Migrate self components // Migrate self components
if let Err(e) = Database::init(tx) { if let Err(e) = database::init(tx) {
return Err(e.to_string()); return Err(e.to_string());
} }

View file

@ -5,58 +5,52 @@ pub struct Table {
// pub app_browser_id: i64, not in use // pub app_browser_id: i64, not in use
} }
pub struct Database { pub fn init(tx: &Transaction) -> Result<usize, Error> {
// nothing yet.. tx.execute(
"CREATE TABLE IF NOT EXISTS `app_browser_window`
(
`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,
`app_browser_id` INTEGER NOT NULL
)",
[],
)
} }
impl Database { pub fn add(tx: &Transaction, app_browser_id: &i64) -> Result<usize, Error> {
pub fn init(tx: &Transaction) -> Result<usize, Error> { tx.execute(
tx.execute( "INSERT INTO `app_browser_window` (`app_browser_id`) VALUES (?)",
"CREATE TABLE IF NOT EXISTS `app_browser_window` [app_browser_id],
( )
`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, }
`app_browser_id` INTEGER NOT NULL
)", pub fn records(tx: &Transaction, app_browser_id: &i64) -> Result<Vec<Table>, Error> {
[], let mut stmt = tx.prepare(
) "SELECT `id`,
} `app_browser_id` FROM `app_browser_window`
WHERE `app_browser_id` = ?",
pub fn add(tx: &Transaction, app_browser_id: &i64) -> Result<usize, Error> { )?;
tx.execute(
"INSERT INTO `app_browser_window` (`app_browser_id`) VALUES (?)", let result = stmt.query_map([app_browser_id], |row| {
[app_browser_id], Ok(Table {
) id: row.get(0)?,
} // app_browser_id: row.get(1)?, not in use
})
pub fn records(tx: &Transaction, app_browser_id: &i64) -> Result<Vec<Table>, Error> { })?;
let mut stmt = tx.prepare(
"SELECT `id`, let mut records = Vec::new();
`app_browser_id` FROM `app_browser_window`
WHERE `app_browser_id` = ?", for record in result {
)?; let table = record?;
records.push(table);
let result = stmt.query_map([app_browser_id], |row| { }
Ok(Table {
id: row.get(0)?, Ok(records)
// app_browser_id: row.get(1)?, not in use }
})
})?; pub fn delete(tx: &Transaction, id: &i64) -> Result<usize, Error> {
tx.execute("DELETE FROM `app_browser_window` WHERE `id` = ?", [id])
let mut records = Vec::new(); }
for record in result { pub fn last_insert_id(tx: &Transaction) -> i64 {
let table = record?; tx.last_insert_rowid()
records.push(table);
}
Ok(records)
}
pub fn delete(tx: &Transaction, id: &i64) -> Result<usize, Error> {
tx.execute("DELETE FROM `app_browser_window` WHERE `id` = ?", [id])
}
pub fn last_insert_id(tx: &Transaction) -> i64 {
tx.last_insert_rowid()
}
} }

View file

@ -3,7 +3,6 @@ mod item;
mod menu; mod menu;
mod widget; mod widget;
use database::Database;
use item::Item; use item::Item;
use menu::Menu; use menu::Menu;
use widget::Widget; use widget::Widget;
@ -239,10 +238,10 @@ impl Tab {
transaction: &Transaction, transaction: &Transaction,
app_browser_window_id: &i64, app_browser_window_id: &i64,
) -> Result<(), String> { ) -> Result<(), String> {
match Database::records(transaction, app_browser_window_id) { match database::records(transaction, app_browser_window_id) {
Ok(records) => { Ok(records) => {
for record in records { for record in records {
match Database::delete(transaction, &record.id) { match database::delete(transaction, &record.id) {
Ok(_) => { Ok(_) => {
// Delegate clean action to childs // Delegate clean action to childs
for (_, item) in self.index.borrow().iter() { for (_, item) in self.index.borrow().iter() {
@ -264,7 +263,7 @@ impl Tab {
transaction: &Transaction, transaction: &Transaction,
app_browser_window_id: &i64, app_browser_window_id: &i64,
) -> Result<(), String> { ) -> Result<(), String> {
match Database::records(transaction, app_browser_window_id) { match database::records(transaction, app_browser_window_id) {
Ok(records) => { Ok(records) => {
for record in records { for record in records {
match Item::restore( match Item::restore(
@ -297,10 +296,10 @@ impl Tab {
transaction: &Transaction, transaction: &Transaction,
app_browser_window_id: &i64, app_browser_window_id: &i64,
) -> Result<(), String> { ) -> Result<(), String> {
match Database::add(transaction, app_browser_window_id) { match database::add(transaction, app_browser_window_id) {
Ok(_) => { Ok(_) => {
// Delegate save action to childs // Delegate save action to childs
let id = Database::last_insert_id(transaction); let id = database::last_insert_id(transaction);
// Read collected HashMap index // Read collected HashMap index
for (_, item) in self.index.borrow().iter() { for (_, item) in self.index.borrow().iter() {
@ -339,7 +338,7 @@ impl Tab {
// Tools // Tools
pub fn migrate(tx: &Transaction) -> Result<(), String> { pub fn migrate(tx: &Transaction) -> Result<(), String> {
// Migrate self components // Migrate self components
if let Err(e) = Database::init(tx) { if let Err(e) = database::init(tx) {
return Err(e.to_string()); return Err(e.to_string());
} }

View file

@ -5,60 +5,54 @@ pub struct Table {
// pub app_browser_window_id: i64, not in use // pub app_browser_window_id: i64, not in use
} }
pub struct Database { pub fn init(tx: &Transaction) -> Result<usize, Error> {
// nothing yet.. tx.execute(
"CREATE TABLE IF NOT EXISTS `app_browser_window_tab`
(
`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,
`app_browser_window_id` INTEGER NOT NULL
)",
[],
)
} }
impl Database { pub fn add(tx: &Transaction, app_browser_window_id: &i64) -> Result<usize, Error> {
pub fn init(tx: &Transaction) -> Result<usize, Error> { tx.execute(
tx.execute( "INSERT INTO `app_browser_window_tab` (
"CREATE TABLE IF NOT EXISTS `app_browser_window_tab` `app_browser_window_id`
( ) VALUES (?)",
`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, [app_browser_window_id],
`app_browser_window_id` INTEGER NOT NULL )
)", }
[],
) pub fn records(tx: &Transaction, app_browser_window_id: &i64) -> Result<Vec<Table>, Error> {
} let mut stmt = tx.prepare(
"SELECT `id`,
pub fn add(tx: &Transaction, app_browser_window_id: &i64) -> Result<usize, Error> { `app_browser_window_id` FROM `app_browser_window_tab`
tx.execute( WHERE `app_browser_window_id` = ?",
"INSERT INTO `app_browser_window_tab` ( )?;
`app_browser_window_id`
) VALUES (?)", let result = stmt.query_map([app_browser_window_id], |row| {
[app_browser_window_id], Ok(Table {
) id: row.get(0)?,
} // app_browser_window_id: row.get(1)?, not in use
})
pub fn records(tx: &Transaction, app_browser_window_id: &i64) -> Result<Vec<Table>, Error> { })?;
let mut stmt = tx.prepare(
"SELECT `id`, let mut records = Vec::new();
`app_browser_window_id` FROM `app_browser_window_tab`
WHERE `app_browser_window_id` = ?", for record in result {
)?; let table = record?;
records.push(table);
let result = stmt.query_map([app_browser_window_id], |row| { }
Ok(Table {
id: row.get(0)?, Ok(records)
// app_browser_window_id: row.get(1)?, not in use }
})
})?; pub fn delete(tx: &Transaction, id: &i64) -> Result<usize, Error> {
tx.execute("DELETE FROM `app_browser_window_tab` WHERE `id` = ?", [id])
let mut records = Vec::new(); }
for record in result { pub fn last_insert_id(tx: &Transaction) -> i64 {
let table = record?; tx.last_insert_rowid()
records.push(table);
}
Ok(records)
}
pub fn delete(tx: &Transaction, id: &i64) -> Result<usize, Error> {
tx.execute("DELETE FROM `app_browser_window_tab` WHERE `id` = ?", [id])
}
pub fn last_insert_id(tx: &Transaction) -> i64 {
tx.last_insert_rowid()
}
} }

View file

@ -4,7 +4,6 @@ mod page;
mod widget; mod widget;
use action::Action; use action::Action;
use database::Database;
use page::Page; use page::Page;
use widget::Widget; use widget::Widget;
@ -111,10 +110,10 @@ impl Item {
transaction: &Transaction, transaction: &Transaction,
app_browser_window_tab_id: &i64, app_browser_window_tab_id: &i64,
) -> Result<(), String> { ) -> Result<(), String> {
match Database::records(transaction, app_browser_window_tab_id) { match database::records(transaction, app_browser_window_tab_id) {
Ok(records) => { Ok(records) => {
for record in records { for record in records {
match Database::delete(transaction, &record.id) { match database::delete(transaction, &record.id) {
Ok(_) => { Ok(_) => {
// Delegate clean action to the item childs // Delegate clean action to the item childs
self.page.clean(transaction, &record.id)?; self.page.clean(transaction, &record.id)?;
@ -142,7 +141,7 @@ impl Item {
) -> Result<Vec<Rc<Item>>, String> { ) -> Result<Vec<Rc<Item>>, String> {
let mut items = Vec::new(); let mut items = Vec::new();
match Database::records(transaction, app_browser_window_tab_id) { match database::records(transaction, app_browser_window_tab_id) {
Ok(records) => { Ok(records) => {
for record in records { for record in records {
// Construct new item object // Construct new item object
@ -185,7 +184,7 @@ impl Item {
is_selected: &bool, is_selected: &bool,
is_attention: &bool, is_attention: &bool,
) -> Result<(), String> { ) -> Result<(), String> {
match Database::add( match database::add(
transaction, transaction,
app_browser_window_tab_id, app_browser_window_tab_id,
page_position, page_position,
@ -194,7 +193,7 @@ impl Item {
is_attention, is_attention,
) { ) {
Ok(_) => { Ok(_) => {
let id = Database::last_insert_id(transaction); let id = database::last_insert_id(transaction);
// Delegate save action to childs // Delegate save action to childs
self.page.save(transaction, &id)?; self.page.save(transaction, &id)?;
@ -224,7 +223,7 @@ impl Item {
// Tools // Tools
pub fn migrate(tx: &Transaction) -> Result<(), String> { pub fn migrate(tx: &Transaction) -> Result<(), String> {
// Migrate self components // Migrate self components
if let Err(e) = Database::init(tx) { if let Err(e) = database::init(tx) {
return Err(e.to_string()); return Err(e.to_string());
} }

View file

@ -8,92 +8,86 @@ pub struct Table {
pub is_attention: bool, pub is_attention: bool,
} }
pub struct Database { pub fn init(tx: &Transaction) -> Result<usize, Error> {
// nothing yet.. tx.execute(
"CREATE TABLE IF NOT EXISTS `app_browser_window_tab_item`
(
`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,
`app_browser_window_tab_id` INTEGER NOT NULL,
`page_position` INTEGER NOT NULL,
`is_pinned` INTEGER NOT NULL,
`is_selected` INTEGER NOT NULL,
`is_attention` INTEGER NOT NULL
)",
[],
)
} }
impl Database { pub fn add(
pub fn init(tx: &Transaction) -> Result<usize, Error> { tx: &Transaction,
tx.execute( app_browser_window_tab_id: &i64,
"CREATE TABLE IF NOT EXISTS `app_browser_window_tab_item` page_position: &i32,
( is_pinned: &bool,
`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, is_selected: &bool,
`app_browser_window_tab_id` INTEGER NOT NULL, is_attention: &bool,
`page_position` INTEGER NOT NULL, ) -> Result<usize, Error> {
`is_pinned` INTEGER NOT NULL, tx.execute(
`is_selected` INTEGER NOT NULL, "INSERT INTO `app_browser_window_tab_item` (
`is_attention` INTEGER NOT NULL `app_browser_window_tab_id`,
)", `page_position`,
[], `is_pinned`,
) `is_selected`,
} `is_attention`
) VALUES (?, ?, ?, ?, ?)",
[
app_browser_window_tab_id,
&(*page_position as i64),
&(*is_pinned as i64),
&(*is_selected as i64),
&(*is_attention as i64),
],
)
}
pub fn add( pub fn records(tx: &Transaction, app_browser_window_tab_id: &i64) -> Result<Vec<Table>, Error> {
tx: &Transaction, let mut stmt = tx.prepare(
app_browser_window_tab_id: &i64, "SELECT `id`,
page_position: &i32,
is_pinned: &bool,
is_selected: &bool,
is_attention: &bool,
) -> Result<usize, Error> {
tx.execute(
"INSERT INTO `app_browser_window_tab_item` (
`app_browser_window_tab_id`, `app_browser_window_tab_id`,
`page_position`,
`is_pinned`, `is_pinned`,
`is_selected`, `is_selected`,
`is_attention` `is_attention`
) VALUES (?, ?, ?, ?, ?)", FROM `app_browser_window_tab_item`
[ WHERE `app_browser_window_tab_id` = ?
app_browser_window_tab_id, ORDER BY `page_position` ASC", // just order by, no store in struct wanted
&(*page_position as i64), )?;
&(*is_pinned as i64),
&(*is_selected as i64), let result = stmt.query_map([app_browser_window_tab_id], |row| {
&(*is_attention as i64), Ok(Table {
], id: row.get(0)?,
) // app_browser_window_tab_id: row.get(1)?, not in use
is_pinned: row.get(2)?,
is_selected: row.get(3)?,
is_attention: row.get(4)?,
})
})?;
let mut records = Vec::new();
for record in result {
let table = record?;
records.push(table);
} }
pub fn records(tx: &Transaction, app_browser_window_tab_id: &i64) -> Result<Vec<Table>, Error> { Ok(records)
let mut stmt = tx.prepare( }
"SELECT `id`,
`app_browser_window_tab_id`, pub fn delete(tx: &Transaction, id: &i64) -> Result<usize, Error> {
`is_pinned`, tx.execute(
`is_selected`, "DELETE FROM `app_browser_window_tab_item` WHERE `id` = ?",
`is_attention` [id],
FROM `app_browser_window_tab_item` )
WHERE `app_browser_window_tab_id` = ? }
ORDER BY `page_position` ASC", // just order by, no store in struct wanted
)?; pub fn last_insert_id(tx: &Transaction) -> i64 {
tx.last_insert_rowid()
let result = stmt.query_map([app_browser_window_tab_id], |row| {
Ok(Table {
id: row.get(0)?,
// app_browser_window_tab_id: row.get(1)?, not in use
is_pinned: row.get(2)?,
is_selected: row.get(3)?,
is_attention: row.get(4)?,
})
})?;
let mut records = Vec::new();
for record in result {
let table = record?;
records.push(table);
}
Ok(records)
}
pub fn delete(tx: &Transaction, id: &i64) -> Result<usize, Error> {
tx.execute(
"DELETE FROM `app_browser_window_tab_item` WHERE `id` = ?",
[id],
)
}
pub fn last_insert_id(tx: &Transaction) -> i64 {
tx.last_insert_rowid()
}
} }

View file

@ -6,7 +6,6 @@ mod navigation;
mod widget; mod widget;
use content::Content; use content::Content;
use database::Database;
use input::Input; use input::Input;
use meta::{Meta, Status}; use meta::{Meta, Status};
use navigation::Navigation; use navigation::Navigation;
@ -297,10 +296,10 @@ impl Page {
transaction: &Transaction, transaction: &Transaction,
app_browser_window_tab_item_id: &i64, app_browser_window_tab_item_id: &i64,
) -> Result<(), String> { ) -> Result<(), String> {
match Database::records(transaction, app_browser_window_tab_item_id) { match database::records(transaction, app_browser_window_tab_item_id) {
Ok(records) => { Ok(records) => {
for record in records { for record in records {
match Database::delete(transaction, &record.id) { match database::delete(transaction, &record.id) {
Ok(_) => { Ok(_) => {
// Delegate clean action to the item childs // Delegate clean action to the item childs
self.meta.clean(transaction, &record.id)?; self.meta.clean(transaction, &record.id)?;
@ -325,7 +324,7 @@ impl Page {
self.meta.set_status(Status::SessionRestore); self.meta.set_status(Status::SessionRestore);
// Begin page restore // Begin page restore
match Database::records(transaction, app_browser_window_tab_item_id) { match database::records(transaction, app_browser_window_tab_item_id) {
Ok(records) => { Ok(records) => {
for record in records { for record in records {
// Delegate restore action to the item childs // Delegate restore action to the item childs
@ -347,9 +346,9 @@ impl Page {
transaction: &Transaction, transaction: &Transaction,
app_browser_window_tab_item_id: &i64, app_browser_window_tab_item_id: &i64,
) -> Result<(), String> { ) -> Result<(), String> {
match Database::add(transaction, app_browser_window_tab_item_id) { match database::add(transaction, app_browser_window_tab_item_id) {
Ok(_) => { Ok(_) => {
let id = Database::last_insert_id(transaction); let id = database::last_insert_id(transaction);
// Delegate save action to childs // Delegate save action to childs
self.meta.save(transaction, &id)?; self.meta.save(transaction, &id)?;
@ -931,7 +930,7 @@ impl Page {
pub fn migrate(tx: &Transaction) -> Result<(), String> { pub fn migrate(tx: &Transaction) -> Result<(), String> {
// Migrate self components // Migrate self components
if let Err(e) = Database::init(tx) { if let Err(e) = database::init(tx) {
return Err(e.to_string()); return Err(e.to_string());
} }

View file

@ -5,67 +5,61 @@ pub struct Table {
// pub app_browser_window_tab_item_id: i64, not in use // pub app_browser_window_tab_item_id: i64, not in use
} }
pub struct Database { pub fn init(tx: &Transaction) -> Result<usize, Error> {
// nothing yet.. tx.execute(
"CREATE TABLE IF NOT EXISTS `app_browser_window_tab_item_page`
(
`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,
`app_browser_window_tab_item_id` INTEGER NOT NULL
)",
[],
)
} }
impl Database { pub fn add(tx: &Transaction, app_browser_window_tab_item_id: &i64) -> Result<usize, Error> {
pub fn init(tx: &Transaction) -> Result<usize, Error> { tx.execute(
tx.execute( "INSERT INTO `app_browser_window_tab_item_page` (
"CREATE TABLE IF NOT EXISTS `app_browser_window_tab_item_page` `app_browser_window_tab_item_id`
( ) VALUES (?)",
`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, [app_browser_window_tab_item_id],
`app_browser_window_tab_item_id` INTEGER NOT NULL )
)", }
[],
)
}
pub fn add(tx: &Transaction, app_browser_window_tab_item_id: &i64) -> Result<usize, Error> { pub fn records(
tx.execute( tx: &Transaction,
"INSERT INTO `app_browser_window_tab_item_page` ( app_browser_window_tab_item_id: &i64,
) -> Result<Vec<Table>, Error> {
let mut stmt = tx.prepare(
"SELECT `id`,
`app_browser_window_tab_item_id` `app_browser_window_tab_item_id`
) VALUES (?)", FROM `app_browser_window_tab_item_page`
[app_browser_window_tab_item_id], WHERE `app_browser_window_tab_item_id` = ?",
) )?;
let result = stmt.query_map([app_browser_window_tab_item_id], |row| {
Ok(Table {
id: row.get(0)?,
// app_browser_window_tab_item_id: row.get(1)?, not in use
})
})?;
let mut records = Vec::new();
for record in result {
let table = record?;
records.push(table);
} }
pub fn records( Ok(records)
tx: &Transaction, }
app_browser_window_tab_item_id: &i64,
) -> Result<Vec<Table>, Error> { pub fn delete(tx: &Transaction, id: &i64) -> Result<usize, Error> {
let mut stmt = tx.prepare( tx.execute(
"SELECT `id`, "DELETE FROM `app_browser_window_tab_item_page` WHERE `id` = ?",
`app_browser_window_tab_item_id` [id],
FROM `app_browser_window_tab_item_page` )
WHERE `app_browser_window_tab_item_id` = ?", }
)?;
pub fn last_insert_id(tx: &Transaction) -> i64 {
let result = stmt.query_map([app_browser_window_tab_item_id], |row| { tx.last_insert_rowid()
Ok(Table {
id: row.get(0)?,
// app_browser_window_tab_item_id: row.get(1)?, not in use
})
})?;
let mut records = Vec::new();
for record in result {
let table = record?;
records.push(table);
}
Ok(records)
}
pub fn delete(tx: &Transaction, id: &i64) -> Result<usize, Error> {
tx.execute(
"DELETE FROM `app_browser_window_tab_item_page` WHERE `id` = ?",
[id],
)
}
pub fn last_insert_id(tx: &Transaction) -> i64 {
tx.last_insert_rowid()
}
} }

View file

@ -1,7 +1,6 @@
mod database; mod database;
mod redirect; mod redirect;
use database::Database;
use redirect::Redirect; use redirect::Redirect;
use gtk::glib::GString; use gtk::glib::GString;
@ -112,10 +111,10 @@ impl Meta {
transaction: &Transaction, transaction: &Transaction,
app_browser_window_tab_page_id: &i64, app_browser_window_tab_page_id: &i64,
) -> Result<(), String> { ) -> Result<(), String> {
match Database::records(transaction, app_browser_window_tab_page_id) { match database::records(transaction, app_browser_window_tab_page_id) {
Ok(records) => { Ok(records) => {
for record in records { for record in records {
match Database::delete(transaction, &record.id) { match database::delete(transaction, &record.id) {
Ok(_) => { Ok(_) => {
// Delegate clean action to the item childs // Delegate clean action to the item childs
// nothing yet.. // nothing yet..
@ -135,7 +134,7 @@ impl Meta {
transaction: &Transaction, transaction: &Transaction,
app_browser_window_tab_page_id: &i64, app_browser_window_tab_page_id: &i64,
) -> Result<(), String> { ) -> Result<(), String> {
match Database::records(transaction, app_browser_window_tab_page_id) { match database::records(transaction, app_browser_window_tab_page_id) {
Ok(records) => { Ok(records) => {
for record in records { for record in records {
// Record value can be stored as NULL // Record value can be stored as NULL
@ -161,7 +160,7 @@ impl Meta {
// Keep value in memory until operation complete // Keep value in memory until operation complete
let title = self.title(); let title = self.title();
match Database::add( match database::add(
transaction, transaction,
app_browser_window_tab_page_id, app_browser_window_tab_page_id,
match title.is_empty() { match title.is_empty() {
@ -170,7 +169,7 @@ impl Meta {
}, },
) { ) {
Ok(_) => { Ok(_) => {
// let id = Database::last_insert_id(transaction); // let id = database::last_insert_id(transaction);
// Delegate save action to childs // Delegate save action to childs
// nothing yet.. // nothing yet..
@ -185,7 +184,7 @@ impl Meta {
// Tools // Tools
pub fn migrate(tx: &Transaction) -> Result<(), String> { pub fn migrate(tx: &Transaction) -> Result<(), String> {
// Migrate self components // Migrate self components
if let Err(e) = Database::init(tx) { if let Err(e) = database::init(tx) {
return Err(e.to_string()); return Err(e.to_string());
} }

View file

@ -6,76 +6,70 @@ pub struct Table {
pub title: Option<String>, // can be stored as NULL pub title: Option<String>, // can be stored as NULL
} }
pub struct Database { pub fn init(tx: &Transaction) -> Result<usize, Error> {
// nothing yet.. tx.execute(
"CREATE TABLE IF NOT EXISTS `app_browser_window_tab_item_page_meta`
(
`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,
`app_browser_window_tab_item_page_id` INTEGER NOT NULL,
`title` VARCHAR(1024)
)",
[],
)
} }
impl Database { pub fn add(
pub fn init(tx: &Transaction) -> Result<usize, Error> { tx: &Transaction,
tx.execute( app_browser_window_tab_item_page_id: &i64,
"CREATE TABLE IF NOT EXISTS `app_browser_window_tab_item_page_meta` title: Option<&str>,
( ) -> Result<usize, Error> {
`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, tx.execute(
`app_browser_window_tab_item_page_id` INTEGER NOT NULL, "INSERT INTO `app_browser_window_tab_item_page_meta` (
`title` VARCHAR(1024) `app_browser_window_tab_item_page_id`,
)", `title`
[], ) VALUES (?, ?)",
) (app_browser_window_tab_item_page_id, title),
} )
}
pub fn add( pub fn records(
tx: &Transaction, tx: &Transaction,
app_browser_window_tab_item_page_id: &i64, app_browser_window_tab_item_page_id: &i64,
title: Option<&str>, ) -> Result<Vec<Table>, Error> {
) -> Result<usize, Error> { let mut stmt = tx.prepare(
tx.execute( "SELECT `id`,
"INSERT INTO `app_browser_window_tab_item_page_meta` (
`app_browser_window_tab_item_page_id`, `app_browser_window_tab_item_page_id`,
`title` `title`
) VALUES (?, ?)", FROM `app_browser_window_tab_item_page_meta`
(app_browser_window_tab_item_page_id, title), WHERE `app_browser_window_tab_item_page_id` = ?",
) )?;
let result = stmt.query_map([app_browser_window_tab_item_page_id], |row| {
Ok(Table {
id: row.get(0)?,
// app_browser_window_tab_item_page_id: row.get(1)?, not in use
title: row.get(2)?,
})
})?;
let mut records = Vec::new();
for record in result {
let table = record?;
records.push(table);
} }
pub fn records( Ok(records)
tx: &Transaction,
app_browser_window_tab_item_page_id: &i64,
) -> Result<Vec<Table>, Error> {
let mut stmt = tx.prepare(
"SELECT `id`,
`app_browser_window_tab_item_page_id`,
`title`
FROM `app_browser_window_tab_item_page_meta`
WHERE `app_browser_window_tab_item_page_id` = ?",
)?;
let result = stmt.query_map([app_browser_window_tab_item_page_id], |row| {
Ok(Table {
id: row.get(0)?,
// app_browser_window_tab_item_page_id: row.get(1)?, not in use
title: row.get(2)?,
})
})?;
let mut records = Vec::new();
for record in result {
let table = record?;
records.push(table);
}
Ok(records)
}
pub fn delete(tx: &Transaction, id: &i64) -> Result<usize, Error> {
tx.execute(
"DELETE FROM `app_browser_window_tab_item_page_meta` WHERE `id` = ?",
[id],
)
}
/* not in use
pub fn last_insert_id(tx: &Transaction) -> i64 {
tx.last_insert_rowid()
} */
} }
pub fn delete(tx: &Transaction, id: &i64) -> Result<usize, Error> {
tx.execute(
"DELETE FROM `app_browser_window_tab_item_page_meta` WHERE `id` = ?",
[id],
)
}
/* not in use
pub fn last_insert_id(tx: &Transaction) -> i64 {
tx.last_insert_rowid()
} */

View file

@ -7,7 +7,6 @@ mod request;
mod widget; mod widget;
use bookmark::Bookmark; use bookmark::Bookmark;
use database::Database;
use history::History; use history::History;
use home::Home; use home::Home;
use reload::Reload; use reload::Reload;
@ -79,10 +78,10 @@ impl Navigation {
transaction: &Transaction, transaction: &Transaction,
app_browser_window_tab_item_page_id: &i64, app_browser_window_tab_item_page_id: &i64,
) -> Result<(), String> { ) -> Result<(), String> {
match Database::records(transaction, app_browser_window_tab_item_page_id) { match database::records(transaction, app_browser_window_tab_item_page_id) {
Ok(records) => { Ok(records) => {
for record in records { for record in records {
match Database::delete(transaction, &record.id) { match database::delete(transaction, &record.id) {
Ok(_) => { Ok(_) => {
// Delegate clean action to the item childs // Delegate clean action to the item childs
self.request.clean(transaction, &record.id)?; self.request.clean(transaction, &record.id)?;
@ -102,7 +101,7 @@ impl Navigation {
transaction: &Transaction, transaction: &Transaction,
app_browser_window_tab_item_page_id: &i64, app_browser_window_tab_item_page_id: &i64,
) -> Result<(), String> { ) -> Result<(), String> {
match Database::records(transaction, app_browser_window_tab_item_page_id) { match database::records(transaction, app_browser_window_tab_item_page_id) {
Ok(records) => { Ok(records) => {
for record in records { for record in records {
// Delegate restore action to the item childs // Delegate restore action to the item childs
@ -120,9 +119,9 @@ impl Navigation {
transaction: &Transaction, transaction: &Transaction,
app_browser_window_tab_item_page_id: &i64, app_browser_window_tab_item_page_id: &i64,
) -> Result<(), String> { ) -> Result<(), String> {
match Database::add(transaction, app_browser_window_tab_item_page_id) { match database::add(transaction, app_browser_window_tab_item_page_id) {
Ok(_) => { Ok(_) => {
let id = Database::last_insert_id(transaction); let id = database::last_insert_id(transaction);
// Delegate save action to childs // Delegate save action to childs
self.request.save(transaction, &id)?; self.request.save(transaction, &id)?;
@ -165,7 +164,7 @@ impl Navigation {
// Tools // Tools
pub fn migrate(tx: &Transaction) -> Result<(), String> { pub fn migrate(tx: &Transaction) -> Result<(), String> {
// Migrate self components // Migrate self components
if let Err(e) = Database::init(tx) { if let Err(e) = database::init(tx) {
return Err(e.to_string()); return Err(e.to_string());
} }

View file

@ -5,70 +5,61 @@ pub struct Table {
// pub app_browser_window_tab_item_page_id: i64, not in use // pub app_browser_window_tab_item_page_id: i64, not in use
} }
pub struct Database { pub fn init(tx: &Transaction) -> Result<usize, Error> {
// nothing yet.. tx.execute(
"CREATE TABLE IF NOT EXISTS `app_browser_window_tab_item_page_navigation`
(
`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,
`app_browser_window_tab_item_page_id` INTEGER NOT NULL
)",
[],
)
} }
impl Database { pub fn add(tx: &Transaction, app_browser_window_tab_item_page_id: &i64) -> Result<usize, Error> {
pub fn init(tx: &Transaction) -> Result<usize, Error> { tx.execute(
tx.execute( "INSERT INTO `app_browser_window_tab_item_page_navigation` (
"CREATE TABLE IF NOT EXISTS `app_browser_window_tab_item_page_navigation` `app_browser_window_tab_item_page_id`
( ) VALUES (?)",
`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, [app_browser_window_tab_item_page_id],
`app_browser_window_tab_item_page_id` INTEGER NOT NULL )
)", }
[],
)
}
pub fn add( pub fn records(
tx: &Transaction, tx: &Transaction,
app_browser_window_tab_item_page_id: &i64, app_browser_window_tab_item_page_id: &i64,
) -> Result<usize, Error> { ) -> Result<Vec<Table>, Error> {
tx.execute( let mut stmt = tx.prepare(
"INSERT INTO `app_browser_window_tab_item_page_navigation` ( "SELECT `id`,
`app_browser_window_tab_item_page_id` `app_browser_window_tab_item_page_id`
) VALUES (?)", FROM `app_browser_window_tab_item_page_navigation`
[app_browser_window_tab_item_page_id], WHERE `app_browser_window_tab_item_page_id` = ?",
) )?;
let result = stmt.query_map([app_browser_window_tab_item_page_id], |row| {
Ok(Table {
id: row.get(0)?,
// app_browser_window_tab_item_page_id: row.get(1)?, not in use
})
})?;
let mut records = Vec::new();
for record in result {
let table = record?;
records.push(table);
} }
pub fn records( Ok(records)
tx: &Transaction, }
app_browser_window_tab_item_page_id: &i64,
) -> Result<Vec<Table>, Error> { pub fn delete(tx: &Transaction, id: &i64) -> Result<usize, Error> {
let mut stmt = tx.prepare( tx.execute(
"SELECT `id`, "DELETE FROM `app_browser_window_tab_item_page_navigation` WHERE `id` = ?",
`app_browser_window_tab_item_page_id` [id],
FROM `app_browser_window_tab_item_page_navigation` )
WHERE `app_browser_window_tab_item_page_id` = ?", }
)?;
pub fn last_insert_id(tx: &Transaction) -> i64 {
let result = stmt.query_map([app_browser_window_tab_item_page_id], |row| { tx.last_insert_rowid()
Ok(Table {
id: row.get(0)?,
// app_browser_window_tab_item_page_id: row.get(1)?, not in use
})
})?;
let mut records = Vec::new();
for record in result {
let table = record?;
records.push(table);
}
Ok(records)
}
pub fn delete(tx: &Transaction, id: &i64) -> Result<usize, Error> {
tx.execute(
"DELETE FROM `app_browser_window_tab_item_page_navigation` WHERE `id` = ?",
[id],
)
}
pub fn last_insert_id(tx: &Transaction) -> i64 {
tx.last_insert_rowid()
}
} }

View file

@ -1,7 +1,6 @@
mod database; mod database;
mod widget; mod widget;
use database::Database;
use widget::Widget; use widget::Widget;
use crate::app::browser::{window::tab::item::Action as TabAction, Action as BrowserAction}; use crate::app::browser::{window::tab::item::Action as TabAction, Action as BrowserAction};
@ -39,10 +38,10 @@ impl Request {
transaction: &Transaction, transaction: &Transaction,
app_browser_window_tab_item_page_navigation_id: &i64, app_browser_window_tab_item_page_navigation_id: &i64,
) -> Result<(), String> { ) -> Result<(), String> {
match Database::records(transaction, app_browser_window_tab_item_page_navigation_id) { match database::records(transaction, app_browser_window_tab_item_page_navigation_id) {
Ok(records) => { Ok(records) => {
for record in records { for record in records {
match Database::delete(transaction, &record.id) { match database::delete(transaction, &record.id) {
Ok(_) => { Ok(_) => {
// Delegate clean action to the item childs // Delegate clean action to the item childs
self.widget.clean(transaction, &record.id)?; self.widget.clean(transaction, &record.id)?;
@ -62,7 +61,7 @@ impl Request {
transaction: &Transaction, transaction: &Transaction,
app_browser_window_tab_item_page_navigation_id: &i64, app_browser_window_tab_item_page_navigation_id: &i64,
) -> Result<(), String> { ) -> Result<(), String> {
match Database::records(transaction, app_browser_window_tab_item_page_navigation_id) { match database::records(transaction, app_browser_window_tab_item_page_navigation_id) {
Ok(records) => { Ok(records) => {
for record in records { for record in records {
// Delegate restore action to the item childs // Delegate restore action to the item childs
@ -80,9 +79,9 @@ impl Request {
transaction: &Transaction, transaction: &Transaction,
app_browser_window_tab_item_page_navigation_id: &i64, app_browser_window_tab_item_page_navigation_id: &i64,
) -> Result<(), String> { ) -> Result<(), String> {
match Database::add(transaction, app_browser_window_tab_item_page_navigation_id) { match database::add(transaction, app_browser_window_tab_item_page_navigation_id) {
Ok(_) => { Ok(_) => {
let id = Database::last_insert_id(transaction); let id = database::last_insert_id(transaction);
// Delegate save action to childs // Delegate save action to childs
self.widget.save(transaction, &id)?; self.widget.save(transaction, &id)?;
@ -110,7 +109,7 @@ impl Request {
// Tools // Tools
pub fn migrate(tx: &Transaction) -> Result<(), String> { pub fn migrate(tx: &Transaction) -> Result<(), String> {
// Migrate self components // Migrate self components
if let Err(e) = Database::init(tx) { if let Err(e) = database::init(tx) {
return Err(e.to_string()); return Err(e.to_string());
} }

View file

@ -5,70 +5,64 @@ pub struct Table {
// pub app_browser_window_tab_item_page_navigation_id: i64, not in use // pub app_browser_window_tab_item_page_navigation_id: i64, not in use
} }
pub struct Database { pub fn init(tx: &Transaction) -> Result<usize, Error> {
// nothing yet.. tx.execute(
"CREATE TABLE IF NOT EXISTS `app_browser_window_tab_item_page_navigation_request`
(
`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,
`app_browser_window_tab_item_page_navigation_id` INTEGER NOT NULL
)",
[],
)
} }
impl Database { pub fn add(
pub fn init(tx: &Transaction) -> Result<usize, Error> { tx: &Transaction,
tx.execute( app_browser_window_tab_item_page_navigation_id: &i64,
"CREATE TABLE IF NOT EXISTS `app_browser_window_tab_item_page_navigation_request` ) -> Result<usize, Error> {
( tx.execute(
`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "INSERT INTO `app_browser_window_tab_item_page_navigation_request` (
`app_browser_window_tab_item_page_navigation_id` INTEGER NOT NULL `app_browser_window_tab_item_page_navigation_id`
)", ) VALUES (?)",
[], [app_browser_window_tab_item_page_navigation_id],
) )
} }
pub fn add( pub fn records(
tx: &Transaction, tx: &Transaction,
app_browser_window_tab_item_page_navigation_id: &i64, app_browser_window_tab_item_page_navigation_id: &i64,
) -> Result<usize, Error> { ) -> Result<Vec<Table>, Error> {
tx.execute( let mut stmt = tx.prepare(
"INSERT INTO `app_browser_window_tab_item_page_navigation_request` ( "SELECT `id`,
`app_browser_window_tab_item_page_navigation_id` `app_browser_window_tab_item_page_navigation_id`
) VALUES (?)", FROM `app_browser_window_tab_item_page_navigation_request`
[app_browser_window_tab_item_page_navigation_id], WHERE `app_browser_window_tab_item_page_navigation_id` = ?",
) )?;
let result = stmt.query_map([app_browser_window_tab_item_page_navigation_id], |row| {
Ok(Table {
id: row.get(0)?,
// app_browser_window_tab_item_page_navigation_id: row.get(1)?, not in use
})
})?;
let mut records = Vec::new();
for record in result {
let table = record?;
records.push(table);
} }
pub fn records( Ok(records)
tx: &Transaction, }
app_browser_window_tab_item_page_navigation_id: &i64,
) -> Result<Vec<Table>, Error> { pub fn delete(tx: &Transaction, id: &i64) -> Result<usize, Error> {
let mut stmt = tx.prepare( tx.execute(
"SELECT `id`, "DELETE FROM `app_browser_window_tab_item_page_navigation_request` WHERE `id` = ?",
`app_browser_window_tab_item_page_navigation_id` [id],
FROM `app_browser_window_tab_item_page_navigation_request` )
WHERE `app_browser_window_tab_item_page_navigation_id` = ?", }
)?;
pub fn last_insert_id(tx: &Transaction) -> i64 {
let result = stmt.query_map([app_browser_window_tab_item_page_navigation_id], |row| { tx.last_insert_rowid()
Ok(Table {
id: row.get(0)?,
// app_browser_window_tab_item_page_navigation_id: row.get(1)?, not in use
})
})?;
let mut records = Vec::new();
for record in result {
let table = record?;
records.push(table);
}
Ok(records)
}
pub fn delete(tx: &Transaction, id: &i64) -> Result<usize, Error> {
tx.execute(
"DELETE FROM `app_browser_window_tab_item_page_navigation_request` WHERE `id` = ?",
[id],
)
}
pub fn last_insert_id(tx: &Transaction) -> i64 {
tx.last_insert_rowid()
}
} }

View file

@ -1,7 +1,5 @@
mod database; mod database;
use database::Database;
use crate::app::browser::{window::tab::item::Action as TabAction, Action as BrowserAction}; use crate::app::browser::{window::tab::item::Action as TabAction, Action as BrowserAction};
use gtk::{ use gtk::{
glib::{timeout_add_local, ControlFlow, SourceId}, glib::{timeout_add_local, ControlFlow, SourceId},
@ -82,13 +80,13 @@ impl Widget {
transaction: &Transaction, transaction: &Transaction,
app_browser_window_tab_item_page_navigation_request_id: &i64, app_browser_window_tab_item_page_navigation_request_id: &i64,
) -> Result<(), String> { ) -> Result<(), String> {
match Database::records( match database::records(
transaction, transaction,
app_browser_window_tab_item_page_navigation_request_id, app_browser_window_tab_item_page_navigation_request_id,
) { ) {
Ok(records) => { Ok(records) => {
for record in records { for record in records {
match Database::delete(transaction, &record.id) { match database::delete(transaction, &record.id) {
Ok(_) => { Ok(_) => {
// Delegate clean action to the item childs // Delegate clean action to the item childs
// nothing yet.. // nothing yet..
@ -108,7 +106,7 @@ impl Widget {
transaction: &Transaction, transaction: &Transaction,
app_browser_window_tab_item_page_navigation_request_id: &i64, app_browser_window_tab_item_page_navigation_request_id: &i64,
) -> Result<(), String> { ) -> Result<(), String> {
match Database::records( match database::records(
transaction, transaction,
app_browser_window_tab_item_page_navigation_request_id, app_browser_window_tab_item_page_navigation_request_id,
) { ) {
@ -136,7 +134,7 @@ impl Widget {
// Keep value in memory until operation complete // Keep value in memory until operation complete
let text = self.gobject.text(); let text = self.gobject.text();
match Database::add( match database::add(
transaction, transaction,
app_browser_window_tab_item_page_navigation_request_id, app_browser_window_tab_item_page_navigation_request_id,
match text.is_empty() { match text.is_empty() {
@ -145,7 +143,7 @@ impl Widget {
}, },
) { ) {
Ok(_) => { Ok(_) => {
// let id = Database::last_insert_id(transaction); // let id = database::last_insert_id(transaction);
// Delegate save action to childs // Delegate save action to childs
// nothing yet.. // nothing yet..
@ -211,7 +209,7 @@ impl Widget {
// Tools // Tools
pub fn migrate(tx: &Transaction) -> Result<(), String> { pub fn migrate(tx: &Transaction) -> Result<(), String> {
// Migrate self components // Migrate self components
if let Err(e) = Database::init(tx) { if let Err(e) = database::init(tx) {
return Err(e.to_string()); return Err(e.to_string());
} }

View file

@ -6,79 +6,73 @@ pub struct Table {
pub text: Option<String>, // can be stored as NULL pub text: Option<String>, // can be stored as NULL
} }
pub struct Database { pub fn init(tx: &Transaction) -> Result<usize, Error> {
// nothing yet.. tx.execute(
"CREATE TABLE IF NOT EXISTS `app_browser_window_tab_item_page_navigation_request_widget`
(
`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,
`app_browser_window_tab_item_page_navigation_request_id` INTEGER NOT NULL,
`text` VARCHAR(1024)
)",
[],
)
} }
impl Database { pub fn add(
pub fn init(tx: &Transaction) -> Result<usize, Error> { tx: &Transaction,
tx.execute( app_browser_window_tab_item_page_navigation_request_id: &i64,
"CREATE TABLE IF NOT EXISTS `app_browser_window_tab_item_page_navigation_request_widget` text: Option<&str>,
( ) -> Result<usize, Error> {
`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, tx.execute(
`app_browser_window_tab_item_page_navigation_request_id` INTEGER NOT NULL, "INSERT INTO `app_browser_window_tab_item_page_navigation_request_widget` (
`text` VARCHAR(1024) `app_browser_window_tab_item_page_navigation_request_id`,
)", `text`
[], ) VALUES (?, ?)",
) (app_browser_window_tab_item_page_navigation_request_id, text),
} )
}
pub fn add( pub fn records(
tx: &Transaction, tx: &Transaction,
app_browser_window_tab_item_page_navigation_request_id: &i64, app_browser_window_tab_item_page_navigation_request_id: &i64,
text: Option<&str>, ) -> Result<Vec<Table>, Error> {
) -> Result<usize, Error> { let mut stmt = tx.prepare(
tx.execute( "SELECT `id`,
"INSERT INTO `app_browser_window_tab_item_page_navigation_request_widget` (
`app_browser_window_tab_item_page_navigation_request_id`, `app_browser_window_tab_item_page_navigation_request_id`,
`text` `text`
) VALUES (?, ?)", FROM `app_browser_window_tab_item_page_navigation_request_widget`
(app_browser_window_tab_item_page_navigation_request_id, text), WHERE `app_browser_window_tab_item_page_navigation_request_id` = ?",
) )?;
let result = stmt.query_map(
[app_browser_window_tab_item_page_navigation_request_id],
|row| {
Ok(Table {
id: row.get(0)?,
// app_browser_window_tab_item_page_navigation_request_id: row.get(1)?, not in use
text: row.get(2)?,
})
},
)?;
let mut records = Vec::new();
for record in result {
let table = record?;
records.push(table);
} }
pub fn records( Ok(records)
tx: &Transaction,
app_browser_window_tab_item_page_navigation_request_id: &i64,
) -> Result<Vec<Table>, Error> {
let mut stmt = tx.prepare(
"SELECT `id`,
`app_browser_window_tab_item_page_navigation_request_id`,
`text`
FROM `app_browser_window_tab_item_page_navigation_request_widget`
WHERE `app_browser_window_tab_item_page_navigation_request_id` = ?",
)?;
let result = stmt.query_map(
[app_browser_window_tab_item_page_navigation_request_id],
|row| {
Ok(Table {
id: row.get(0)?,
// app_browser_window_tab_item_page_navigation_request_id: row.get(1)?, not in use
text: row.get(2)?,
})
},
)?;
let mut records = Vec::new();
for record in result {
let table = record?;
records.push(table);
}
Ok(records)
}
pub fn delete(tx: &Transaction, id: &i64) -> Result<usize, Error> {
tx.execute(
"DELETE FROM `app_browser_window_tab_item_page_navigation_request_widget` WHERE `id` = ?",
[id],
)
}
/* not in use
pub fn last_insert_id(tx: &Transaction) -> i64 {
tx.last_insert_rowid()
} */
} }
pub fn delete(tx: &Transaction, id: &i64) -> Result<usize, Error> {
tx.execute(
"DELETE FROM `app_browser_window_tab_item_page_navigation_request_widget` WHERE `id` = ?",
[id],
)
}
/* not in use
pub fn last_insert_id(tx: &Transaction) -> i64 {
tx.last_insert_rowid()
} */

View file

@ -1,7 +1,5 @@
mod database; mod database;
use database::Database;
use crate::app::browser::window::action::Position; use crate::app::browser::window::action::Position;
use adw::{TabPage, TabView}; use adw::{TabPage, TabView};
use gtk::prelude::IsA; use gtk::prelude::IsA;
@ -62,10 +60,10 @@ impl Widget {
transaction: &Transaction, transaction: &Transaction,
app_browser_window_tab_item_id: &i64, app_browser_window_tab_item_id: &i64,
) -> Result<(), String> { ) -> Result<(), String> {
match Database::records(transaction, app_browser_window_tab_item_id) { match database::records(transaction, app_browser_window_tab_item_id) {
Ok(records) => { Ok(records) => {
for record in records { for record in records {
match Database::delete(transaction, &record.id) { match database::delete(transaction, &record.id) {
Ok(_) => { Ok(_) => {
// Delegate clean action to the item childs // Delegate clean action to the item childs
// nothing yet.. // nothing yet..
@ -85,7 +83,7 @@ impl Widget {
transaction: &Transaction, transaction: &Transaction,
app_browser_window_tab_item_id: &i64, app_browser_window_tab_item_id: &i64,
) -> Result<(), String> { ) -> Result<(), String> {
match Database::records(transaction, app_browser_window_tab_item_id) { match database::records(transaction, app_browser_window_tab_item_id) {
Ok(records) => { Ok(records) => {
for record in records { for record in records {
// Record value can be stored as NULL // Record value can be stored as NULL
@ -111,7 +109,7 @@ impl Widget {
// Keep value in memory until operation complete // Keep value in memory until operation complete
let title = self.gobject.title(); let title = self.gobject.title();
match Database::add( match database::add(
transaction, transaction,
app_browser_window_tab_item_id, app_browser_window_tab_item_id,
match title.is_empty() { match title.is_empty() {
@ -120,7 +118,7 @@ impl Widget {
}, },
) { ) {
Ok(_) => { Ok(_) => {
// let id = Database::last_insert_id(transaction); // let id = database::last_insert_id(transaction);
// Delegate save action to childs // Delegate save action to childs
// nothing yet.. // nothing yet..
@ -142,7 +140,7 @@ impl Widget {
pub fn migrate(tx: &Transaction) -> Result<(), String> { pub fn migrate(tx: &Transaction) -> Result<(), String> {
// Migrate self components // Migrate self components
if let Err(e) = Database::init(tx) { if let Err(e) = database::init(tx) {
return Err(e.to_string()); return Err(e.to_string());
} }

View file

@ -6,76 +6,70 @@ pub struct Table {
pub title: Option<String>, // can be stored as NULL pub title: Option<String>, // can be stored as NULL
} }
pub struct Database { pub fn init(tx: &Transaction) -> Result<usize, Error> {
// nothing yet.. tx.execute(
"CREATE TABLE IF NOT EXISTS `app_browser_window_tab_item_widget`
(
`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,
`app_browser_window_tab_item_id` INTEGER NOT NULL,
`title` VARCHAR(1024)
)",
[],
)
} }
impl Database { pub fn add(
pub fn init(tx: &Transaction) -> Result<usize, Error> { tx: &Transaction,
tx.execute( app_browser_window_tab_item_id: &i64,
"CREATE TABLE IF NOT EXISTS `app_browser_window_tab_item_widget` title: Option<&str>,
( ) -> Result<usize, Error> {
`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, tx.execute(
`app_browser_window_tab_item_id` INTEGER NOT NULL, "INSERT INTO `app_browser_window_tab_item_widget` (
`title` VARCHAR(1024) `app_browser_window_tab_item_id`,
)", `title`
[], ) VALUES (?, ?)",
) (app_browser_window_tab_item_id, title),
} )
}
pub fn add( pub fn records(
tx: &Transaction, tx: &Transaction,
app_browser_window_tab_item_id: &i64, app_browser_window_tab_item_id: &i64,
title: Option<&str>, ) -> Result<Vec<Table>, Error> {
) -> Result<usize, Error> { let mut stmt = tx.prepare(
tx.execute( "SELECT `id`,
"INSERT INTO `app_browser_window_tab_item_widget` (
`app_browser_window_tab_item_id`, `app_browser_window_tab_item_id`,
`title` `title`
) VALUES (?, ?)", FROM `app_browser_window_tab_item_widget`
(app_browser_window_tab_item_id, title), WHERE `app_browser_window_tab_item_id` = ?",
) )?;
let result = stmt.query_map([app_browser_window_tab_item_id], |row| {
Ok(Table {
id: row.get(0)?,
// app_browser_window_tab_item_id: row.get(1)?, not in use
title: row.get(2)?,
})
})?;
let mut records = Vec::new();
for record in result {
let table = record?;
records.push(table);
} }
pub fn records( Ok(records)
tx: &Transaction,
app_browser_window_tab_item_id: &i64,
) -> Result<Vec<Table>, Error> {
let mut stmt = tx.prepare(
"SELECT `id`,
`app_browser_window_tab_item_id`,
`title`
FROM `app_browser_window_tab_item_widget`
WHERE `app_browser_window_tab_item_id` = ?",
)?;
let result = stmt.query_map([app_browser_window_tab_item_id], |row| {
Ok(Table {
id: row.get(0)?,
// app_browser_window_tab_item_id: row.get(1)?, not in use
title: row.get(2)?,
})
})?;
let mut records = Vec::new();
for record in result {
let table = record?;
records.push(table);
}
Ok(records)
}
pub fn delete(tx: &Transaction, id: &i64) -> Result<usize, Error> {
tx.execute(
"DELETE FROM `app_browser_window_tab_item_widget` WHERE `id` = ?",
[id],
)
}
/* not in use
pub fn last_insert_id(tx: &Transaction) -> i64 {
tx.last_insert_rowid()
} */
} }
pub fn delete(tx: &Transaction, id: &i64) -> Result<usize, Error> {
tx.execute(
"DELETE FROM `app_browser_window_tab_item_widget` WHERE `id` = ?",
[id],
)
}
/* not in use
pub fn last_insert_id(tx: &Transaction) -> i64 {
tx.last_insert_rowid()
} */

View file

@ -4,44 +4,38 @@ pub struct Table {
pub id: i64, pub id: i64,
} }
pub struct Database { pub fn init(tx: &Transaction) -> Result<usize, Error> {
// nothing yet.. tx.execute(
"CREATE TABLE IF NOT EXISTS `app`
(
`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL
)",
[],
)
} }
impl Database { pub fn add(tx: &Transaction) -> Result<usize, Error> {
pub fn init(tx: &Transaction) -> Result<usize, Error> { tx.execute("INSERT INTO `app` DEFAULT VALUES", [])
tx.execute( }
"CREATE TABLE IF NOT EXISTS `app`
( pub fn records(tx: &Transaction) -> Result<Vec<Table>, Error> {
`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL let mut stmt = tx.prepare("SELECT `id` FROM `app`")?;
)", let result = stmt.query_map([], |row| Ok(Table { id: row.get(0)? }))?;
[],
) let mut records = Vec::new();
}
for record in result {
pub fn add(tx: &Transaction) -> Result<usize, Error> { let table = record?;
tx.execute("INSERT INTO `app` DEFAULT VALUES", []) records.push(table);
} }
pub fn records(tx: &Transaction) -> Result<Vec<Table>, Error> { Ok(records)
let mut stmt = tx.prepare("SELECT `id` FROM `app`")?; }
let result = stmt.query_map([], |row| Ok(Table { id: row.get(0)? }))?;
pub fn delete(tx: &Transaction, id: &i64) -> Result<usize, Error> {
let mut records = Vec::new(); tx.execute("DELETE FROM `app` WHERE `id` = ?", [id])
}
for record in result {
let table = record?; pub fn last_insert_id(tx: &Transaction) -> i64 {
records.push(table); tx.last_insert_rowid()
}
Ok(records)
}
pub fn delete(tx: &Transaction, id: &i64) -> Result<usize, Error> {
tx.execute("DELETE FROM `app` WHERE `id` = ?", [id])
}
pub fn last_insert_id(tx: &Transaction) -> i64 {
tx.last_insert_rowid()
}
} }

View file

@ -2,10 +2,6 @@ mod bookmark;
mod history; mod history;
mod identity; mod identity;
use bookmark::Bookmark;
use history::History;
use identity::Identity;
use sqlite::{Connection, Error}; use sqlite::{Connection, Error};
use std::{ use std::{
path::Path, path::Path,
@ -56,9 +52,9 @@ fn init(mut connection: RwLockWriteGuard<'_, Connection>) -> Result<(), Error> {
let transaction = connection.transaction()?; let transaction = connection.transaction()?;
// Init profile components // Init profile components
Bookmark::init(&transaction)?; bookmark::init(&transaction)?;
History::init(&transaction)?; history::init(&transaction)?;
Identity::init(&transaction)?; identity::init(&transaction)?;
// Apply changes // Apply changes
transaction.commit()?; transaction.commit()?;

View file

@ -11,57 +11,55 @@ pub struct Bookmark {
// nothing yet.. // nothing yet..
} }
impl Bookmark { pub fn init(tx: &Transaction) -> Result<usize, Error> {
pub fn init(tx: &Transaction) -> Result<usize, Error> { tx.execute(
tx.execute( "CREATE TABLE IF NOT EXISTS `bookmark`
"CREATE TABLE IF NOT EXISTS `bookmark` (
( `id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,
`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `time` INTEGER NOT NULL,
`time` INTEGER NOT NULL, `request` TEXT NOT NULL
`request` TEXT NOT NULL )",
)", [],
[], )
) }
}
pub fn add(tx: &Transaction, time: &DateTime, request: &str) -> Result<usize, Error> {
pub fn add(tx: &Transaction, time: &DateTime, request: &str) -> Result<usize, Error> { tx.execute(
tx.execute( "INSERT INTO `bookmark` (
"INSERT INTO `bookmark` ( `time`,
`time`, `request`
`request` ) VALUES (?, ?)",
) VALUES (?, ?)", (time.to_unix(), request),
(time.to_unix(), request), )
) }
}
pub fn records(tx: &Transaction, request: Option<&str>) -> Result<Vec<Table>, Error> {
pub fn records(tx: &Transaction, request: Option<&str>) -> Result<Vec<Table>, Error> { let mut stmt =
let mut stmt = tx.prepare("SELECT `id`, `time`, `request` FROM `bookmark` WHERE `request` LIKE ?")?;
tx.prepare("SELECT `id`, `time`, `request` FROM `bookmark` WHERE `request` LIKE ?")?;
let filter = match request {
let filter = match request { Some(value) => value,
Some(value) => value, None => "%",
None => "%", };
};
let result = stmt.query_map([filter], |row| {
let result = stmt.query_map([filter], |row| { Ok(Table {
Ok(Table { id: row.get(0)?,
id: row.get(0)?, time: DateTime::from_unix_local(row.get(1)?).unwrap(),
time: DateTime::from_unix_local(row.get(1)?).unwrap(), request: row.get(2)?,
request: row.get(2)?, })
}) })?;
})?;
let mut records = Vec::new();
let mut records = Vec::new();
for record in result {
for record in result { let table = record?;
let table = record?; records.push(table);
records.push(table); }
}
Ok(records)
Ok(records) }
}
pub fn delete(tx: &Transaction, id: &i64) -> Result<usize, Error> {
pub fn delete(tx: &Transaction, id: &i64) -> Result<usize, Error> { tx.execute("DELETE FROM `bookmark` WHERE `id` = ?", [id])
tx.execute("DELETE FROM `bookmark` WHERE `id` = ?", [id])
}
} }

View file

@ -11,57 +11,55 @@ pub struct History {
// nothing yet.. // nothing yet..
} }
impl History { pub fn init(tx: &Transaction) -> Result<usize, Error> {
pub fn init(tx: &Transaction) -> Result<usize, Error> { tx.execute(
tx.execute( "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, `request` TEXT NOT NULL
`request` TEXT NOT NULL )",
)", [],
[], )
) }
}
pub fn add(tx: &Transaction, time: &DateTime, request: &str) -> Result<usize, Error> {
pub fn add(tx: &Transaction, time: &DateTime, request: &str) -> Result<usize, Error> { tx.execute(
tx.execute( "INSERT INTO `history` (
"INSERT INTO `history` ( `time`,
`time`, `request`
`request` ) VALUES (?, ?)",
) VALUES (?, ?)", (time.to_unix(), request),
(time.to_unix(), request), )
) }
}
pub fn records(tx: &Transaction, request: Option<&str>) -> Result<Vec<Table>, Error> {
pub fn records(tx: &Transaction, request: Option<&str>) -> Result<Vec<Table>, Error> { let mut stmt =
let mut stmt = tx.prepare("SELECT `id`, `time`, `request` FROM `history` WHERE `request` LIKE ?")?;
tx.prepare("SELECT `id`, `time`, `request` FROM `history` WHERE `request` LIKE ?")?;
let filter = match request {
let filter = match request { Some(value) => value,
Some(value) => value, None => "%",
None => "%", };
};
let result = stmt.query_map([filter], |row| {
let result = stmt.query_map([filter], |row| { Ok(Table {
Ok(Table { id: row.get(0)?,
id: row.get(0)?, time: DateTime::from_unix_local(row.get(1)?).unwrap(),
time: DateTime::from_unix_local(row.get(1)?).unwrap(), request: row.get(2)?,
request: row.get(2)?, })
}) })?;
})?;
let mut records = Vec::new();
let mut records = Vec::new();
for record in result {
for record in result { let table = record?;
let table = record?; records.push(table);
records.push(table); }
}
Ok(records)
Ok(records) }
}
pub fn delete(tx: &Transaction, id: &i64) -> Result<usize, Error> {
pub fn delete(tx: &Transaction, id: &i64) -> Result<usize, Error> { tx.execute("DELETE FROM `history` WHERE `id` = ?", [id])
tx.execute("DELETE FROM `history` WHERE `id` = ?", [id])
}
} }

View file

@ -2,25 +2,19 @@ use sqlite::{Error, Transaction};
pub struct Table { pub struct Table {
pub id: i64, pub id: i64,
// pub app_id: i64, not in use // pub app_id: i64,
} }
pub struct Identity { pub fn init(tx: &Transaction) -> Result<usize, Error> {
// nothing yet.. tx.execute(
} "CREATE TABLE IF NOT EXISTS `identity`
(
impl Identity { `id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,
pub fn init(tx: &Transaction) -> Result<usize, Error> { `time` INTEGER NOT NULL,
tx.execute( `name` VARCHAR(255),
"CREATE TABLE IF NOT EXISTS `identity` `crt` TEXT NOT NULL,
( `key` TEXT NOT NULL
`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, )",
`time` INTEGER NOT NULL, [],
`name` VARCHAR(255), )
`crt` TEXT NOT NULL,
`key` TEXT NOT NULL
)",
[],
)
}
} }