summaryrefslogtreecommitdiffstats
path: root/src/laymanapi.c
diff options
context:
space:
mode:
authorDetlev Casanova <detlev.casanova@gmail.com>2010-07-16 22:23:57 +0200
committerDetlev Casanova <detlev.casanova@gmail.com>2010-07-16 22:23:57 +0200
commit70bb12ccf8a86e3531826ae7bc2211061da8880a (patch)
tree5f3a56187306b22b5d78a4ac9e0123e894456ec0 /src/laymanapi.c
parent1a7e7b2b1550e79052cf52cb6c8154ee53420730 (diff)
downloadlayman-70bb12ccf8a86e3531826ae7bc2211061da8880a.tar.gz
layman-70bb12ccf8a86e3531826ae7bc2211061da8880a.tar.bz2
layman-70bb12ccf8a86e3531826ae7bc2211061da8880a.zip
Use correct value when using PyObject_IsTrue
Add function laymanAPIGetAllInfo() Make use of _laymanAPIGetAllInfos() as a common base for both laymanAPIGetAllInfo() and laymanAPIGetAllInfos() Add function laymanAPIAddRepo and laymanAPIDeleteRepo
Diffstat (limited to 'src/laymanapi.c')
-rw-r--r--src/laymanapi.c135
1 files changed, 113 insertions, 22 deletions
diff --git a/src/laymanapi.c b/src/laymanapi.c
index f524ce8..9048921 100644
--- a/src/laymanapi.c
+++ b/src/laymanapi.c
@@ -2,6 +2,8 @@
#include "interpreter.h"
#include "laymanapi.h"
+int _laymanAPIGetAllInfos(LaymanAPI* l, StringList* overlays, OverlayInfo *results, const char *overlay);
+
struct LaymanAPI
{
PyObject *object;
@@ -12,7 +14,6 @@ struct LaymanAPI
*
* The BareConfig argument must not be NULL.
*/
-
LaymanAPI* laymanAPICreate(BareConfig* config, int report_error, int output)
{
assert(NULL != config);
@@ -41,7 +42,7 @@ int laymanAPIIsRepo(LaymanAPI *l, const char* repo)
Py_DECREF(obj);
- return ret;
+ return !ret;
}
int laymanAPIIsInstalled(LaymanAPI *l, const char* repo)
@@ -59,7 +60,7 @@ int laymanAPIIsInstalled(LaymanAPI *l, const char* repo)
Py_DECREF(obj);
- return ret;
+ return !ret;
}
/*
@@ -206,9 +207,9 @@ int laymanAPIGetInfosStr(LaymanAPI* l, StringList* overlays, OverlayInfo* result
assert(NULL != tmp);
results[k].text = strdup(tmp);
- results[k].official = PyObject_IsTrue(official);
+ results[k].official = !PyObject_IsTrue(official);
assert(-1 != results[k].official);
- results[k].supported = PyObject_IsTrue(supported);
+ results[k].supported = !PyObject_IsTrue(supported);
assert(-1 != results[k].supported);
k++;
@@ -243,6 +244,26 @@ OverlayInfo *laymanAPIGetInfoStr(LaymanAPI* l, const char* overlay)
return oi;
}
+OverlayInfo *laymanAPIGetAllInfo(LaymanAPI* l, const char* overlay)
+{
+ // Check input data.
+ if (!l || !l->object || !overlay)
+ return NULL;
+
+ // Prepare the structure to be returned.
+ OverlayInfo *ret = calloc(1, sizeof(OverlayInfo));
+
+ // Fill it in.
+ if (0 == _laymanAPIGetAllInfos(l, NULL, ret, overlay))
+ {
+ free(ret);
+ return NULL;
+ }
+
+ // Return it
+ return ret;
+}
+
/*
* Gives a list of OverlayInfo's from the overaly names found in the overlays StringList.
* results must be allocated and initialized with zeroes.
@@ -254,16 +275,42 @@ OverlayInfo *laymanAPIGetInfoStr(LaymanAPI* l, const char* overlay)
*/
int laymanAPIGetAllInfos(LaymanAPI* l, StringList* overlays, OverlayInfo *results)
{
+ return _laymanAPIGetAllInfos(l, overlays, results, NULL);
+}
+
+/*
+ * Gives a list of OverlayInfo's from the overaly names found in the overlays StringList if it's not NULL
+ * If it's NULL, and overlay is not NULL, the information for Overlay will be fetched.
+ * results must be allocated and initialized with zeroes.
+ *
+ * If an information is unavailable (no owner email for example),
+ * the correpsonding field will stay to NULL
+ *
+ * Returns the number of OverlayInfo structures filled.
+ */
+int _laymanAPIGetAllInfos(LaymanAPI* l, StringList* overlays, OverlayInfo *results, const char *overlay)
+{
// Check input data.
- if (!l || !l->object || !overlays || !results)
+ if (!l || !l->object || !results || (!overlays && !overlay))
return 0;
- // Convert the StringList to a Python list object.
- PyObject *list = cListToPyList(overlays);
+ PyObject *obj = NULL;
- // Call the method
- PyObject *obj = PyObject_CallMethod(l->object, "get_all_info", "(O)", list);
- Py_DECREF(list);
+ // First case : overlay list
+ if (overlays != NULL)
+ {
+ // Convert the StringList to a Python list object.
+ PyObject *list = cListToPyList(overlays);
+
+ // Call the method
+ obj = PyObject_CallMethod(l->object, "get_all_info", "(O)", list);
+ Py_DECREF(list);
+ }
+ // Second case : overlay name
+ else if (overlay != NULL)
+ {
+ obj = PyObject_CallMethod(l->object, "get_all_info", "(s)", overlay);
+ }
// Check if the returned value is a dict as expected.
if (!obj || !PyDict_Check(obj))
@@ -335,9 +382,9 @@ int laymanAPIGetAllInfos(LaymanAPI* l, StringList* overlays, OverlayInfo *result
results[k].srcUris = listToCList(srcUris);
// If official or supported is neither True or False, abort.
- results[k].official = PyObject_IsTrue(official);
+ results[k].official = !PyObject_IsTrue(official);
assert(-1 != results[k].official);
- results[k].supported = PyObject_IsTrue(supported);
+ results[k].supported = !PyObject_IsTrue(supported);
assert(-1 != results[k].supported);
k++;
@@ -349,9 +396,26 @@ int laymanAPIGetAllInfos(LaymanAPI* l, StringList* overlays, OverlayInfo *result
return k;
}
-/*
- * TODO:implement the same for only 1 repo
- */
+int laymanAPIAddRepo(LaymanAPI* l, const char *repo)
+{
+ if (!l || !l->object || !repo)
+ return 0;
+
+ // Call the method
+ PyObject *obj = PyObject_CallMethod(l->object, "delete_repos", "(s)", repo);
+
+ // If the call returned NULL, it failed.
+ int ret;
+ if (!obj)
+ ret = 0;
+ else
+ ret = 1;
+
+ Py_DECREF(obj);
+
+ return ret;
+}
+
int laymanAPIAddRepos(LaymanAPI* l, StringList *repos)
{
if (!l || !l->object || !repos)
@@ -365,15 +429,37 @@ int laymanAPIAddRepos(LaymanAPI* l, StringList *repos)
Py_DECREF(pyrepos);
// If the call returned NULL, it failed.
+ int ret;
if (!obj)
+ ret = 0;
+ else
+ ret = 1;
+
+ Py_DECREF(obj);
+
+ return ret;
+}
+
+int laymanAPIDeleteRepo(LaymanAPI* l, const char *repo)
+{
+ if (!l || !l->object || !repo)
return 0;
- return 1;
+ // Call the method
+ PyObject *obj = PyObject_CallMethod(l->object, "delete_repos", "(s)", repo);
+
+ // If the call returned NULL, it failed.
+ int ret;
+ if (!obj)
+ ret = 0;
+ else
+ ret = 1;
+
+ Py_DECREF(obj);
+
+ return ret;
}
-/*
- * TODO:implement the same for only 1 repo
- */
int laymanAPIDeleteRepos(LaymanAPI* l, StringList *repos)
{
if (!l || !l->object || !repos)
@@ -387,10 +473,15 @@ int laymanAPIDeleteRepos(LaymanAPI* l, StringList *repos)
Py_DECREF(pyrepos);
// If the call returned NULL, it failed.
+ int ret;
if (!obj)
- return 0;
+ ret = 0;
+ else
+ ret = 1;
+
+ Py_DECREF(obj);
- return 1;
+ return ret;
}
/*