Add multi-user support 21/16621/1
authorKévin THIERRY <kevin.thierry@open.eurogiciel.org>
Fri, 7 Feb 2014 13:50:01 +0000 (14:50 +0100)
committerKévin THIERRY <kevin.thierry@open.eurogiciel.org>
Wed, 19 Feb 2014 15:36:03 +0000 (16:36 +0100)
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>
CMakeLists.txt
packaging/badge.spec
packaging/init_db.sh [new file with mode: 0644]
src/badge_internal.c

index f158b23..224a358 100644 (file)
@@ -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})
index 751ab07..3e20dfc 100644 (file)
@@ -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 (file)
index 0000000..d480bc1
--- /dev/null
@@ -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
index 83155a2..4f1bc7e 100644 (file)
@@ -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"
 #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;