3 #define NO_IMPORT_PYGOBJECT
5 #include <pygtk/pygtk.h>
7 #include "override_common.h"
10 #include "rhythmdb-property-model.h"
11 #include "rhythmdb-query-model.h"
12 #include "rhythmdb-query-results.h"
14 void pyrhythmdb_register_classes (PyObject *d);
15 void pyrhythmdb_add_constants (PyObject *module, const gchar *strip_prefix);
17 /* hacks to deal with the nonstandard class name RHYTHMDB */
18 #define RHYTHMDB_TYPE_RHYTHMDB RHYTHMDB_TYPE
19 #define RHYTHMDB_RHYTHMDB(o) RHYTHMDB(o)
22 /* query model sorting stuff */
26 } PyRhythmDBQueryModelSortData;
29 _rhythmdb_query_model_sort_data_free (PyRhythmDBQueryModelSortData *data)
31 Py_DECREF (data->func);
32 Py_DECREF (data->data);
37 _rhythmdb_query_model_sort_func (RhythmDBEntry *a, RhythmDBEntry *b, PyRhythmDBQueryModelSortData *data)
41 PyObject *py_a, *py_b;
44 py_a = pyg_pointer_new (RHYTHMDB_TYPE_ENTRY, a);
45 py_b = pyg_pointer_new (RHYTHMDB_TYPE_ENTRY, b);
47 args = Py_BuildValue ("(OOO)", py_a, py_b, data->data);
49 args = Py_BuildValue ("(O)", py_a, py_b);
51 py_result = PyEval_CallObject (data->func, args);
52 result = PyInt_AsLong (py_result);
55 Py_DECREF (py_result);
58 /* end query model sorting stuff */
63 import gtk.Widget as PyGtkWidget_Type
64 import gobject.GObject as PyGObject_Type
65 import gtk.TreeView as PyGtkTreeView_Type
72 rhythmdb_entry_get_pointer
73 rhythmdb_entry_get_string
74 rhythmdb_entry_get_boolean
75 rhythmdb_entry_get_uint64
76 rhythmdb_entry_get_ulong
77 rhythmdb_entry_get_double
78 rhythmdb_query_model_tree_path_to_entry
79 rhythmdb_query_model_iter_to_entry
81 override rhythmdb_entry_get kwargs
83 _wrap_rhythmdb_entry_get(PyGObject *self, PyObject *args, PyObject *kwargs)
85 static char *kwlist[] = { "entry", "propid", NULL };
86 PyObject *py_propid = NULL;
87 PyObject *entry = NULL;
89 RhythmDBPropType propid;
93 if (!PyArg_ParseTupleAndKeywords(args, kwargs, "OO:RhythmDB.entry_get", kwlist, &entry, &py_propid))
95 if (pyg_enum_get_value(RHYTHMDB_TYPE_PROP_TYPE, py_propid, (gint *)&propid))
98 db = RHYTHMDB (self->obj);
99 g_value_init (&value, rhythmdb_get_property_type (db, propid));
100 rhythmdb_entry_get(db, pyg_pointer_get (entry, RhythmDBEntry), propid, &value);
101 ret = pyg_value_as_pyobject (&value, TRUE);
102 g_value_unset (&value);
109 override rhythmdb_entry_set kwargs
111 _wrap_rhythmdb_entry_set(PyGObject *self, PyObject *args, PyObject *kwargs)
113 static char *kwlist[] = { "entry", "propid", "value", NULL };
114 PyObject *py_entry = NULL;
115 PyObject *py_propid = NULL;
116 PyObject *py_value = NULL;
117 RhythmDBEntry *entry;
118 RhythmDBPropType propid;
121 if (!PyArg_ParseTupleAndKeywords(args, kwargs, "OOO:RhythmDBEntry.set", kwlist, &py_entry, &py_propid, &py_value))
123 if (pyg_pointer_check(py_entry, RHYTHMDB_TYPE_ENTRY))
124 entry = pyg_pointer_get(py_entry, RhythmDBEntry);
126 PyErr_SetString(PyExc_TypeError, "entry should be a RhythmDBEntry");
129 if (pyg_enum_get_value(RHYTHMDB_TYPE_PROP_TYPE, py_propid, (gint *)&propid))
131 g_value_init(&value, rhythmdb_get_property_type (RHYTHMDB(self->obj), propid));
132 if (pyg_value_from_pyobject(&value, py_value) < 0) {
133 PyErr_SetString(PyExc_TypeError,
134 "could not convert argument to correct param type");
137 rhythmdb_entry_set(RHYTHMDB(self->obj), entry, propid, &value);
138 g_value_unset (&value);
143 override rhythmdb_entry_set_nonotify kwargs
145 _wrap_rhythmdb_entry_set_nonotify(PyGObject *self, PyObject *args, PyObject *kwargs)
147 static char *kwlist[] = { "entry", "propid", "value", NULL };
148 PyObject *py_entry = NULL;
149 PyObject *py_propid = NULL;
150 PyObject *py_value = NULL;
151 RhythmDBEntry *entry;
152 RhythmDBPropType propid;
155 if (!PyArg_ParseTupleAndKeywords(args, kwargs, "OOO:RhythmDBEntry.set_nonotify", kwlist, &py_entry, &py_propid, &py_value))
157 if (pyg_pointer_check(py_entry, RHYTHMDB_TYPE_ENTRY))
158 entry = pyg_pointer_get(py_entry, RhythmDBEntry);
160 PyErr_SetString(PyExc_TypeError, "entry should be a RhythmDBEntry");
163 if (pyg_enum_get_value(RHYTHMDB_TYPE_PROP_TYPE, py_propid, (gint *)&propid))
165 g_value_init(&value, rhythmdb_get_property_type (RHYTHMDB(self->obj), propid));
166 if (pyg_value_from_pyobject(&value, py_value) < 0) {
167 PyErr_SetString(PyExc_TypeError,
168 "could not convert argument to correct param type");
171 rhythmdb_entry_set_nonotify(RHYTHMDB(self->obj), entry, propid, &value);
172 g_value_unset (&value);
177 override rhythmdb_entry_set_uninserted kwargs
179 _wrap_rhythmdb_entry_set_uninserted(PyGObject *self, PyObject *args, PyObject *kwargs)
181 static char *kwlist[] = { "entry", "propid", "value", NULL };
182 PyObject *py_entry = NULL;
183 PyObject *py_propid = NULL;
184 PyObject *py_value = NULL;
185 RhythmDBEntry *entry;
186 RhythmDBPropType propid;
189 if (!PyArg_ParseTupleAndKeywords(args, kwargs, "OOO:RhythmDBEntry.set_uninserted", kwlist, &py_entry, &py_propid, &py_value))
191 if (pyg_pointer_check(py_entry, RHYTHMDB_TYPE_ENTRY))
192 entry = pyg_pointer_get(py_entry, RhythmDBEntry);
194 PyErr_SetString(PyExc_TypeError, "entry should be a RhythmDBEntry");
197 if (pyg_enum_get_value(RHYTHMDB_TYPE_PROP_TYPE, py_propid, (gint *)&propid))
199 g_value_init(&value, rhythmdb_get_property_type (RHYTHMDB(self->obj), propid));
200 if (pyg_value_from_pyobject(&value, py_value) < 0) {
201 PyErr_SetString(PyExc_TypeError,
202 "could not convert argument to correct param type");
205 rhythmdb_entry_set_uninserted(RHYTHMDB(self->obj), entry, propid, &value);
206 g_value_unset (&value);
211 override rhythmdb_query_results_add_results kwargs
213 _wrap_rhythmdb_query_results_add_results (PyGObject *self, PyObject *args, PyObject *kwargs)
215 static char *kwlist[] = { "entries", NULL };
216 PyObject *py_entries = NULL;
220 if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O:RhythmDBQueryResults.add_results", kwlist, &py_entries))
223 array = g_ptr_array_new();
224 size = PyList_Size(py_entries);
225 for (i = 0; i < size; i++) {
227 RhythmDBEntry *entry;
229 py_entry = PyList_GetItem(py_entries, i);
230 if (!pyg_pointer_check(py_entry, RHYTHMDB_TYPE_ENTRY)) {
231 g_ptr_array_free(array, FALSE);
235 entry = pyg_pointer_get(py_entry, RhythmDBEntry);
236 g_ptr_array_add(array, entry);
239 rhythmdb_query_results_add_results (RHYTHMDB_QUERY_RESULTS(self->obj), array);
240 g_ptr_array_free(array, FALSE);
247 override rhythmdb_entry_foreach kwargs
252 } PyRhythmDBEntryForeachData;
255 _rhythmdb_entry_foreach_func (RhythmDBEntry *entry, PyRhythmDBEntryForeachData *data)
261 py_entry = pyg_pointer_new (RHYTHMDB_TYPE_ENTRY, entry);
263 args = Py_BuildValue ("(OO)", py_entry, data->data);
265 args = Py_BuildValue ("(O)", py_entry);
267 result = PyEval_CallObject (data->func, args);
274 _wrap_rhythmdb_entry_foreach (PyGObject *self, PyObject *args, PyObject *kwargs)
276 static char *kwlist[] = {"func", NULL};
277 PyRhythmDBEntryForeachData data;
279 if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O|O:RhythmDB.entry_foreach",
280 kwlist, &data.func, &data.data))
283 /* verify arguments' integrity */
284 if (!PyCallable_Check (data.func)) {
285 PyErr_SetString (PyExc_TypeError, "func must be callable");
289 rhythmdb_entry_foreach (RHYTHMDB (self->obj), (GFunc)_rhythmdb_entry_foreach_func, &data);
295 override rhythmdb_query_model_new kwargs
298 _wrap_rhythmdb_query_model_new (PyGObject *self, PyObject *args, PyObject *kwargs)
300 static char *kwlist[] = {"query", "func", "reverse", NULL};
303 PyRhythmDBQueryModelSortData *data;
304 RhythmDBQueryModel *query_model;
306 data = g_new0 (PyRhythmDBQueryModelSortData, 1);
308 if (!PyArg_ParseTupleAndKeywords(args, kwargs, "OOi|O:RhythmDB.query_model_new", kwlist,
309 &py_query, &data->func, &reverse, &data->data)) {
314 /* verify arguments' integrity */
315 if (!PyCallable_Check (data->func)) {
316 PyErr_SetString (PyExc_TypeError, "func must be callable");
321 if (!pyg_boxed_check(py_query, RHYTHMDB_TYPE_QUERY)) {
322 PyErr_SetString(PyExc_TypeError, "query should be a RhythmDBQuery");
327 Py_INCREF (data->func);
328 Py_INCREF (data->data);
330 query_model = rhythmdb_query_model_new (RHYTHMDB (self->obj), pyg_boxed_get (py_query, RhythmDBQuery),
331 (GCompareDataFunc) _rhythmdb_query_model_sort_func,
332 data, (GDestroyNotify) _rhythmdb_query_model_sort_data_free,
335 return pygobject_new (G_OBJECT (query_model));
338 override rhythmdb_query_model_set_sort_order kwargs
341 _wrap_rhythmdb_query_model_set_sort_order (PyGObject *self, PyObject *args, PyObject *kwargs)
343 static char *kwlist[] = {"func", "reverse", NULL};
345 PyRhythmDBQueryModelSortData *data;
346 RhythmDBQueryModel *query_model;
348 data = g_new0 (PyRhythmDBQueryModelSortData, 1);
350 if (!PyArg_ParseTupleAndKeywords(args, kwargs, "Oi|O:RhythmDB.query_model_set_sort_order", kwlist,
351 &data->func, &reverse, &data->data)) {
356 /* verify arguments' integrity */
357 if (!PyCallable_Check (data->func)) {
358 PyErr_SetString (PyExc_TypeError, "func must be callable");
363 Py_INCREF (data->func);
364 Py_INCREF (data->data);
366 rhythmdb_query_model_set_sort_order (RHYTHMDB (self->obj),
367 (GCompareDataFunc) _rhythmdb_query_model_sort_func,
368 data, (GDestroyNotify) _rhythmdb_query_model_sort_data_free,