diff options
author | Kévin THIERRY <kevin.thierry@open.eurogiciel.org> | 2014-02-07 14:50:01 +0100 |
---|---|---|
committer | Kévin THIERRY <kevin.thierry@open.eurogiciel.org> | 2014-02-19 16:36:03 +0100 |
commit | b45dfedd91890a8c17138f1a8e223a6992dc4eb8 (patch) | |
tree | 9d31cea94ea5b5c2c18390e318354d023b0d9478 | |
parent | 884dcb1b9c50cf0e2e4107accd13b0b040b74393 (diff) | |
download | badge-b45dfedd91890a8c17138f1a8e223a6992dc4eb8.tar.gz badge-b45dfedd91890a8c17138f1a8e223a6992dc4eb8.tar.bz2 badge-b45dfedd91890a8c17138f1a8e223a6992dc4eb8.zip |
Add multi-user support
Also:
+ do not generate a "badge" RPM since its only purpose was to install
the db files. This has been moved in the "libbadge" RPM which uses it.
Bug-Tizen: PTREL-333
Change-Id: I782e5fab2ed3ad5e107b406eca01b3aee8af677f
Signed-off-by: Kévin THIERRY <kevin.thierry@open.eurogiciel.org>
-rw-r--r-- | CMakeLists.txt | 7 | ||||
-rw-r--r-- | packaging/badge.spec | 25 | ||||
-rw-r--r-- | packaging/init_db.sh | 6 | ||||
-rw-r--r-- | src/badge_internal.c | 51 |
4 files changed, 60 insertions, 29 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt index f158b23..224a358 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -6,9 +6,6 @@ SET(EXEC_PREFIX "\${prefix}") SET(PROJECT_NAME "${PROJECT_NAME}") SET(LIBDIR ${LIB_INSTALL_DIR}) SET(INCLUDEDIR "\${prefix}/include/${PROJECT_NAME}") -SET(DBDIR "/opt/dbspace") -SET(DBFILE ".${PROJECT_NAME}.db") -SET(DBPATH "${DBDIR}/${DBFILE}") SET(VERSION_MAJOR 0) SET(VERSION "${VERSION_MAJOR}.0.1") @@ -40,6 +37,7 @@ pkg_check_modules(pkgs REQUIRED dbus-glib-1 vconf com-core + libtzplatform-config ) FOREACH(flag ${pkgs_CFLAGS}) @@ -52,9 +50,6 @@ SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${EXTRA_CFLAGS}") ADD_DEFINITIONS("-DPREFIX=\"${PREFIX}\"") ADD_DEFINITIONS("-DBADGE_USE_DLOG") -ADD_DEFINITIONS("-DDBDIR=\"${DBDIR}\"") -ADD_DEFINITIONS("-DDBFILE=\"${DBFILE}\"") -ADD_DEFINITIONS("-DBADGE_DB_PATH=\"${DBPATH}\"") FOREACH(lib_file ${SUBMODULES}) ADD_LIBRARY(${lib_file} SHARED ${SRCS}) diff --git a/packaging/badge.spec b/packaging/badge.spec index 751ab07..3e20dfc 100644 --- a/packaging/badge.spec +++ b/packaging/badge.spec @@ -1,32 +1,31 @@ Name: badge -Summary: badge library +Summary: Badge library Version: 0.0.5 -Release: 1 +Release: 0 Group: Application Framework/Libraries License: Apache-2.0 Source0: %{name}-%{version}.tar.gz -Source1001: badge.manifest +Source1001: badge.manifest +Source1002: init_db.sh BuildRequires: pkgconfig(aul) BuildRequires: pkgconfig(dbus-1) BuildRequires: pkgconfig(dbus-glib-1) BuildRequires: pkgconfig(dlog) BuildRequires: pkgconfig(vconf) BuildRequires: pkgconfig(com-core) +BuildRequires: pkgconfig(sqlite3) +BuildRequires: pkgconfig(libtzplatform-config) BuildRequires: cmake -BuildRequires: sqlite3 -Requires: libbadge %description Badge library. %package -n libbadge Summary: Badge Library -Requires: %{name} = %{version}-%{release} %description -n libbadge Badge library. - %package devel Summary: Badge library (devel) Group: Application Framework/Development @@ -45,8 +44,8 @@ make %{?jobs:-j%jobs} %install %make_install -mkdir -p %{buildroot}/opt/dbspace -sqlite3 %{buildroot}/opt/dbspace/.%{name}.db < %{name}.sql +install -D -m 0640 %{name}.sql %{buildroot}%{TZ_SYS_SHARE}/%{name}/ressources/%{name}.sql +install -D -m 0750 %{SOURCE1002} %{buildroot}%{TZ_SYS_SHARE}/%{name}/ressources/init_db.sh %post -p /sbin/ldconfig -n libbadge @@ -58,11 +57,9 @@ sqlite3 %{buildroot}/opt/dbspace/.%{name}.db < %{name}.sql %manifest badge.manifest %defattr(-,root,root,-) %{_libdir}/libbadge.so.* - -%files -%manifest %{name}.manifest -%verify(not md5 size mtime) %config(noreplace) %attr(660,root,app) /opt/dbspace/.%{name}.db-journal -%verify(not md5 size mtime) %config(noreplace) %attr(660,root,app) /opt/dbspace/.%{name}.db +%{TZ_SYS_SHARE}/%{name} +%attr(640,root,%{TZ_SYS_USER_GROUP}) %{TZ_SYS_SHARE}/%{name}/ressources/%{name}.sql +%attr(750,root,%{TZ_SYS_USER_GROUP}) %{TZ_SYS_SHARE}/%{name}/ressources/init_db.sh %files devel %manifest %{name}.manifest diff --git a/packaging/init_db.sh b/packaging/init_db.sh new file mode 100644 index 0000000..d480bc1 --- /dev/null +++ b/packaging/init_db.sh @@ -0,0 +1,6 @@ +#!/bin/sh + +source /etc/tizen-platform.conf + +sqlite3 $TZ_USER_DB/.badge.db < $TZ_SYS_SHARE/badge/ressources/badge.sql +chmod 600 $TZ_USER_DB/.badge.db diff --git a/src/badge_internal.c b/src/badge_internal.c index 83155a2..4f1bc7e 100644 --- a/src/badge_internal.c +++ b/src/badge_internal.c @@ -24,6 +24,7 @@ #include <stdlib.h> #include <stdarg.h> #include <fcntl.h> +#include <errno.h> #include <unistd.h> #include <glib.h> #include <dbus/dbus.h> @@ -32,6 +33,9 @@ #include <sqlite3.h> #include <db-util.h> +/* For multi-user support */ +#include <tzplatform_config.h> + #include "badge_log.h" #include "badge_error.h" #include "badge_internal.h" @@ -41,7 +45,11 @@ #define BADGE_TABLE_NAME "badge_data" #define BADGE_OPTION_TABLE_NAME "badge_option" -#define BADGE_CHANGED_NOTI "badge_changed" +#define BADGE_CHANGED_NOTI "badge_changed" + +#define BADGE_DB_PATH tzplatform_mkpath(TZ_USER_DB, "badge.db") + +#define SCRIPT_INIT_DB tzplatform_mkpath(TZ_SYS_SHARE, "badge/resources/init_db.sh") struct _badge_h { char *pkgname; @@ -55,6 +63,30 @@ struct _badge_cb_data { static GList *g_badge_cb_list; +static int db_util_open_wrapper(sqlite3 *db) +{ + static int init_db = 1; + struct stat sts; + int sqlret, ret; + + /* Check if the DB exists */ + if(init_db) { + /* If the DB doesn't exist, create it and initialize it */ + ret = stat(BADGE_DB_PATH, &sts); + if (ret == -1 && errno == ENOENT) { + DBG("DB %s doesn't exist, it needs to be created and \ + initialized, calling %s", BADGE_DB_PATH, SCRIPT_INIT_DB); + system(SCRIPT_INIT_DB); + } + init_db = 0; + } + + /* Open DB */ + sqlret = db_util_open(BADGE_DB_PATH, &db, 0); + + return sqlret; +} + static inline long _get_max_len(void) { long max = 0; @@ -287,13 +319,14 @@ badge_error_e _badge_is_existing(const char *pkgname, bool *existing) int sqlret; badge_error_e ret = BADGE_ERROR_NONE; badge_error_e result = BADGE_ERROR_NONE; + badge_error_e sqlret_open; if (!pkgname || !existing) { ERR("pkgname : %s, existing : %p", pkgname, existing); return BADGE_ERROR_INVALID_DATA; } - sqlret = db_util_open(BADGE_DB_PATH, &db, 0); + sqlret = db_util_open_wrapper(&db); if (sqlret != SQLITE_OK || !db) { ERR("fail to db_util_open - [%d]", sqlret); return BADGE_ERROR_FROM_DB; @@ -325,7 +358,7 @@ badge_error_e _badge_foreach_existed(badge_cb callback, void *data) if (!callback) return BADGE_ERROR_INVALID_DATA; - sqlret = db_util_open(BADGE_DB_PATH, &db, 0); + sqlret = db_util_open_wrapper(&db); if (sqlret != SQLITE_OK || !db) { ERR("fail to db_util_open - [%d]", sqlret); return BADGE_ERROR_FROM_DB; @@ -409,7 +442,7 @@ badge_error_e _badge_insert(badge_h *badge) if (!badge || !badge->pkgname || !badge->writable_pkgs) return BADGE_ERROR_INVALID_DATA; - sqlret = db_util_open(BADGE_DB_PATH, &db, 0); + sqlret = db_util_open_wrapper(&db); if (sqlret != SQLITE_OK || !db) { ERR("fail to db_util_open - [%s][%d]", BADGE_DB_PATH, sqlret); return BADGE_ERROR_FROM_DB; @@ -499,7 +532,7 @@ badge_error_e _badge_remove(const char *caller, const char *pkgname) if (!pkgname) return BADGE_ERROR_INVALID_DATA; - sqlret = db_util_open(BADGE_DB_PATH, &db, 0); + sqlret = db_util_open_wrapper(&db); if (sqlret != SQLITE_OK || !db) { ERR("fail to db_util_open - [%d]", sqlret); return BADGE_ERROR_FROM_DB; @@ -586,7 +619,7 @@ badge_error_e _badget_set_count(const char *caller, const char *pkgname, if (!pkgname) return BADGE_ERROR_INVALID_DATA; - sqlret = db_util_open(BADGE_DB_PATH, &db, 0); + sqlret = db_util_open_wrapper(&db); if (sqlret != SQLITE_OK || !db) { ERR("fail to db_util_open - [%d]", sqlret); return BADGE_ERROR_FROM_DB; @@ -650,7 +683,7 @@ badge_error_e _badget_get_count(const char *pkgname, unsigned int *count) if (!count) return BADGE_ERROR_INVALID_DATA; - sqlret = db_util_open(BADGE_DB_PATH, &db, 0); + sqlret = db_util_open_wrapper(&db); if (sqlret != SQLITE_OK || !db) { ERR("fail to db_util_open - [%d]", sqlret); return BADGE_ERROR_FROM_DB; @@ -715,7 +748,7 @@ badge_error_e _badget_set_display(const char *pkgname, if (is_display != 0 && is_display != 1) return BADGE_ERROR_INVALID_DATA; - sqlret = db_util_open(BADGE_DB_PATH, &db, 0); + sqlret = db_util_open_wrapper(&db); if (sqlret != SQLITE_OK || !db) { ERR("fail to db_util_open - [%d]", sqlret); return BADGE_ERROR_FROM_DB; @@ -794,7 +827,7 @@ badge_error_e _badget_get_display(const char *pkgname, unsigned int *is_display) if (!is_display) return BADGE_ERROR_INVALID_DATA; - sqlret = db_util_open(BADGE_DB_PATH, &db, 0); + sqlret = db_util_open_wrapper(&db); if (sqlret != SQLITE_OK || !db) { ERR("fail to db_util_open - [%d]", sqlret); return BADGE_ERROR_FROM_DB; |