Browse Source

save tab session to profile database on application quit

CPP-GTK4
yggverse 2 months ago
parent
commit
881e1b78d6
  1. 11
      src/app/browser.cpp
  2. 5
      src/app/browser/main.cpp
  3. 2
      src/app/browser/main.hpp
  4. 79
      src/app/browser/main/tab.cpp
  5. 5
      src/app/browser/main/tab.hpp
  6. 5
      src/app/browser/main/tab/page.cpp
  7. 2
      src/app/browser/main/tab/page.hpp

11
src/app/browser.cpp

@ -189,4 +189,15 @@ Browser::Browser( @@ -189,4 +189,15 @@ Browser::Browser(
set_child(
* browserMain
);
// Connect signals
signal_close_request().connect(
[this]
{
browserMain->shutdown();
return false;
},
true
);
}

5
src/app/browser/main.cpp

@ -95,6 +95,11 @@ void Main::tab_page_navigation_history_forward() @@ -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()
{

2
src/app/browser/main.hpp

@ -49,6 +49,8 @@ namespace app::browser @@ -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();

79
src/app/browser/main/tab.cpp

@ -14,22 +14,24 @@ Tab::Tab( @@ -14,22 +14,24 @@ Tab::Tab(
const Glib::RefPtr<Gio::SimpleAction> & 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( @@ -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

5
src/app/browser/main/tab.hpp

@ -18,6 +18,9 @@ namespace app::browser::main @@ -18,6 +18,9 @@ namespace app::browser::main
class Tab : public Gtk::Notebook
{
// Database
sqlite3 * db;
// Actions
Glib::RefPtr<Gio::SimpleAction> action__refresh,
action__tab_close_active,
@ -81,6 +84,8 @@ namespace app::browser::main @@ -81,6 +84,8 @@ namespace app::browser::main
const int & PAGE_NUMBER
);
void shutdown();
// Getters
Glib::ustring get_page_title(
const int & PAGE_NUMBER

5
src/app/browser/main/tab/page.cpp

@ -265,4 +265,9 @@ Glib::ustring Page::get_title() @@ -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();
}

2
src/app/browser/main/tab/page.hpp

@ -65,6 +65,8 @@ namespace app::browser::main::tab @@ -65,6 +65,8 @@ namespace app::browser::main::tab
// Getters
Glib::ustring get_title();
Glib::ustring get_subtitle();
Glib::ustring get_navigation_request_text();
};
}

Loading…
Cancel
Save