aboutsummaryrefslogtreecommitdiff
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
parentAdd laymanAPIIsRepo, laymanAPIIsInstalled, laymanAPIGetInfosStr, (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
-rw-r--r--src/laymanapi.c135
-rw-r--r--src/laymanapi.h8
-rw-r--r--src/tester.c27
3 files changed, 138 insertions, 32 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;
}
/*
diff --git a/src/laymanapi.h b/src/laymanapi.h
index f18d588..94b0591 100644
--- a/src/laymanapi.h
+++ b/src/laymanapi.h
@@ -23,8 +23,8 @@ typedef struct OverlayInfo
} OverlayInfo;
LaymanAPI* laymanAPICreate(BareConfig*, int, int);
-int laymanAPIIsRepo(LaymanAPI *l, const char* repo)
-int laymanAPIIsInstalled(LaymanAPI *l, const char* repo)
+int laymanAPIIsRepo(LaymanAPI *l, const char* repo);
+int laymanAPIIsInstalled(LaymanAPI *l, const char* repo);
StringList* laymanAPIGetAvailable(LaymanAPI*, int reload);
StringList* laymanAPIGetInstalled(LaymanAPI*, int reload);
int laymanAPISync(LaymanAPI* l, const char* overlay, int verbose);
@@ -32,8 +32,10 @@ int laymanAPIFetchRemoteList(LaymanAPI*);
int laymanAPIGetInfosStr(LaymanAPI* l, StringList* overlays, OverlayInfo* results);
OverlayInfo* laymanAPIGetInfoStr(LaymanAPI* l, const char* overlay);
int laymanAPIGetAllInfos(LaymanAPI* l, StringList*, OverlayInfo*);
-//OverlayInfo* laymanAPIGetAllInfo(LaymanAPI* l, const char*);
+OverlayInfo* laymanAPIGetAllInfo(LaymanAPI* l, const char*);
+int laymanAPIAddRepo(LaymanAPI* l, const char *repo);
int laymanAPIAddRepos(LaymanAPI* l, StringList *repos);
+int laymanAPIDeleteRepo(LaymanAPI* l, const char *repo);
int laymanAPIDeleteRepos(LaymanAPI* l, StringList *repos);
OverlayInfo* laymanAPIGetInfo(LaymanAPI* l, const char* overlay);
void laymanAPIFree(LaymanAPI*);
diff --git a/src/tester.c b/src/tester.c
index 3a80ec2..3268f66 100644
--- a/src/tester.c
+++ b/src/tester.c
@@ -35,19 +35,32 @@ int main(int argc, char *argv[])
printf("\n");
unsigned int len = stringListCount(strs);
- OverlayInfo *infos = calloc(len, sizeof(OverlayInfo));
- int count = laymanAPIGetAllInfos(l, strs, infos);
+ //OverlayInfo *infos = calloc(len, sizeof(OverlayInfo));
+ //int count = laymanAPIGetAllInfos(l, strs, infos);
- for (unsigned int i = 0; i < count; i++)
+ OverlayInfo *oi = laymanAPIGetAllInfo(l, "enlightenment");
+ if (oi)
{
- printf("%s\n~~~~~~~~~~~~~~~~~~~~\n", infos[i].name);
- printf("%s\n\n", infos[i].description);
- overlayInfoFree(infos[i]);
+ printf("%s\n~~~~~~~~~~~~~~~~~~~~\n", oi->name);
+ printf("%s\n\n", oi->description);
+ overlayInfoFree(*oi);
+ free(oi);
+ }
+
+ for (unsigned int i = 0; i < len; i++)
+ {
+ OverlayInfo *oi = laymanAPIGetAllInfo(l, stringListGetAt(strs, i));
+ if (!oi)
+ continue;
+ printf("%s\n~~~~~~~~~~~~~~~~~~~~\n", oi->name);
+ printf("%s\n\n", oi->description);
+ overlayInfoFree(*oi);
+ free(oi);
}
printf("\n");
- free(infos);
+ //free(infos);
bareConfigFree(cfg);
laymanAPIFree(l);