mirror of
https://github.com/profanity-im/profanity.git
synced 2025-01-03 14:57:42 -05:00
db: Have one database per account
This commit is contained in:
parent
672f3e22e8
commit
11663625cc
@ -139,22 +139,6 @@ files_get_log_file(char *log_file)
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
char*
|
|
||||||
files_get_chatlog_database_path(void)
|
|
||||||
{
|
|
||||||
gchar *xdg_data = _files_get_xdg_data_home();
|
|
||||||
GString *logfile = g_string_new(xdg_data);
|
|
||||||
|
|
||||||
g_string_append(logfile, "/profanity/chatlog.db");
|
|
||||||
|
|
||||||
char *result = strdup(logfile->str);
|
|
||||||
|
|
||||||
free(xdg_data);
|
|
||||||
g_string_free(logfile, TRUE);
|
|
||||||
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
char*
|
char*
|
||||||
files_get_config_path(char *config_base)
|
files_get_config_path(char *config_base)
|
||||||
{
|
{
|
||||||
|
@ -55,12 +55,12 @@
|
|||||||
#define DIR_PGP "pgp"
|
#define DIR_PGP "pgp"
|
||||||
#define DIR_OMEMO "omemo"
|
#define DIR_OMEMO "omemo"
|
||||||
#define DIR_PLUGINS "plugins"
|
#define DIR_PLUGINS "plugins"
|
||||||
|
#define DIR_DATABASE "database"
|
||||||
|
|
||||||
void files_create_directories(void);
|
void files_create_directories(void);
|
||||||
|
|
||||||
char* files_get_config_path(char *config_base);
|
char* files_get_config_path(char *config_base);
|
||||||
char* files_get_data_path(char *data_base);
|
char* files_get_data_path(char *data_base);
|
||||||
char* files_get_chatlog_database_path(void);
|
|
||||||
|
|
||||||
char* files_get_log_file(char *log_file);
|
char* files_get_log_file(char *log_file);
|
||||||
char* files_get_inputrc_file(void);
|
char* files_get_inputrc_file(void);
|
||||||
|
@ -35,28 +35,65 @@
|
|||||||
|
|
||||||
#define _GNU_SOURCE 1
|
#define _GNU_SOURCE 1
|
||||||
|
|
||||||
|
#include <sys/stat.h>
|
||||||
#include <sqlite3.h>
|
#include <sqlite3.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <glib.h>
|
#include <glib.h>
|
||||||
|
#include <errno.h>
|
||||||
|
|
||||||
#include "log.h"
|
#include "log.h"
|
||||||
#include "config/files.h"
|
#include "config/files.h"
|
||||||
|
#include "config/account.h"
|
||||||
#include "xmpp/xmpp.h"
|
#include "xmpp/xmpp.h"
|
||||||
|
|
||||||
static sqlite3 *g_chatlog_database;
|
static sqlite3 *g_chatlog_database;
|
||||||
|
|
||||||
|
static char*
|
||||||
|
_get_db_filename(ProfAccount *account)
|
||||||
|
{
|
||||||
|
char *databasedir = files_get_data_path(DIR_DATABASE);
|
||||||
|
GString *basedir = g_string_new(databasedir);
|
||||||
|
free(databasedir);
|
||||||
|
|
||||||
|
g_string_append(basedir, "/");
|
||||||
|
|
||||||
|
gchar *account_dir = str_replace(account->jid, "@", "_at_");
|
||||||
|
g_string_append(basedir, account_dir);
|
||||||
|
free(account_dir);
|
||||||
|
|
||||||
|
int res = g_mkdir_with_parents(basedir->str, S_IRWXU);
|
||||||
|
if (res == -1) {
|
||||||
|
char *errmsg = strerror(errno);
|
||||||
|
if (errmsg) {
|
||||||
|
log_error("DATABASE: error creating directory: %s, %s", basedir->str, errmsg);
|
||||||
|
} else {
|
||||||
|
log_error("DATABASE: creating directory: %s", basedir->str);
|
||||||
|
}
|
||||||
|
g_string_free(basedir, TRUE);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
g_string_append(basedir, "/chatlog.db");
|
||||||
|
char *result = strdup(basedir->str);
|
||||||
|
g_string_free(basedir, TRUE);
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
bool
|
bool
|
||||||
log_database_init(void)
|
log_database_init(ProfAccount *account)
|
||||||
{
|
{
|
||||||
int ret = sqlite3_initialize();
|
int ret = sqlite3_initialize();
|
||||||
char *filename = files_get_chatlog_database_path();
|
|
||||||
|
|
||||||
if (ret != SQLITE_OK) {
|
if (ret != SQLITE_OK) {
|
||||||
free(filename);
|
|
||||||
log_error("Error initializing SQLite database: %d", ret);
|
log_error("Error initializing SQLite database: %d", ret);
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
char *filename = _get_db_filename(account);
|
||||||
|
if (!filename) {
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
ret = sqlite3_open(filename, &g_chatlog_database);
|
ret = sqlite3_open(filename, &g_chatlog_database);
|
||||||
if (ret != SQLITE_OK) {
|
if (ret != SQLITE_OK) {
|
||||||
const char *err_msg = sqlite3_errmsg(g_chatlog_database);
|
const char *err_msg = sqlite3_errmsg(g_chatlog_database);
|
||||||
|
@ -36,7 +36,7 @@
|
|||||||
#ifndef DATABASE_H
|
#ifndef DATABASE_H
|
||||||
#define DATABASE_H
|
#define DATABASE_H
|
||||||
|
|
||||||
bool log_database_init(void);
|
bool log_database_init(ProfAccount *account);
|
||||||
void log_database_close(void);
|
void log_database_close(void);
|
||||||
void log_database_add(ProfMessage *message, gboolean is_muc);
|
void log_database_add(ProfMessage *message, gboolean is_muc);
|
||||||
|
|
||||||
|
@ -33,6 +33,7 @@
|
|||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#include "database.h"
|
||||||
#include "config/tlscerts.h"
|
#include "config/tlscerts.h"
|
||||||
#include "ui/ui.h"
|
#include "ui/ui.h"
|
||||||
#include "xmpp/chat_session.h"
|
#include "xmpp/chat_session.h"
|
||||||
@ -67,6 +68,7 @@ ev_disconnect_cleanup(void)
|
|||||||
#ifdef HAVE_OMEMO
|
#ifdef HAVE_OMEMO
|
||||||
omemo_on_disconnect();
|
omemo_on_disconnect();
|
||||||
#endif
|
#endif
|
||||||
|
log_database_close();
|
||||||
}
|
}
|
||||||
|
|
||||||
gboolean
|
gboolean
|
||||||
|
@ -92,6 +92,8 @@ sv_ev_login_account_success(char *account_name, gboolean secured)
|
|||||||
omemo_on_connect(account);
|
omemo_on_connect(account);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
log_database_init(account);
|
||||||
|
|
||||||
avatar_pep_subscribe();
|
avatar_pep_subscribe();
|
||||||
|
|
||||||
ui_handle_login_account_success(account, secured);
|
ui_handle_login_account_success(account, secured);
|
||||||
|
@ -53,7 +53,6 @@
|
|||||||
#include "profanity.h"
|
#include "profanity.h"
|
||||||
#include "common.h"
|
#include "common.h"
|
||||||
#include "log.h"
|
#include "log.h"
|
||||||
#include "database.h"
|
|
||||||
#include "config/files.h"
|
#include "config/files.h"
|
||||||
#include "config/tlscerts.h"
|
#include "config/tlscerts.h"
|
||||||
#include "config/accounts.h"
|
#include "config/accounts.h"
|
||||||
@ -188,7 +187,6 @@ _init(char *log_level, char *config_file, char *log_file, char *theme_name)
|
|||||||
log_info("Starting Profanity (%s)...", PACKAGE_VERSION);
|
log_info("Starting Profanity (%s)...", PACKAGE_VERSION);
|
||||||
}
|
}
|
||||||
|
|
||||||
log_database_init();
|
|
||||||
chat_log_init();
|
chat_log_init();
|
||||||
groupchat_log_init();
|
groupchat_log_init();
|
||||||
accounts_load();
|
accounts_load();
|
||||||
@ -257,7 +255,6 @@ _shutdown(void)
|
|||||||
#ifdef HAVE_OMEMO
|
#ifdef HAVE_OMEMO
|
||||||
omemo_close();
|
omemo_close();
|
||||||
#endif
|
#endif
|
||||||
log_database_close();
|
|
||||||
chat_log_close();
|
chat_log_close();
|
||||||
theme_close();
|
theme_close();
|
||||||
accounts_close();
|
accounts_close();
|
||||||
|
Loading…
Reference in New Issue
Block a user