diff --git a/src/app/browser/widget/database.rs b/src/app/browser/widget/database.rs index e53fd848..69b36e2b 100644 --- a/src/app/browser/widget/database.rs +++ b/src/app/browser/widget/database.rs @@ -48,10 +48,7 @@ impl Database { app_browser_id, &(*default_width as i64), &(*default_height as i64), - match is_maximized { - true => &1, - false => &0, - }, + &(*is_maximized as i64), ], ) } diff --git a/src/app/browser/window/tab.rs b/src/app/browser/window/tab.rs index 986eed10..823301ce 100644 --- a/src/app/browser/window/tab.rs +++ b/src/app/browser/window/tab.rs @@ -80,6 +80,12 @@ impl Tab { } }; + // Init empty HashMap index as no tabs appended yet + let index = RefCell::new(HashMap::new()); + + // Init widget + let widget = Arc::new(Widget::new()); + // Return non activated struct Self { database, @@ -90,9 +96,9 @@ impl Tab { action_tab_page_navigation_reload, action_update, // Init empty HashMap index as no tabs appended yet - index: RefCell::new(HashMap::new()), + index, // GTK - widget: Arc::new(Widget::new()), + widget, } } @@ -254,7 +260,7 @@ impl Tab { match self.database.records(tx, app_browser_window_id) { Ok(records) => { for record in records { - self.append(None, true /*@ TODO record.is_current_page */); + self.append(None, record.is_current); // Delegate restore action to childs // nothing yet.. } @@ -264,16 +270,29 @@ impl Tab { } pub fn save(&self, tx: &Transaction, app_browser_window_id: &i64) { - for (id, item) in self.index.take().iter() { - match self.database.add(tx, app_browser_window_id) { + let mut page_number = 0; + + for (_, _) in self.index.take().iter() { + match self.database.add( + tx, + app_browser_window_id, + &match self.widget.gobject().current_page() { + Some(number) => number == page_number, + None => false, + }, + ) { Ok(_) => { // Delegate save action to childs - let id = self.database.last_insert_id(tx); + // let id = self.database.last_insert_id(tx); + + // @TODO // item.label.save() // item.page.save() } Err(e) => todo!("{e}"), } + + page_number += 1; } } diff --git a/src/app/browser/window/tab/database.rs b/src/app/browser/window/tab/database.rs index b2c70f4e..b2035359 100644 --- a/src/app/browser/window/tab/database.rs +++ b/src/app/browser/window/tab/database.rs @@ -3,6 +3,7 @@ use sqlite::{Error, Transaction}; pub struct Table { pub id: i64, // pub app_browser_window_id: i64, not in use + pub is_current: bool, } pub struct Database { @@ -15,7 +16,8 @@ impl Database { "CREATE TABLE IF NOT EXISTS `app_browser_window_tab` ( `id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, - `app_browser_window_id` INTEGER NOT NULL + `app_browser_window_id` INTEGER NOT NULL, + `is_current` INTEGER NOT NULL )", [], )?; @@ -23,10 +25,18 @@ impl Database { Ok(Self {}) } - pub fn add(&self, tx: &Transaction, app_browser_window_id: &i64) -> Result { + pub fn add( + &self, + tx: &Transaction, + app_browser_window_id: &i64, + is_current: &bool, + ) -> Result { tx.execute( - "INSERT INTO `app_browser_window_tab` (`app_browser_window_id`) VALUES (?)", - [app_browser_window_id], + "INSERT INTO `app_browser_window_tab` ( + `app_browser_window_id`, + `is_current` + ) VALUES (?,?)", + [app_browser_window_id, &(*is_current as i64)], ) } @@ -35,14 +45,18 @@ impl Database { tx: &Transaction, app_browser_window_id: &i64, ) -> Result, Error> { - let mut stmt = tx.prepare("SELECT `id`, - `app_browser_window_id` FROM `app_browser_window_tab` - WHERE `app_browser_window_id` = ?")?; + let mut stmt = tx.prepare( + "SELECT `id`, + `app_browser_window_id`, + `is_current` FROM `app_browser_window_tab` + WHERE `app_browser_window_id` = ?", + )?; let result = stmt.query_map([app_browser_window_id], |row| { Ok(Table { id: row.get(0)?, // app_browser_window_id: row.get(1)?, not in use + is_current: row.get(2)?, }) })?; @@ -60,7 +74,8 @@ impl Database { tx.execute("DELETE FROM `app_browser_window_tab` WHERE `id` = ?", [id]) } + /* not in use pub fn last_insert_id(&self, tx: &Transaction) -> i64 { tx.last_insert_rowid() - } + } */ } diff --git a/src/app/browser/window/tab/widget.rs b/src/app/browser/window/tab/widget.rs index 08cea2eb..3c29d1f6 100644 --- a/src/app/browser/window/tab/widget.rs +++ b/src/app/browser/window/tab/widget.rs @@ -7,9 +7,9 @@ pub struct Widget { impl Widget { // Construct pub fn new() -> Self { - let gobject = Notebook::builder().scrollable(true).build(); - - Self { gobject } + Self { + gobject: Notebook::builder().scrollable(true).build(), + } } // Actions