From 881e1b78d66bd3a3b20ca0efc22970701558744d Mon Sep 17 00:00:00 2001 From: yggverse Date: Mon, 9 Sep 2024 07:18:49 +0300 Subject: [PATCH] save tab session to profile database on application quit --- src/app/browser.cpp | 11 +++++ src/app/browser/main.cpp | 5 ++ src/app/browser/main.hpp | 2 + src/app/browser/main/tab.cpp | 79 ++++++++++++++++++++++++------- src/app/browser/main/tab.hpp | 5 ++ src/app/browser/main/tab/page.cpp | 5 ++ src/app/browser/main/tab/page.hpp | 2 + 7 files changed, 93 insertions(+), 16 deletions(-) diff --git a/src/app/browser.cpp b/src/app/browser.cpp index 6afeec04..c02b609d 100644 --- a/src/app/browser.cpp +++ b/src/app/browser.cpp @@ -189,4 +189,15 @@ Browser::Browser( set_child( * browserMain ); + + // Connect signals + signal_close_request().connect( + [this] + { + browserMain->shutdown(); + + return false; + }, + true + ); } \ No newline at end of file diff --git a/src/app/browser/main.cpp b/src/app/browser/main.cpp index 017ea07f..a4a16738 100644 --- a/src/app/browser/main.cpp +++ b/src/app/browser/main.cpp @@ -95,6 +95,11 @@ void Main::tab_page_navigation_history_forward() ); }; +void Main::shutdown() +{ + mainTab->shutdown(); +} + // Getters Glib::ustring Main::get_current_tab_page_title() { diff --git a/src/app/browser/main.hpp b/src/app/browser/main.hpp index a9e7e8c9..7e59c385 100644 --- a/src/app/browser/main.hpp +++ b/src/app/browser/main.hpp @@ -49,6 +49,8 @@ namespace app::browser void tab_page_navigation_history_back(); void tab_page_navigation_history_forward(); + void shutdown(); + // Getters Glib::ustring get_current_tab_page_title(); Glib::ustring get_current_tab_page_subtitle(); diff --git a/src/app/browser/main/tab.cpp b/src/app/browser/main/tab.cpp index 153c7be0..6dd8fa8c 100644 --- a/src/app/browser/main/tab.cpp +++ b/src/app/browser/main/tab.cpp @@ -14,22 +14,24 @@ Tab::Tab( const Glib::RefPtr & ACTION__TAB_PAGE_NAVIGATION_UPDATE ) { // Init database - char * errmsg; - - ::sqlite3_exec( - db, - R"SQL( - CREATE TABLE IF NOT EXISTS `app_browser_main_tab` - ( - `id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, - `time` INTEGER NOT NULL, - `request` VARCHAR(1024) - ) - )SQL", - nullptr, - nullptr, - &errmsg - ); + this->db = db; + + char * error; + + ::sqlite3_exec( + db, + R"SQL( + CREATE TABLE IF NOT EXISTS `app_browser_main_tab` + ( + `id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, + `time` INTEGER NOT NULL, + `request` VARCHAR(1024) + ) + )SQL", + nullptr, + nullptr, + &error + ); // Init actions action__refresh = ACTION__REFRESH; @@ -56,6 +58,51 @@ Tab::Tab( // @TODO restore session from DB } +void Tab::shutdown() +{ + char * error; // @TODO + + // Delete previous tab session + ::sqlite3_exec( + db, + R"SQL( + DELETE FROM `app_browser_main_tab` + )SQL", + nullptr, + nullptr, + &error + ); + + // Save current tab session + for (int page_number = 0; page_number < get_n_pages(); page_number++) + { + auto tabPage = get_tabPage( + page_number + ); + + ::sqlite3_exec( + db, + Glib::ustring::sprintf( + R"SQL( + INSERT INTO `app_browser_main_tab` ( + `time`, + `request` + ) VALUES ( + CURRENT_TIMESTAMP, + '%s' + ) + )SQL", + tabPage->get_navigation_request_text() + ).c_str(), + nullptr, + nullptr, + &error + ); + } + + // @TODO shutdown children components +} + // Actions void Tab::refresh( const int & PAGE_NUMBER diff --git a/src/app/browser/main/tab.hpp b/src/app/browser/main/tab.hpp index bbcdcbe3..4fcd9e01 100644 --- a/src/app/browser/main/tab.hpp +++ b/src/app/browser/main/tab.hpp @@ -18,6 +18,9 @@ namespace app::browser::main class Tab : public Gtk::Notebook { + // Database + sqlite3 * db; + // Actions Glib::RefPtr action__refresh, action__tab_close_active, @@ -81,6 +84,8 @@ namespace app::browser::main const int & PAGE_NUMBER ); + void shutdown(); + // Getters Glib::ustring get_page_title( const int & PAGE_NUMBER diff --git a/src/app/browser/main/tab/page.cpp b/src/app/browser/main/tab/page.cpp index 57567beb..dfaebe5f 100644 --- a/src/app/browser/main/tab/page.cpp +++ b/src/app/browser/main/tab/page.cpp @@ -265,4 +265,9 @@ Glib::ustring Page::get_title() Glib::ustring Page::get_subtitle() { return subtitle; +} + +Glib::ustring Page::get_navigation_request_text() +{ + return pageNavigation->get_request_text(); } \ No newline at end of file diff --git a/src/app/browser/main/tab/page.hpp b/src/app/browser/main/tab/page.hpp index 13c5254b..668efed1 100644 --- a/src/app/browser/main/tab/page.hpp +++ b/src/app/browser/main/tab/page.hpp @@ -65,6 +65,8 @@ namespace app::browser::main::tab // Getters Glib::ustring get_title(); Glib::ustring get_subtitle(); + + Glib::ustring get_navigation_request_text(); }; }