about summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorJames Booth <boothj5@gmail.com>2016-08-01 21:34:38 +0100
committerJames Booth <boothj5@gmail.com>2016-08-01 21:34:38 +0100
commit2518aa5078e8774091c189993f1e295bde1b93ee (patch)
tree6c8986739e3b0be309c44573616d787f95a94a02
parent30e96b2d0f6cbda9065220b76dba0f6e90d59ef9 (diff)
downloadprofani-tty-2518aa5078e8774091c189993f1e295bde1b93ee.tar.gz
Add string lists settings to plugins
-rw-r--r--src/plugins/api.c24
-rw-r--r--src/plugins/api.h4
-rw-r--r--src/plugins/c_api.c28
-rw-r--r--src/plugins/profapi.c4
-rw-r--r--src/plugins/profapi.h4
-rw-r--r--src/plugins/python_api.c125
-rw-r--r--src/plugins/settings.c40
-rw-r--r--src/plugins/settings.h4
8 files changed, 233 insertions, 0 deletions
diff --git a/src/plugins/api.c b/src/plugins/api.c
index 8011dee5..2c903b97 100644
--- a/src/plugins/api.c
+++ b/src/plugins/api.c
@@ -422,6 +422,30 @@ api_settings_set_string(const char *const group, const char *const key, const ch
     plugin_settings_set_string(group, key, value);
 }
 
+char**
+api_settings_get_string_list(const char *const group, const char *const key)
+{
+    return plugin_settings_get_string_list(group, key);
+}
+
+void
+api_settings_string_list_add(const char *const group, const char *const key, const char *const value)
+{
+    plugin_settings_string_list_add(group, key, value);
+}
+
+int
+api_settings_string_list_remove(const char *const group, const char *const key, const char *const value)
+{
+    return plugin_settings_string_list_remove(group, key, value);
+}
+
+void
+api_settings_string_list_remove_all(const char *const group, const char *const key)
+{
+    plugin_settings_string_list_remove_all(group, key);
+}
+
 int
 api_settings_get_int(const char *const group, const char *const key, int def)
 {
diff --git a/src/plugins/api.h b/src/plugins/api.h
index 5886dae2..1e6c4bd2 100644
--- a/src/plugins/api.h
+++ b/src/plugins/api.h
@@ -84,6 +84,10 @@ char* api_settings_get_string(const char *const group, const char *const key, co
 void api_settings_set_string(const char *const group, const char *const key, const char *const value);
 int api_settings_get_int(const char *const group, const char *const key, int def);
 void api_settings_set_int(const char *const group, const char *const key, int value);
+char** api_settings_get_string_list(const char *const group, const char *const key);
+void api_settings_string_list_add(const char *const group, const char *const key, const char *const value);
+int api_settings_string_list_remove(const char *const group, const char *const key, const char *const value);
+void api_settings_string_list_remove_all(const char *const group, const char *const key);
 
 void api_incoming_message(const char *const barejid, const char *const resource, const char *const message);
 
diff --git a/src/plugins/c_api.c b/src/plugins/c_api.c
index 26cb0c00..47efa49e 100644
--- a/src/plugins/c_api.c
+++ b/src/plugins/c_api.c
@@ -274,6 +274,30 @@ c_api_settings_set_string(char *group, char *key, char *value)
     api_settings_set_string(group, key, value);
 }
 
+static char**
+c_api_settings_get_string_list(char *group, char *key)
+{
+    return api_settings_get_string_list(group, key);
+}
+
+static void
+c_api_settings_string_list_add(char *group, char *key, char* value)
+{
+    api_settings_string_list_add(group, key, value);
+}
+
+static int
+c_api_settings_string_list_remove(char *group, char *key, char *value)
+{
+    return api_settings_string_list_remove(group, key, value);
+}
+
+static void
+c_api_settings_string_list_remove_all(char *group, char *key)
+{
+    api_settings_string_list_remove_all(group, key);
+}
+
 static int
 c_api_settings_get_int(char *group, char *key, int def)
 {
@@ -357,6 +381,10 @@ c_api_init(void)
     prof_settings_set_string = c_api_settings_set_string;
     prof_settings_get_int = c_api_settings_get_int;
     prof_settings_set_int = c_api_settings_set_int;
+    prof_settings_get_string_list = c_api_settings_get_string_list;
+    prof_settings_string_list_add = c_api_settings_string_list_add;
+    prof_settings_string_list_remove = c_api_settings_string_list_remove;
+    prof_settings_string_list_remove_all = c_api_settings_string_list_remove_all;
     prof_incoming_message = c_api_incoming_message;
     prof_disco_add_feature = c_api_disco_add_feature;
 }
diff --git a/src/plugins/profapi.c b/src/plugins/profapi.c
index 9b99a944..6e51a642 100644
--- a/src/plugins/profapi.c
+++ b/src/plugins/profapi.c
@@ -81,6 +81,10 @@ char* (*prof_settings_get_string)(char *group, char *key, char *def) = NULL;
 void (*prof_settings_set_string)(char *group, char *key, char *value) = NULL;
 int (*prof_settings_get_int)(char *group, char *key, int def) = NULL;
 void (*prof_settings_set_int)(char *group, char *key, int value) = NULL;
+char** (*prof_settings_get_string_list)(char *group, char *key) = NULL;
+void (*prof_settings_string_list_add)(char *group, char *key, char *value) = NULL;
+int (*prof_settings_string_list_remove)(char *group, char *key, char *value) = NULL;
+void (*prof_settings_string_list_remove_all)(char *group, char *key) = NULL;
 
 void (*prof_incoming_message)(char *barejid, char *resource, char *message) = NULL;
 
diff --git a/src/plugins/profapi.h b/src/plugins/profapi.h
index 58e41fc1..57c4eaf7 100644
--- a/src/plugins/profapi.h
+++ b/src/plugins/profapi.h
@@ -91,6 +91,10 @@ char* (*prof_settings_get_string)(char *group, char *key, char *def);
 void (*prof_settings_set_string)(char *group, char *key, char *value);
 int (*prof_settings_get_int)(char *group, char *key, int def);
 void (*prof_settings_set_int)(char *group, char *key, int value);
+char** (*prof_settings_get_string_list)(char *group, char *key);
+void (*prof_settings_string_list_add)(char *group, char *key, char *value);
+int (*prof_settings_string_list_remove)(char *group, char *key, char *value);
+void (*prof_settings_string_list_remove_all)(char *group, char *key);
 
 void (*prof_incoming_message)(char *barejid, char *resource, char *message);
 
diff --git a/src/plugins/python_api.c b/src/plugins/python_api.c
index ee8a874c..83fbcc1d 100644
--- a/src/plugins/python_api.c
+++ b/src/plugins/python_api.c
@@ -820,6 +820,127 @@ python_api_settings_set_int(PyObject *self, PyObject *args)
 }
 
 static PyObject*
+python_api_settings_get_string_list(PyObject *self, PyObject *args)
+{
+    PyObject *group = NULL;
+    PyObject *key = NULL;
+
+    if (!PyArg_ParseTuple(args, "OO", &group, &key)) {
+        Py_RETURN_NONE;
+    }
+
+    char *group_str = python_str_or_unicode_to_string(group);
+    char *key_str = python_str_or_unicode_to_string(key);
+
+    allow_python_threads();
+    char** c_list = api_settings_get_string_list(group_str, key_str);
+    free(group_str);
+    free(key_str);
+    disable_python_threads();
+
+    if (!c_list) {
+        log_debug("NO ITEMS");
+        Py_RETURN_NONE;
+    }
+
+
+    int len = g_strv_length(c_list);
+    log_debug("GOT ITEMS: %d", len);
+    PyObject *py_list = PyList_New(0);
+    log_debug("CRETED LIST");
+    int i = 0;
+    for (i = 0; i < len; i++) {
+        log_debug("ADDING %s", c_list[i]);
+        PyObject *py_curr = Py_BuildValue("s", c_list[i]);
+        int res = PyList_Append(py_list, py_curr);
+        log_debug("Created object");
+        if (res != 0) {
+            log_debug("ERROR");
+            Py_RETURN_NONE;
+        }
+        log_debug("Added");
+    }
+
+    return Py_BuildValue("O", py_list);
+}
+
+static PyObject*
+python_api_settings_string_list_add(PyObject *self, PyObject *args)
+{
+    PyObject *group = NULL;
+    PyObject *key = NULL;
+    PyObject *val = NULL;
+
+    if (!PyArg_ParseTuple(args, "OOO", &group, &key, &val)) {
+        Py_RETURN_NONE;
+    }
+
+    char *group_str = python_str_or_unicode_to_string(group);
+    char *key_str = python_str_or_unicode_to_string(key);
+    char *val_str = python_str_or_unicode_to_string(val);
+
+    allow_python_threads();
+    api_settings_string_list_add(group_str, key_str, val_str);
+    free(group_str);
+    free(key_str);
+    free(val_str);
+    disable_python_threads();
+
+    Py_RETURN_NONE;
+}
+
+static PyObject*
+python_api_settings_string_list_remove(PyObject *self, PyObject *args)
+{
+    PyObject *group = NULL;
+    PyObject *key = NULL;
+    PyObject *val = NULL;
+
+    if (!PyArg_ParseTuple(args, "OOO", &group, &key, &val)) {
+        Py_RETURN_NONE;
+    }
+
+    char *group_str = python_str_or_unicode_to_string(group);
+    char *key_str = python_str_or_unicode_to_string(key);
+    char *val_str = python_str_or_unicode_to_string(val);
+
+    allow_python_threads();
+    int res = api_settings_string_list_remove(group_str, key_str, val_str);
+    free(group_str);
+    free(key_str);
+    free(val_str);
+    disable_python_threads();
+
+    if (res) {
+        return Py_BuildValue("O", Py_True);
+    } else {
+        return Py_BuildValue("O", Py_False);
+    }
+}
+
+static PyObject*
+python_api_settings_string_list_remove_all(PyObject *self, PyObject *args)
+{
+    PyObject *group = NULL;
+    PyObject *key = NULL;
+
+    if (!PyArg_ParseTuple(args, "OO", &group, &key)) {
+        Py_RETURN_NONE;
+    }
+
+    char *group_str = python_str_or_unicode_to_string(group);
+    char *key_str = python_str_or_unicode_to_string(key);
+
+    allow_python_threads();
+    api_settings_string_list_remove_all(group_str, key_str);
+    free(group_str);
+    free(key_str);
+    disable_python_threads();
+
+    Py_RETURN_NONE;
+}
+
+static PyObject*
 python_api_incoming_message(PyObject *self, PyObject *args)
 {
     PyObject *barejid = NULL;
@@ -962,6 +1083,10 @@ static PyMethodDef apiMethods[] = {
     { "settings_set_string", python_api_settings_set_string, METH_VARARGS, "Set a string setting." },
     { "settings_get_int", python_api_settings_get_int, METH_VARARGS, "Get a integer setting." },
     { "settings_set_int", python_api_settings_set_int, METH_VARARGS, "Set a integer setting." },
+    { "settings_get_string_list", python_api_settings_get_string_list, METH_VARARGS, "Get a string list setting." },
+    { "settings_string_list_add", python_api_settings_string_list_add, METH_VARARGS, "Add item to string list setting." },
+    { "settings_string_list_remove", python_api_settings_string_list_remove, METH_VARARGS, "Remove item from string list setting." },
+    { "settings_string_list_remove_all", python_api_settings_string_list_remove_all, METH_VARARGS, "Remove all items from string list setting." },
     { "incoming_message", python_api_incoming_message, METH_VARARGS, "Show an incoming message." },
     { "disco_add_feature", python_api_disco_add_feature, METH_VARARGS, "Add a feature to disco info response." },
     { NULL, NULL, 0, NULL }
diff --git a/src/plugins/settings.c b/src/plugins/settings.c
index 992390cf..8a42095a 100644
--- a/src/plugins/settings.c
+++ b/src/plugins/settings.c
@@ -41,6 +41,7 @@
 #include "common.h"
 #include "config/theme.h"
 #include "config/files.h"
+#include "config/conflists.h"
 
 static GKeyFile *settings;
 
@@ -126,6 +127,45 @@ plugin_settings_set_int(const char *const group, const char *const key, int valu
     _save_settings();
 }
 
+gchar**
+plugin_settings_get_string_list(const char *const group, const char *const key)
+{
+    if (!g_key_file_has_key(settings, group, key, NULL)) {
+        return NULL;
+    }
+
+    return g_key_file_get_string_list(settings, group, key, NULL, NULL);
+}
+
+int
+plugin_settings_string_list_add(const char *const group, const char *const key, const char *const value)
+{
+    int res = conf_string_list_add(settings, group, key, value);
+    _save_settings();
+
+    return res;
+}
+
+int
+plugin_settings_string_list_remove(const char *const group, const char *const key, const char *const value)
+{
+    int res = conf_string_list_remove(settings, group, key, value);
+    _save_settings();
+
+    return res;
+}
+
+void
+plugin_settings_string_list_remove_all(const char *const group, const char *const key)
+{
+    if (!g_key_file_has_key(settings, group, key, NULL)) {
+        return;
+    }
+
+    g_key_file_remove_key(settings, group, key, NULL);
+    _save_settings();
+}
+
 static void
 _save_settings(void)
 {
diff --git a/src/plugins/settings.h b/src/plugins/settings.h
index 09913243..8d1a6954 100644
--- a/src/plugins/settings.h
+++ b/src/plugins/settings.h
@@ -44,5 +44,9 @@ char* plugin_settings_get_string(const char *const group, const char *const key,
 void plugin_settings_set_string(const char *const group, const char *const key, const char *const value);
 int plugin_settings_get_int(const char *const group, const char *const key, int def);
 void plugin_settings_set_int(const char *const group, const char *const key, int value);
+char** plugin_settings_get_string_list(const char *const group, const char *const key);
+void plugin_settings_string_list_add(const char *const group, const char *const key, const char *const value);
+int plugin_settings_string_list_remove(const char *const group, const char *const key, const char *const value);
+void plugin_settings_string_list_remove_all(const char *const group, const char *const key);
 
 #endif