1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
|
#include <Python.h>
#include "interpreter.h"
#include "overlay.h"
struct Overlay
{
PyObject *object;
};
/*
* FIXME: should the xml argument be an expat element ?
*/
Overlay *createOverlay(const char *xml, const char *config, int ignore, int quiet)
{
//First argument must be a xml.etree.Element
//PyObject *elem = executeFunction("layman.overlays.overlay", "testfunc", NULL);
PyObject *elem = executeFunction("xml.etree.ElementTree", "fromstring", "(s)", xml);
if (!elem)
return NULL;
config = config;
PyObject *cfg = PyDict_New();
if (!cfg)
return NULL;
PyObject *overlay = executeFunction("layman.overlays.overlay", "Overlay", "(OOIb)", elem, cfg, ignore, quiet);
if (!overlay)
return NULL;
Overlay *ret = malloc(sizeof(Overlay));
ret->object = overlay;
return ret;
}
const char *overlayName(Overlay *o)
{
if (!o || !o->object)
return NULL;
PyObject *name = PyObject_GetAttrString(o->object, "name");
//TODO:Py_DECREF me !
return PyBytes_AsString(name);
}
const char *overlayOwnerEmail(Overlay *o)
{
if (!o || !o->object)
return NULL;
PyObject *ret = PyObject_GetAttrString(o->object, "owner_email");
//TODO:Py_DECREF me !
return PyBytes_AsString(ret);
}
int overlayPriority(Overlay *o)
{
if (!o || !o->object)
return -1;
PyObject *prio = PyObject_GetAttrString(o->object, "priority");
//TODO:Py_DECREF me !
return (int) PyLong_AsLong(prio);
}
const char *overlayDescription(Overlay *o)
{
if (!o || !o->object)
return NULL;
PyObject *desc = PyObject_GetAttrString(o->object, "description");
//TODO:Py_DECREF me !
return PyBytes_AsString(desc);
}
int overlayIsOfficial(Overlay *o)
{
if (!o || !o->object)
return -1;
PyObject *iso = PyObject_CallMethod(o->object, "is_official", NULL);
//TODO:Py_DECREF me !
return (int) PyLong_AsLong(iso);
}
void overlayFree(Overlay *o)
{
if (o && o->object)
Py_DECREF(o->object);
if (o)
free(o);
}
|