summaryrefslogtreecommitdiff
path: root/src/widget_service.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/widget_service.c')
-rw-r--r--src/widget_service.c67
1 files changed, 67 insertions, 0 deletions
diff --git a/src/widget_service.c b/src/widget_service.c
index fda056b..3f29147 100644
--- a/src/widget_service.c
+++ b/src/widget_service.c
@@ -38,6 +38,7 @@
#include "widget_conf.h"
#include "widget_instance.h"
#include "widget_service.h"
+#include "widget_service_internal.h"
#define MAX_BUF_SIZE 4096
#define SMACK_LABEL_LEN 255
@@ -1597,3 +1598,69 @@ EAPI int widget_service_unset_lifecycle_event_cb(const char *widget_id, void **u
return WIDGET_ERROR_NOT_EXIST;
}
+static int __get_max_instance(const char *widget_id, uid_t uid)
+{
+ static const char query[] =
+ "SELECT max_instance FROM widget_class WHERE classid=?";
+ int ret;
+ sqlite3 *db;
+ sqlite3_stmt *stmt;
+ int max_instance = 0;
+
+ db = _open_db(uid);
+ if (db == NULL)
+ return WIDGET_ERROR_IO_ERROR;
+
+ ret = sqlite3_prepare_v2(db, query, strlen(query), &stmt, NULL);
+ if (ret != SQLITE_OK) {
+ _E("prepare error: %s", sqlite3_errmsg(db));
+ sqlite3_close_v2(db);
+ return WIDGET_ERROR_FAULT;
+ }
+
+ sqlite3_bind_text(stmt, 1, widget_id, -1, SQLITE_STATIC);
+
+ ret = sqlite3_step(stmt);
+ if (ret != SQLITE_ROW) {
+ _E("step error: %s", sqlite3_errmsg(db));
+ sqlite3_finalize(stmt);
+ sqlite3_close_v2(db);
+ if (ret == SQLITE_DONE)
+ return WIDGET_ERROR_NOT_EXIST;
+
+ return WIDGET_ERROR_FAULT;
+ }
+
+ _get_column_int(stmt, 0, &max_instance);
+ _D("widget_id: %s, max-instance: %d", widget_id, max_instance);
+
+ sqlite3_finalize(stmt);
+ sqlite3_close_v2(db);
+
+ return max_instance;
+}
+
+EAPI int widget_service_get_widget_max_count(const char *widget_id)
+{
+ int ret;
+
+ if (!_is_widget_feature_enabled()) {
+ _E("Not supported");
+ return WIDGET_ERROR_NOT_SUPPORTED;
+ }
+
+ if (widget_id == NULL) {
+ _E("Invalid parameter");
+ return WIDGET_ERROR_INVALID_PARAMETER;
+ }
+
+ if (check_privilege("http://tizen.org/privilege/widget.viewer") < 0)
+ return WIDGET_ERROR_PERMISSION_DENIED;
+
+ ret = __get_max_instance(widget_id, getuid());
+ if (ret == WIDGET_ERROR_NOT_EXIST)
+ ret = __get_max_instance(widget_id, GLOBALAPP_USER);
+
+ return ret;
+}
+