*/
ail_error_e ail_desktop_remove(const char *appid);
+/**
+ * @fn ail_error_e ail_desktop_clean(const char *pkgid)
+ *
+ * @brief clean a pkg information in the Application Information Database.
+ *
+ * @par Sync (or) Async : Synchronous API.
+ *
+ * @param[in] pkgid
+ *
+ * @return 0 if success, negative value(<0) if fail\n
+ * @retval AIL_ERROR_OK success
+ * @retval AIL_ERROR_FAIL internal error
+ * @retval AIL_ERROR_INVALID_PARAMETER invalid parameter
+ *
+ * @pre no pre-condition.
+ * @post app information is removed in the Application Information Database.
+ *
+ * @see ail_desktop_add(), ail_desktop_update()
+ *
+ * @par Prospective Clients:
+ * External Apps.
+ *
+ * @code
+static ail_error_e _clean_desktop(const char *pkgid)
+{
+ ail_error_e ret;
+
+ if (!appid) {
+ return AIL_ERROR_FAIL;
+ }
+
+ ret = ail_desktop_clean(pkgid);
+ if (ret != AIL_ERROR_OK) {
+ return AIL_ERROR_FAIL;
+ }
+
+ return AIL_ERROR_OK;
+}
+ * @endcode
+ */
+ail_error_e ail_desktop_clean(const char *pkgid);
/**
* @fn ail_error_e ail_desktop_appinfo_modify_str(const char *appid, const char *property, const char *value, bool broadcast)
#define OPT_DESKTOP_DIRECTORY "/opt/share/applications"
#define USR_DESKTOP_DIRECTORY "/usr/share/applications"
#define APP_INFO_DB_FILE "/opt/dbspace/.app_info.db"
+#define APP_INFO_DB_FILE_JOURNAL "/opt/dbspace/.app_info.db-journal"
+#define APP_INFO_DB_LABEL "ail::db"
#ifdef _E
#undef _E
return AIL_ERROR_FAIL;
}
- const char *argv_bin[] = { "/bin/rm", APP_INFO_DB_FILE, NULL };
- xsystem(argv_bin);
+ const char *argv_rm[] = { "/bin/rm", APP_INFO_DB_FILE, NULL };
+ xsystem(argv_rm);
+ const char *argv_rmjn[] = { "/bin/rm", APP_INFO_DB_FILE_JOURNAL, NULL };
+ xsystem(argv_rmjn);
ret = setenv("AIL_INITDB", "1", 1);
_D("AIL_INITDB : %d", ret);
return AIL_ERROR_FAIL;
}
+ const char *argv_smack[] = { "/usr/bin/chsmack", "-a", APP_INFO_DB_LABEL, APP_INFO_DB_FILE, NULL };
+ xsystem(argv_smack);
+ const char *argv_smackjn[] = { "/usr/bin/chsmack", "-a", APP_INFO_DB_LABEL, APP_INFO_DB_FILE_JOURNAL, NULL };
+ xsystem(argv_smackjn);
+
return AIL_ERROR_OK;
}
"desktop TEXT UNIQUE NOT NULL);",
"CREATE TABLE localname (package TEXT NOT NULL, "
"locale TEXT NOT NULL, "
- "name TEXT NOT NULL, PRIMARY KEY (package, locale));",
+ "name TEXT NOT NULL, "
+ "x_slp_pkgid TEXT NOT NULL, PRIMARY KEY (package, locale));",
+
NULL
};
struct name_item *item = (struct name_item *)data;
desktop_info_s *info = (desktop_info_s *)user_data;
- snprintf(query, sizeof(query), "insert into localname (package, locale, name) "
- "values ('%s', '%s', '%s');",
- info->package, item->locale, item->name);
+ snprintf(query, sizeof(query), "insert into localname (package, locale, name, x_slp_pkgid) "
+ "values ('%s', '%s', '%s', '%s');",
+ info->package, item->locale, item->name, info->x_slp_pkgid);
if (db_exec(query) < 0)
_E("Failed to insert local name of package[%s]",info->package);
}
return AIL_ERROR_OK;
}
+static ail_error_e _clean_pkgid_data(const char* pkgid)
+{
+ char *query;
+ int size;
+
+ retv_if(!pkgid, AIL_ERROR_INVALID_PARAMETER);
+
+ if (db_open(DB_OPEN_RW) < 0) {
+ return AIL_ERROR_DB_FAILED;
+ }
+
+ size = strlen(pkgid) + (0x01 << 10);
+ query = calloc(1, size);
+ retv_if(!query, AIL_ERROR_OUT_OF_MEMORY);
+
+ snprintf(query, size, "delete from app_info where x_slp_pkgid = '%s'", pkgid);
+
+ if (db_exec(query) < 0) {
+ free(query);
+ return AIL_ERROR_DB_FAILED;
+ }
+
+ snprintf(query, size, "delete from localname where x_slp_pkgid = '%s'", pkgid);
+ _D("query=%s",query);
+
+ if (db_exec(query) < 0) {
+ free(query);
+ return AIL_ERROR_DB_FAILED;
+ }
+
+ _D("Clean pkgid data (%s).", pkgid);
+ free(query);
+
+ return AIL_ERROR_OK;
+}
static ail_error_e _send_db_done_noti(noti_type type, const char *package)
return AIL_ERROR_OK;
}
+EXPORT_API ail_error_e ail_desktop_clean(const char *pkgid)
+{
+ ail_error_e ret;
+
+ retv_if(!pkgid, AIL_ERROR_INVALID_PARAMETER);
+ if (!__is_authorized()) {
+ _E("You are not an authorized user on removing!\n");
+ return -1;
+ }
+
+ _D("ail_desktop_clean=%s",pkgid);
+
+ ret = _clean_pkgid_data(pkgid);
+ retv_if(ret != AIL_ERROR_OK, AIL_ERROR_FAIL);
+
+ return AIL_ERROR_OK;
+}
+
EXPORT_API ail_error_e ail_desktop_appinfo_modify_bool(const char *appid,
const char *property,