Skip to content

Commit

Permalink
Start SQLite db module
Browse files Browse the repository at this point in the history
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
(#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.
  • Loading branch information
jubalh committed Mar 26, 2020
1 parent 53aa8d7 commit 12da26f
Show file tree
Hide file tree
Showing 5 changed files with 124 additions and 3 deletions.
4 changes: 3 additions & 1 deletion Makefile.am
Original file line number Diff line number Diff line change
@@ -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 \
Expand Down
7 changes: 5 additions & 2 deletions configure.ac
Original file line number Diff line number Diff line change
Expand Up @@ -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])],
Expand Down Expand Up @@ -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)
Expand Down
70 changes: 70 additions & 0 deletions src/database.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
/*
* database.c
* vim: expandtab:ts=4:sts=4:sw=4
*
* Copyright (C) 2020 Michael Vetter <[email protected]>
*
* 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 <https://www.gnu.org/licenses/>.
*
* 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 <sqlite3.h>

#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();
}

43 changes: 43 additions & 0 deletions src/database.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
/*
* database.h
* vim: expandtab:ts=4:sts=4:sw=4
*
* Copyright (C) 2020 Michael Vetter <[email protected]>
*
* 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 <https://www.gnu.org/licenses/>.
*
* 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

3 changes: 3 additions & 0 deletions src/profanity.c
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand Down Expand Up @@ -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();
Expand Down Expand Up @@ -255,6 +257,7 @@ _shutdown(void)
#ifdef HAVE_OMEMO
omemo_close();
#endif
log_database_close();
chat_log_close();
theme_close();
accounts_close();
Expand Down

0 comments on commit 12da26f

Please sign in to comment.