feat: add /history switch for runtime database backend switching

Add log_database_switch_backend() that closes the current backend,
updates PREF_DBLOG preference, and reinitializes with the new backend
without requiring a reconnect or restart.

New command: /history switch sqlite|flatfile
- Validates connection state and backend name
- Skips if already using the requested backend
- Autocomplete support for the subcommand
This commit is contained in:
2026-02-26 14:04:38 +03:00
parent 904e0ec5df
commit 4ddbd1e34c
6 changed files with 85 additions and 0 deletions

View File

@@ -6735,6 +6735,37 @@ cmd_history(ProfWin* window, const char* const command, gchar** args)
return TRUE;
}
if (g_strcmp0(args[0], "switch") == 0) {
jabber_conn_status_t conn_status = connection_get_status();
if (conn_status != JABBER_CONNECTED) {
cons_show_error("You must be connected to switch database backend.");
return TRUE;
}
if (args[1] == NULL) {
cons_bad_cmd_usage(command);
return TRUE;
}
if (g_strcmp0(args[1], "sqlite") != 0 && g_strcmp0(args[1], "flatfile") != 0) {
cons_show_error("Backend must be 'sqlite' or 'flatfile'.");
return TRUE;
}
if (active_db_backend && g_strcmp0(active_db_backend->name, args[1]) == 0) {
cons_show("Already using '%s' backend.", args[1]);
return TRUE;
}
cons_show("Switching database backend to '%s'...", args[1]);
if (log_database_switch_backend(args[1])) {
cons_show("Database backend switched to '%s'.", args[1]);
} else {
cons_show_error("Failed to switch database backend.");
}
return TRUE;
}
if (g_strcmp0(args[0], "verify") == 0) {
const gchar* contact_jid = args[1]; // may be NULL (verify all)
cons_show("Verifying history integrity...");