diff options
author | Detlev Casanova <detlev.casanova@gmail.com> | 2010-07-15 16:11:49 +0200 |
---|---|---|
committer | Detlev Casanova <detlev.casanova@gmail.com> | 2010-07-15 16:11:49 +0200 |
commit | 2e6f2b74e2c1c66afcadc67af1df1b112ba15cdb (patch) | |
tree | ee4d1fdb2d66a01f4498ce05271e3b167528e9aa /src/laymanapi.c | |
parent | dfa1e0f4d7b908dc499421cf75d5462a9df8cc37 (diff) | |
download | layman-2e6f2b74e2c1c66afcadc67af1df1b112ba15cdb.tar.gz layman-2e6f2b74e2c1c66afcadc67af1df1b112ba15cdb.tar.bz2 layman-2e6f2b74e2c1c66afcadc67af1df1b112ba15cdb.zip |
Fix a warning in Dict
Add a method to get info for a list of overlays
Diffstat (limited to 'src/laymanapi.c')
-rw-r--r-- | src/laymanapi.c | 71 |
1 files changed, 58 insertions, 13 deletions
diff --git a/src/laymanapi.c b/src/laymanapi.c index 7620869..5de0140 100644 --- a/src/laymanapi.c +++ b/src/laymanapi.c @@ -11,12 +11,6 @@ struct LaymanAPI PyObject *object; }; -OverlayInfo strToInfo(const char* str) -{ - OverlayInfo ret; - return ret; -} - LaymanAPI* laymanAPICreate(BareConfig* config, int report_error, int output) { PyObject *obj = executeFunction("layman.api", "LaymanAPI", "Oii", _bareConfigObject(config), report_error, output); @@ -41,11 +35,6 @@ StringList* laymanAPIGetAvailable(LaymanAPI* l, int reload) return ret; } -/*StringList* laymanAPIGetInstalled(LaymanAPI* l) -{ - return laymanAPIGetInstalled(l, 0); -}*/ - StringList* laymanAPIGetInstalled(LaymanAPI* l, int reload) { if (!l || !l->object) @@ -97,13 +86,69 @@ int laymanAPIFetchRemoteList(LaymanAPI* l) return ret; } +int laymanAPIGetInfoList(LaymanAPI* l, StringList* overlays, OverlayInfo* results) +{ + if (!l || !l->object || !overlays || !results) + return 0; + + PyObject *list = cListToPyList(overlays); + + PyObject *obj = PyObject_CallMethod(l->object, "get_info", "(O)", list); + Py_DECREF(list); + + if (!obj || !PyDict_Check(obj)) + { + if (obj) + { + Py_DECREF(obj); + } + return 0; + } + + PyObject *name, *tuple; + Py_ssize_t i = 0; + + int k = 0; + + while (PyDict_Next(obj, &i, &name, &tuple)) + { + if (!tuple || !PyTuple_Check(tuple)) + { + Py_DECREF(obj); + continue; + } + + PyObject *text = PyTuple_GetItem(tuple, 0); + PyObject *official = PyTuple_GetItem(tuple, 1); + PyObject *supported = PyTuple_GetItem(tuple, 2); + + if (!PyString_Check(text) || !PyString_Check(name)) + continue; + + char* tmp = PyString_AsString(name); + results[k].name = malloc((strlen(tmp) + 1) * sizeof(char)); + strcpy(results[k].name, tmp); + + tmp = PyString_AsString(text); + results[k].text = malloc((strlen(tmp) + 1) * sizeof(char)); + strcpy(results[k].text, tmp); + + results[k].official = PyObject_IsTrue(official); + results[k].supported = PyObject_IsTrue(supported); + k++; + } + + Py_DECREF(obj); + return k; +} + OverlayInfo *laymanAPIGetInfo(LaymanAPI* l, const char* overlay) { if (!l || !l->object || !overlay) return NULL; PyObject *list = PyList_New(1); - PyList_SetItem(list, 0, PyBytes_FromString(overlay)); + PyList_SetItem(list, 0, PyString_FromString(overlay)); PyObject *obj = PyObject_CallMethod(l->object, "get_info", "(O)", list); Py_DECREF(list); @@ -136,7 +181,7 @@ OverlayInfo *laymanAPIGetInfo(LaymanAPI* l, const char* overlay) OverlayInfo *oi = malloc(sizeof(OverlayInfo)); - char* tmp = PyBytes_AsString(text); + char* tmp = PyString_AsString(text); oi->text = malloc((strlen(tmp) + 1) * sizeof(char)); strcpy(oi->text, tmp); |