diff options
author | Christopher Davis <loafier@gmail.com> | 2006-06-21 00:22:03 +0000 |
---|---|---|
committer | Christopher Davis <loafier@gmail.com> | 2006-06-21 00:22:03 +0000 |
commit | 7ddcc3b268c8c55b2d6fe80e87e090181fbc1bf7 (patch) | |
tree | cc0ceff989c10739bcb18ae0743579bfb5074c3a /objects/netsplit-object.c | |
parent | bb48c914c6239ed1dbcb29eb62d33d3ab91e7215 (diff) | |
download | irssi-python-7ddcc3b268c8c55b2d6fe80e87e090181fbc1bf7.tar.gz irssi-python-7ddcc3b268c8c55b2d6fe80e87e090181fbc1bf7.tar.xz irssi-python-7ddcc3b268c8c55b2d6fe80e87e090181fbc1bf7.zip |
Added a lot of object wrappers. Most are untested.
Will finish up the rest of the object wrappers perhaps
tonight or tomorrow. Signal handling will need to be
addressed ASAP. There are quite a lot of other global
module functions remaining to be wraped, as well.
git-svn-id: http://svn.irssi.org/repos/irssi-python@4286 dbcabf3a-b0e7-0310-adc4-f8d773084564
Diffstat (limited to 'objects/netsplit-object.c')
-rw-r--r-- | objects/netsplit-object.c | 182 |
1 files changed, 182 insertions, 0 deletions
diff --git a/objects/netsplit-object.c b/objects/netsplit-object.c new file mode 100644 index 0000000..4864aba --- /dev/null +++ b/objects/netsplit-object.c @@ -0,0 +1,182 @@ +#include <Python.h> +#include "pyirssi_irc.h" +#include "pymodule.h" +#include "netsplit-object.h" +#include "factory.h" +#include "pycore.h" + +#define NETSPLIT(ns) ((NETSPLIT_REC*)ns) + +/* monitor "netsplit remove" signal */ +static void netsplit_cleanup(NETSPLIT_REC *netsplit) +{ + PyNetsplit *pynetsplit = signal_get_user_data(); + + if (netsplit == pynetsplit->data) + { + pynetsplit->data = NULL; + pynetsplit->cleanup_installed = 0; + signal_remove_data("netsplit remove", netsplit_cleanup, pynetsplit); + } +} + +static void PyNetsplit_dealloc(PyNetsplit *self) +{ + if (self->cleanup_installed) + signal_remove_data("netsplit remove", netsplit_cleanup, self); + + self->ob_type->tp_free((PyObject*)self); +} + +static PyObject *PyNetsplit_new(PyTypeObject *type, PyObject *args, PyObject *kwds) +{ + PyNetsplit *self; + + self = (PyNetsplit *)type->tp_alloc(type, 0); + if (!self) + return NULL; + + return (PyObject *)self; +} + +/* Getters */ +PyDoc_STRVAR(PyNetsplit_nick_doc, + "Nick" +); +static PyObject *PyNetsplit_nick_get(PyNetsplit *self, void *closure) +{ + RET_NULL_IF_INVALID(self->data); + RET_AS_STRING_OR_NONE(NETSPLIT(self->data)->nick); +} + +PyDoc_STRVAR(PyNetsplit_address_doc, + "Nick's host" +); +static PyObject *PyNetsplit_address_get(PyNetsplit *self, void *closure) +{ + RET_NULL_IF_INVALID(self->data); + RET_AS_STRING_OR_NONE(NETSPLIT(self->data)->address); +} + +PyDoc_STRVAR(PyNetsplit_destroy_doc, + "Timestamp when this record should be destroyed" +); +static PyObject *PyNetsplit_destroy_get(PyNetsplit *self, void *closure) +{ + RET_NULL_IF_INVALID(self->data); + return PyLong_FromUnsignedLong(NETSPLIT(self->data)->destroy); +} + +PyDoc_STRVAR(PyNetsplit_server_doc, + "Netsplitserver object" +); +static PyObject *PyNetsplit_server_get(PyNetsplit *self, void *closure) +{ + RET_NULL_IF_INVALID(self->data); + RET_AS_OBJ_OR_NONE(self->server); +} + +/* specialized getters/setters */ +static PyGetSetDef PyNetsplit_getseters[] = { + {"nick", (getter)PyNetsplit_nick_get, NULL, + PyNetsplit_nick_doc, NULL}, + {"address", (getter)PyNetsplit_address_get, NULL, + PyNetsplit_address_doc, NULL}, + {"destroy", (getter)PyNetsplit_destroy_get, NULL, + PyNetsplit_destroy_doc, NULL}, + {"server", (getter)PyNetsplit_server_get, NULL, + PyNetsplit_server_doc, NULL}, + {NULL} +}; + +/* Methods */ +PyDoc_STRVAR(PyNetsplit_channels_doc, + "Return list of NetsplitChannel objects" +); +static PyObject *PyNetsplit_channels(PyNetsplit *self, PyObject *args) +{ + RET_NULL_IF_INVALID(self->data); + return py_irssi_objlist_new(NETSPLIT(self->data)->channels, 1, + (InitFunc)pynetsplit_channel_new); +} + +/* Methods for object */ +static PyMethodDef PyNetsplit_methods[] = { + {"channels", (PyCFunction)PyNetsplit_channels, METH_NOARGS, + PyNetsplit_channels_doc}, + {NULL} /* Sentinel */ +}; + +PyTypeObject PyNetsplitType = { + PyObject_HEAD_INIT(NULL) + 0, /*ob_size*/ + "Netsplit", /*tp_name*/ + sizeof(PyNetsplit), /*tp_basicsize*/ + 0, /*tp_itemsize*/ + (destructor)PyNetsplit_dealloc, /*tp_dealloc*/ + 0, /*tp_print*/ + 0, /*tp_getattr*/ + 0, /*tp_setattr*/ + 0, /*tp_compare*/ + 0, /*tp_repr*/ + 0, /*tp_as_number*/ + 0, /*tp_as_sequence*/ + 0, /*tp_as_mapping*/ + 0, /*tp_hash */ + 0, /*tp_call*/ + 0, /*tp_str*/ + 0, /*tp_getattro*/ + 0, /*tp_setattro*/ + 0, /*tp_as_buffer*/ + Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, /*tp_flags*/ + "PyNetsplit objects", /* tp_doc */ + 0, /* tp_traverse */ + 0, /* tp_clear */ + 0, /* tp_richcompare */ + 0, /* tp_weaklistoffset */ + 0, /* tp_iter */ + 0, /* tp_iternext */ + PyNetsplit_methods, /* tp_methods */ + 0, /* tp_members */ + PyNetsplit_getseters, /* tp_getset */ + 0, /* tp_base */ + 0, /* tp_dict */ + 0, /* tp_descr_get */ + 0, /* tp_descr_set */ + 0, /* tp_dictoffset */ + 0, /* tp_init */ + 0, /* tp_alloc */ + PyNetsplit_new, /* tp_new */ +}; + + +/* window item wrapper factory function */ +PyObject *pynetsplit_new(void *netsplit) +{ + PyNetsplit *pynetsplit; + + //FIXME: add netsplit server + + pynetsplit = py_inst(PyNetsplit, PyNetsplitType); + if (!pynetsplit) + return NULL; + + pynetsplit->data = netsplit; + pynetsplit->cleanup_installed = 1; + signal_add_last_data("netsplit remove", netsplit_cleanup, pynetsplit); + + return (PyObject *)pynetsplit; +} + +int netsplit_object_init(void) +{ + g_return_val_if_fail(py_module != NULL, 0); + + if (PyType_Ready(&PyNetsplitType) < 0) + return 0; + + Py_INCREF(&PyNetsplitType); + PyModule_AddObject(py_module, "Netsplit", (PyObject *)&PyNetsplitType); + + return 1; +} |