From 8bfb175d03925c8a468eac0660189c86093be2cd Mon Sep 17 00:00:00 2001 From: Michael Vetter Date: Wed, 11 Mar 2020 14:17:11 +0100 Subject: [PATCH] Start SQLite db module I plan to save all messages in an SQLite db. For retrieving information it's nicer than having it in a text file. We will have more info in there and easier to parse it. This will also be good for later MAM (https://github.com/profanity-im/profanity/issues/660). Regular text files will still be an option for users so that they can easily grep them and do whatever they like. Internally Profanity will only use the SQLite db. --- Makefile.am | 4 ++- configure.ac | 7 +++-- src/database.c | 70 +++++++++++++++++++++++++++++++++++++++++++++++++ src/database.h | 43 ++++++++++++++++++++++++++++++ src/profanity.c | 3 +++ 5 files changed, 124 insertions(+), 3 deletions(-) create mode 100644 src/database.c create mode 100644 src/database.h diff --git a/Makefile.am b/Makefile.am index 95b2401d..9ed8f07b 100644 --- a/Makefile.am +++ b/Makefile.am @@ -1,5 +1,7 @@ core_sources = \ - src/xmpp/contact.c src/xmpp/contact.h src/log.c src/common.c \ + src/xmpp/contact.c src/xmpp/contact.h \ + src/log.c src/common.c \ + src/database.h src/database.c \ src/log.h src/profanity.c src/common.h \ src/profanity.h src/xmpp/chat_session.c \ src/xmpp/chat_session.h src/xmpp/muc.c src/xmpp/muc.h src/xmpp/jid.h src/xmpp/jid.c \ diff --git a/configure.ac b/configure.ac index 0800ea0a..92db515f 100644 --- a/configure.ac +++ b/configure.ac @@ -179,6 +179,9 @@ PKG_CHECK_MODULES([curl], [libcurl], [], [AC_CHECK_LIB([curl], [main], [], [AC_MSG_ERROR([libcurl is required for profanity])])]) +PKG_CHECK_MODULES([SQLITE], [sqlite3 >= 3.30.0], [], + [AC_MSG_ERROR([sqlite3 3.30.0 or higher is required for profanity profanity])]) + AS_IF([test "x$enable_icons_and_clipboard" != xno], [PKG_CHECK_MODULES([GTK], [gtk+-2.0 >= 2.24.10], [AC_DEFINE([HAVE_GTK], [1], [libgtk module])], @@ -332,9 +335,9 @@ AS_IF([test "x$PACKAGE_STATUS" = xdevelopment], AS_IF([test "x$PLATFORM" = xosx], [AM_CFLAGS="$AM_CFLAGS -Qunused-arguments"]) AM_LDFLAGS="$AM_LDFLAGS -export-dynamic" -AM_CPPFLAGS="$AM_CPPFLAGS $glib_CFLAGS $gio_CFLAGS $curl_CFLAGS $libnotify_CFLAGS $PYTHON_CPPFLAGS ${GTK_CFLAGS}" +AM_CPPFLAGS="$AM_CPPFLAGS $glib_CFLAGS $gio_CFLAGS $curl_CFLAGS $libnotify_CFLAGS $PYTHON_CPPFLAGS ${GTK_CFLAGS} ${SQLITE_CFLAGS}" AM_CPPFLAGS="$AM_CPPFLAGS -DTHEMES_PATH=\"\\\"$THEMES_PATH\\\"\" -DICONS_PATH=\"\\\"$ICONS_PATH\\\"\"" -LIBS="$glib_LIBS $gio_LIBS $curl_LIBS $libnotify_LIBS $PYTHON_LIBS $PYTHON_EXTRA_LIBS $PYTHON_LDFLAGS ${GTK_LIBS} $LIBS" +LIBS="$glib_LIBS $gio_LIBS $curl_LIBS $libnotify_LIBS $PYTHON_LIBS $PYTHON_EXTRA_LIBS $PYTHON_LDFLAGS ${GTK_LIBS} ${SQLITE_LIBS} $LIBS" AC_SUBST(AM_LDFLAGS) AC_SUBST(AM_CFLAGS) diff --git a/src/database.c b/src/database.c new file mode 100644 index 00000000..3ac203e3 --- /dev/null +++ b/src/database.c @@ -0,0 +1,70 @@ +/* + * database.c + * vim: expandtab:ts=4:sts=4:sw=4 + * + * Copyright (C) 2020 Michael Vetter + * + * This file is part of Profanity. + * + * Profanity is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Profanity is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Profanity. If not, see . + * + * In addition, as a special exception, the copyright holders give permission to + * link the code of portions of this program with the OpenSSL library under + * certain conditions as described in each individual source file, and + * distribute linked combinations including the two. + * + * You must obey the GNU General Public License in all respects for all of the + * code used other than OpenSSL. If you modify file(s) with this exception, you + * may extend this exception to your version of the file(s), but you are not + * obligated to do so. If you do not wish to do so, delete this exception + * statement from your version. If you delete this exception statement from all + * source files in the program, then also delete it here. + * + */ + +#include + +#include "log.h" + +static sqlite3 *g_log_database; + +bool +log_database_init(void) +{ + int ret = sqlite3_initialize(); + char *filename = "test"; + + if (ret != SQLITE_OK) { + log_error("Error initializing SQLite database: %d", ret); + return FALSE; + } + + ret = sqlite3_open(filename, &g_log_database); + if (ret != SQLITE_OK) { + const char *err_msg = sqlite3_errmsg(g_log_database); + log_error("Error opening SQLite database: %s", err_msg); + return FALSE; + } + + log_error("Initialized SQLite database: %s", filename); + return TRUE; +} + +void +log_database_close(void) +{ + sqlite3_close(g_log_database); + sqlite3_shutdown(); +} + diff --git a/src/database.h b/src/database.h new file mode 100644 index 00000000..11560385 --- /dev/null +++ b/src/database.h @@ -0,0 +1,43 @@ +/* + * database.h + * vim: expandtab:ts=4:sts=4:sw=4 + * + * Copyright (C) 2020 Michael Vetter + * + * This file is part of Profanity. + * + * Profanity is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Profanity is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Profanity. If not, see . + * + * In addition, as a special exception, the copyright holders give permission to + * link the code of portions of this program with the OpenSSL library under + * certain conditions as described in each individual source file, and + * distribute linked combinations including the two. + * + * You must obey the GNU General Public License in all respects for all of the + * code used other than OpenSSL. If you modify file(s) with this exception, you + * may extend this exception to your version of the file(s), but you are not + * obligated to do so. If you do not wish to do so, delete this exception + * statement from your version. If you delete this exception statement from all + * source files in the program, then also delete it here. + * + */ + +#ifndef DATABASE_H +#define DATABASE_H + +bool log_database_init(void); +void log_database_close(void); + +#endif // DATABASE_H + diff --git a/src/profanity.c b/src/profanity.c index dc7bf954..e6830e20 100644 --- a/src/profanity.c +++ b/src/profanity.c @@ -53,6 +53,7 @@ #include "profanity.h" #include "common.h" #include "log.h" +#include "database.h" #include "config/files.h" #include "config/tlscerts.h" #include "config/accounts.h" @@ -187,6 +188,7 @@ _init(char *log_level, char *config_file, char *log_file, char *theme_name) log_info("Starting Profanity (%s)...", PACKAGE_VERSION); } + log_database_init(); chat_log_init(); groupchat_log_init(); accounts_load(); @@ -255,6 +257,7 @@ _shutdown(void) #ifdef HAVE_OMEMO omemo_close(); #endif + log_database_close(); chat_log_close(); theme_close(); accounts_close();