2017-09-07 09:01:56 +00:00
|
|
|
#include "common.h"
|
|
|
|
#include "config-mgr.h"
|
|
|
|
#include "seaf-db.h"
|
|
|
|
#include "log.h"
|
|
|
|
|
|
|
|
int
|
|
|
|
seaf_cfg_manager_init (SeafCfgManager *mgr)
|
|
|
|
{
|
|
|
|
char *sql;
|
|
|
|
int db_type = seaf_db_type(mgr->db);
|
|
|
|
|
|
|
|
if (db_type == SEAF_DB_TYPE_MYSQL)
|
2018-04-18 07:07:49 +00:00
|
|
|
sql = "CREATE TABLE IF NOT EXISTS SeafileConf ("
|
|
|
|
"id BIGINT NOT NULL PRIMARY KEY AUTO_INCREMENT, cfg_group VARCHAR(255) NOT NULL,"
|
2017-09-07 09:01:56 +00:00
|
|
|
"cfg_key VARCHAR(255) NOT NULL, value VARCHAR(255), property INTEGER) ENGINE=INNODB";
|
|
|
|
else
|
|
|
|
sql = "CREATE TABLE IF NOT EXISTS SeafileConf (cfg_group VARCHAR(255) NOT NULL,"
|
|
|
|
"cfg_key VARCHAR(255) NOT NULL, value VARCHAR(255), property INTEGER)";
|
|
|
|
|
|
|
|
if (seaf_db_query (mgr->db, sql) < 0)
|
|
|
|
return -1;
|
|
|
|
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
SeafCfgManager *
|
|
|
|
seaf_cfg_manager_new (SeafileSession *session)
|
|
|
|
{
|
|
|
|
SeafCfgManager *mgr = g_new0 (SeafCfgManager, 1);
|
|
|
|
if (!mgr)
|
|
|
|
return NULL;
|
|
|
|
|
|
|
|
mgr->config = session->config;
|
|
|
|
mgr->db = session->db;
|
|
|
|
|
|
|
|
return mgr;
|
|
|
|
}
|
|
|
|
|
|
|
|
int
|
|
|
|
seaf_cfg_manager_set_config_int (SeafCfgManager *mgr,
|
|
|
|
const char *group,
|
|
|
|
const char *key,
|
|
|
|
int value)
|
|
|
|
{
|
|
|
|
char value_str[256];
|
|
|
|
|
|
|
|
snprintf (value_str, sizeof(value_str), "%d", value);
|
|
|
|
|
|
|
|
return seaf_cfg_manager_set_config (mgr, group, key, value_str);
|
|
|
|
}
|
|
|
|
|
|
|
|
int
|
|
|
|
seaf_cfg_manager_set_config_int64 (SeafCfgManager *mgr,
|
|
|
|
const char *group,
|
|
|
|
const char *key,
|
|
|
|
gint64 value)
|
|
|
|
{
|
|
|
|
char value_str[256];
|
|
|
|
|
|
|
|
snprintf (value_str, sizeof(value_str), "%"G_GINT64_FORMAT"", value);
|
|
|
|
|
|
|
|
return seaf_cfg_manager_set_config (mgr, group, key, value_str);
|
|
|
|
}
|
|
|
|
|
|
|
|
int
|
|
|
|
seaf_cfg_manager_set_config_string (SeafCfgManager *mgr,
|
|
|
|
const char *group,
|
|
|
|
const char *key,
|
|
|
|
const char *value)
|
|
|
|
{
|
|
|
|
char value_str[256];
|
|
|
|
|
|
|
|
snprintf (value_str, sizeof(value_str), "%s", value);
|
|
|
|
|
|
|
|
return seaf_cfg_manager_set_config (mgr, group, key, value_str);
|
|
|
|
}
|
|
|
|
|
|
|
|
int
|
|
|
|
seaf_cfg_manager_set_config_boolean (SeafCfgManager *mgr,
|
|
|
|
const char *group,
|
|
|
|
const char *key,
|
|
|
|
gboolean value)
|
|
|
|
{
|
|
|
|
char value_str[256];
|
|
|
|
|
|
|
|
if (value)
|
|
|
|
snprintf (value_str, sizeof(value_str), "true");
|
|
|
|
else
|
|
|
|
snprintf (value_str, sizeof(value_str), "false");
|
|
|
|
|
|
|
|
return seaf_cfg_manager_set_config (mgr, group, key, value_str);
|
|
|
|
}
|
|
|
|
|
|
|
|
int
|
|
|
|
seaf_cfg_manager_set_config (SeafCfgManager *mgr, const char *group, const char *key, const char *value)
|
|
|
|
{
|
|
|
|
gboolean exists, err = FALSE;
|
|
|
|
|
|
|
|
char *sql = "SELECT 1 FROM SeafileConf WHERE cfg_group=? AND cfg_key=?";
|
|
|
|
exists = seaf_db_statement_exists(mgr->db, sql, &err,
|
|
|
|
2, "string", group,
|
|
|
|
"string", key);
|
|
|
|
if (err) {
|
|
|
|
seaf_warning ("[db error]Failed to set config [%s:%s] to db.\n", group, key);
|
|
|
|
return -1;
|
|
|
|
}
|
|
|
|
if (exists)
|
|
|
|
sql = "UPDATE SeafileConf SET value=? WHERE cfg_group=? AND cfg_key=?";
|
|
|
|
else
|
|
|
|
sql = "INSERT INTO SeafileConf (value, cfg_group, cfg_key, property) VALUES "
|
|
|
|
"(?,?,?,0)";
|
|
|
|
if (seaf_db_statement_query (mgr->db, sql, 3,
|
|
|
|
"string", value, "string",
|
|
|
|
group, "string", key) < 0) {
|
|
|
|
seaf_warning ("Failed to set config [%s:%s] to db.\n", group, key);
|
|
|
|
return -1;
|
|
|
|
}
|
|
|
|
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
int
|
|
|
|
seaf_cfg_manager_get_config_int (SeafCfgManager *mgr, const char *group, const char *key)
|
|
|
|
{
|
|
|
|
int ret;
|
|
|
|
char *invalid = NULL;
|
|
|
|
|
|
|
|
char *value = seaf_cfg_manager_get_config (mgr, group, key);
|
2018-05-21 06:03:10 +00:00
|
|
|
if (!value) {
|
|
|
|
GError *err = NULL;
|
|
|
|
ret = g_key_file_get_integer (mgr->config, group, key, &err);
|
|
|
|
if (err) {
|
|
|
|
ret = -1;
|
|
|
|
g_clear_error(&err);
|
|
|
|
}
|
|
|
|
} else {
|
2017-09-07 09:01:56 +00:00
|
|
|
ret = strtol (value, &invalid, 10);
|
|
|
|
if (*invalid != '\0') {
|
|
|
|
ret = -1;
|
|
|
|
seaf_warning ("Value of config [%s:%s] is invalid: [%s]\n", group, key, value);
|
|
|
|
}
|
|
|
|
g_free (value);
|
|
|
|
}
|
|
|
|
|
|
|
|
return ret;
|
|
|
|
}
|
|
|
|
|
|
|
|
gint64
|
|
|
|
seaf_cfg_manager_get_config_int64 (SeafCfgManager *mgr, const char *group, const char *key)
|
|
|
|
{
|
|
|
|
gint64 ret;
|
|
|
|
char *invalid = NULL;
|
|
|
|
|
|
|
|
char *value = seaf_cfg_manager_get_config (mgr, group, key);
|
2018-05-21 06:03:10 +00:00
|
|
|
if (!value) {
|
|
|
|
GError *err = NULL;
|
|
|
|
ret = g_key_file_get_int64(mgr->config, group, key, &err);
|
|
|
|
if (err) {
|
|
|
|
ret = -1;
|
|
|
|
g_clear_error(&err);
|
|
|
|
}
|
|
|
|
} else {
|
2017-09-07 09:01:56 +00:00
|
|
|
ret = strtoll (value, &invalid, 10);
|
|
|
|
if (*invalid != '\0') {
|
|
|
|
seaf_warning ("Value of config [%s:%s] is invalid: [%s]\n", group, key, value);
|
|
|
|
ret = -1;
|
|
|
|
}
|
|
|
|
g_free (value);
|
|
|
|
}
|
|
|
|
|
|
|
|
return ret;
|
|
|
|
}
|
|
|
|
|
|
|
|
gboolean
|
|
|
|
seaf_cfg_manager_get_config_boolean (SeafCfgManager *mgr, const char *group, const char *key)
|
|
|
|
{
|
|
|
|
gboolean ret;
|
|
|
|
|
|
|
|
char *value = seaf_cfg_manager_get_config (mgr, group, key);
|
|
|
|
if (!value) {
|
2018-05-02 10:22:15 +00:00
|
|
|
GError *err = NULL;
|
|
|
|
ret = g_key_file_get_boolean(mgr->config, group, key, &err);
|
|
|
|
if (err) {
|
|
|
|
seaf_warning ("Config [%s:%s] not set, default is false.\n", group, key);
|
|
|
|
ret = FALSE;
|
|
|
|
g_clear_error(&err);
|
|
|
|
}
|
2017-09-07 09:01:56 +00:00
|
|
|
} else {
|
|
|
|
if (strcmp ("true", value) == 0)
|
|
|
|
ret = TRUE;
|
|
|
|
else
|
|
|
|
ret = FALSE;
|
|
|
|
g_free (value);
|
|
|
|
}
|
|
|
|
|
|
|
|
return ret;
|
|
|
|
}
|
|
|
|
|
|
|
|
char *
|
|
|
|
seaf_cfg_manager_get_config_string (SeafCfgManager *mgr, const char *group, const char *key)
|
|
|
|
{
|
|
|
|
char *ret = NULL;
|
|
|
|
|
|
|
|
char *value = seaf_cfg_manager_get_config (mgr, group, key);
|
2018-05-21 06:03:10 +00:00
|
|
|
if (!value) {
|
2018-05-02 10:22:15 +00:00
|
|
|
ret = g_key_file_get_string (mgr->config, group, key, NULL);
|
2018-05-21 06:03:10 +00:00
|
|
|
if (ret != NULL)
|
|
|
|
ret = g_strstrip(ret);
|
|
|
|
} else {
|
2017-09-07 09:01:56 +00:00
|
|
|
ret = value;
|
|
|
|
}
|
|
|
|
|
|
|
|
return ret;
|
|
|
|
}
|
|
|
|
|
|
|
|
char *
|
|
|
|
seaf_cfg_manager_get_config (SeafCfgManager *mgr, const char *group, const char *key)
|
|
|
|
{
|
|
|
|
char *sql = "SELECT value FROM SeafileConf WHERE cfg_group=? AND cfg_key=?";
|
|
|
|
char *value = seaf_db_statement_get_string(mgr->db, sql,
|
|
|
|
2, "string", group, "string", key);
|
2018-05-21 06:03:10 +00:00
|
|
|
if (value != NULL)
|
|
|
|
value = g_strstrip(value);
|
2017-09-18 06:34:51 +00:00
|
|
|
|
2017-09-07 09:01:56 +00:00
|
|
|
return value;
|
|
|
|
}
|