diff options
Diffstat (limited to 'objects/channel-object.c')
-rw-r--r-- | objects/channel-object.c | 264 |
1 files changed, 156 insertions, 108 deletions
diff --git a/objects/channel-object.c b/objects/channel-object.c index 7e3758d..fa4edd4 100644 --- a/objects/channel-object.c +++ b/objects/channel-object.c @@ -5,25 +5,6 @@ #include "channel-object.h" #include "pycore.h" -/* member IDs */ -enum -{ - M_CHANNEL_TOPIC, - M_CHANNEL_TOPIC_BY, - M_CHANNEL_TOPIC_TIME, - M_CHANNEL_NO_MODES, - M_CHANNEL_MODE, - M_CHANNEL_LIMIT, - M_CHANNEL_KEY, - M_CHANNEL_CHANOP, - M_CHANNEL_NAMES_GOT, - M_CHANNEL_WHOLIST, - M_CHANNEL_SYNCED, - M_CHANNEL_JOINED, - M_CHANNEL_LEFT, - M_CHANNEL_KICKED, -}; - /* monitor "channel destroyed" signal */ static void chan_cleanup(CHANNEL_REC *chan) { @@ -45,112 +26,171 @@ static void PyChannel_dealloc(PyChannel *self) self->ob_type->tp_free((PyObject*)self); } - -static PyObject *PyChannel_get(PyChannel *self, void *closure) +/* Getters */ +PyDoc_STRVAR(PyChannel_topic_doc, + "Channel topic" +); +static PyObject *PyChannel_topic_get(PyChannel *self, void *closure) { - int member = GPOINTER_TO_INT(closure); - RET_NULL_IF_INVALID(self->data); - - switch (member) - { - case M_CHANNEL_TOPIC: - RET_AS_STRING_OR_NONE(self->data->topic); - case M_CHANNEL_TOPIC_BY: - RET_AS_STRING_OR_NONE(self->data->topic_by); - case M_CHANNEL_TOPIC_TIME: - return PyLong_FromLong(self->data->topic_time); - case M_CHANNEL_NO_MODES: - return PyBool_FromLong(self->data->no_modes); - case M_CHANNEL_MODE: - RET_AS_STRING_OR_NONE(self->data->mode); - case M_CHANNEL_LIMIT: - return PyInt_FromLong(self->data->limit); - case M_CHANNEL_KEY: - RET_AS_STRING_OR_NONE(self->data->key); - case M_CHANNEL_CHANOP: - return PyBool_FromLong(self->data->chanop); - case M_CHANNEL_NAMES_GOT: - return PyBool_FromLong(self->data->names_got); - case M_CHANNEL_WHOLIST: - return PyBool_FromLong(self->data->wholist); - case M_CHANNEL_SYNCED: - return PyBool_FromLong(self->data->synced); - case M_CHANNEL_JOINED: - return PyBool_FromLong(self->data->joined); - case M_CHANNEL_LEFT: - return PyBool_FromLong(self->data->left); - case M_CHANNEL_KICKED: - return PyBool_FromLong(self->data->kicked); - } - - /* This shouldn't be reached... but... */ - return PyErr_Format(PyExc_RuntimeError, "invalid member id, %d", member); + RET_AS_STRING_OR_NONE(self->data->topic); } -/* specialized getters/setters */ -static PyGetSetDef PyChannel_getseters[] = { - {"topic", (getter)PyChannel_get, NULL, - "Channel topic", - GINT_TO_POINTER(M_CHANNEL_TOPIC)}, - - {"topic_by", (getter)PyChannel_get, NULL, - "Nick who set the topic", - GINT_TO_POINTER(M_CHANNEL_TOPIC_BY)}, +PyDoc_STRVAR(PyChannel_topic_by_doc, + "Nick who set the topic" +); +static PyObject *PyChannel_topic_by_get(PyChannel *self, void *closure) +{ + RET_NULL_IF_INVALID(self->data); + RET_AS_STRING_OR_NONE(self->data->topic_by); +} - {"topic_time", (getter)PyChannel_get, NULL, - "Timestamp when the topic was set", - GINT_TO_POINTER(M_CHANNEL_TOPIC_TIME)}, +PyDoc_STRVAR(PyChannel_topic_time_doc, + "Timestamp when the topic was set" +); +static PyObject *PyChannel_topic_time_get(PyChannel *self, void *closure) +{ + RET_NULL_IF_INVALID(self->data); + return PyLong_FromLong(self->data->topic_time); +} - {"no_modes", (getter)PyChannel_get, NULL, - "Channel is modeless", - GINT_TO_POINTER(M_CHANNEL_NO_MODES)}, +PyDoc_STRVAR(PyChannel_no_modes_doc, + "Channel is modeless" +); +static PyObject *PyChannel_no_modes_get(PyChannel *self, void *closure) +{ + RET_NULL_IF_INVALID(self->data); + return PyBool_FromLong(self->data->no_modes); +} - {"mode", (getter)PyChannel_get, NULL, - "Channel mode", - GINT_TO_POINTER(M_CHANNEL_MODE)}, +PyDoc_STRVAR(PyChannel_mode_doc, + "Channel mode" +); +static PyObject *PyChannel_mode_get(PyChannel *self, void *closure) +{ + RET_NULL_IF_INVALID(self->data); + RET_AS_STRING_OR_NONE(self->data->mode); +} - {"limit", (getter)PyChannel_get, NULL, - "Max. users in channel (+l mode)", - GINT_TO_POINTER(M_CHANNEL_LIMIT)}, +PyDoc_STRVAR(PyChannel_limit_doc, + "Max. users in channel (+l mode)" +); +static PyObject *PyChannel_limit_get(PyChannel *self, void *closure) +{ + RET_NULL_IF_INVALID(self->data); + return PyInt_FromLong(self->data->limit); +} - {"key", (getter)PyChannel_get, NULL, - "Channel key (password)", - GINT_TO_POINTER(M_CHANNEL_KEY)}, +PyDoc_STRVAR(PyChannel_key_doc, + "Channel key (password)" +); +static PyObject *PyChannel_key_get(PyChannel *self, void *closure) +{ + RET_NULL_IF_INVALID(self->data); + RET_AS_STRING_OR_NONE(self->data->key); +} - {"chanop", (getter)PyChannel_get, NULL, - "You are channel operator", - GINT_TO_POINTER(M_CHANNEL_CHANOP)}, +PyDoc_STRVAR(PyChannel_chanop_doc, + "You are channel operator" +); +static PyObject *PyChannel_chanop_get(PyChannel *self, void *closure) +{ + RET_NULL_IF_INVALID(self->data); + return PyBool_FromLong(self->data->chanop); +} - {"names_got", (getter)PyChannel_get, NULL, - "/NAMES list has been received", - GINT_TO_POINTER(M_CHANNEL_NAMES_GOT)}, +PyDoc_STRVAR(PyChannel_names_got_doc, + "/NAMES list has been received" +); +static PyObject *PyChannel_names_got_get(PyChannel *self, void *closure) +{ + RET_NULL_IF_INVALID(self->data); + return PyBool_FromLong(self->data->names_got); +} - {"wholist", (getter)PyChannel_get, NULL, - "/WHO list has been received", - GINT_TO_POINTER(M_CHANNEL_WHOLIST)}, +PyDoc_STRVAR(PyChannel_wholist_doc, + "/WHO list has been received" +); +static PyObject *PyChannel_wholist_get(PyChannel *self, void *closure) +{ + RET_NULL_IF_INVALID(self->data); + return PyBool_FromLong(self->data->wholist); +} - {"synced", (getter)PyChannel_get, NULL, - "Channel is fully synchronized", - GINT_TO_POINTER(M_CHANNEL_SYNCED)}, +PyDoc_STRVAR(PyChannel_synced_doc, + "Channel is fully synchronized" +); +static PyObject *PyChannel_synced_get(PyChannel *self, void *closure) +{ + RET_NULL_IF_INVALID(self->data); + return PyBool_FromLong(self->data->synced); +} - {"joined", (getter)PyChannel_get, NULL, - "JOIN event for this channel has been received", - GINT_TO_POINTER(M_CHANNEL_JOINED)}, +PyDoc_STRVAR(PyChannel_joined_doc, + "JOIN event for this channel has been received" +); +static PyObject *PyChannel_joined_get(PyChannel *self, void *closure) +{ + RET_NULL_IF_INVALID(self->data); + return PyBool_FromLong(self->data->joined); +} - {"left", (getter)PyChannel_get, NULL, - "You just left the channel (for 'channel destroyed' event)", - GINT_TO_POINTER(M_CHANNEL_LEFT)}, +PyDoc_STRVAR(PyChannel_left_doc, + "You just left the channel (for 'channel destroyed' event)" +); +static PyObject *PyChannel_left_get(PyChannel *self, void *closure) +{ + RET_NULL_IF_INVALID(self->data); + return PyBool_FromLong(self->data->left); +} - {"kicked", (getter)PyChannel_get, NULL, - "You was just kicked out of the channel (for 'channel destroyed' event)", - GINT_TO_POINTER(M_CHANNEL_KICKED)}, +PyDoc_STRVAR(PyChannel_kicked_doc, + "You were just kicked out of the channel (for 'channel destroyed' event)" +); +static PyObject *PyChannel_kicked_get(PyChannel *self, void *closure) +{ + RET_NULL_IF_INVALID(self->data); + return PyBool_FromLong(self->data->kicked); +} +/* specialized getters/setters */ +static PyGetSetDef PyChannel_getseters[] = { + {"topic", (getter)PyChannel_topic_get, NULL, + PyChannel_topic_doc, NULL}, + {"topic_by", (getter)PyChannel_topic_by_get, NULL, + PyChannel_topic_by_doc, NULL}, + {"topic_time", (getter)PyChannel_topic_time_get, NULL, + PyChannel_topic_time_doc, NULL}, + {"no_modes", (getter)PyChannel_no_modes_get, NULL, + PyChannel_no_modes_doc, NULL}, + {"mode", (getter)PyChannel_mode_get, NULL, + PyChannel_mode_doc, NULL}, + {"limit", (getter)PyChannel_limit_get, NULL, + PyChannel_limit_doc, NULL}, + {"key", (getter)PyChannel_key_get, NULL, + PyChannel_key_doc, NULL}, + {"chanop", (getter)PyChannel_chanop_get, NULL, + PyChannel_chanop_doc, NULL}, + {"names_got", (getter)PyChannel_names_got_get, NULL, + PyChannel_names_got_doc, NULL}, + {"wholist", (getter)PyChannel_wholist_get, NULL, + PyChannel_wholist_doc, NULL}, + {"synced", (getter)PyChannel_synced_get, NULL, + PyChannel_synced_doc, NULL}, + {"joined", (getter)PyChannel_joined_get, NULL, + PyChannel_joined_doc, NULL}, + {"left", (getter)PyChannel_left_get, NULL, + PyChannel_left_doc, NULL}, + {"kicked", (getter)PyChannel_kicked_get, NULL, + PyChannel_kicked_doc, NULL}, {NULL} }; +/* Methods */ PyDoc_STRVAR(PyChannel_nicks_doc, - "Return a list of nicks in the channel." + "nicks() -> list of Nick objects\n" + "\n" + "Return a list of nicks in the channel.\n" ); static PyObject *PyChannel_nicks(PyChannel *self, PyObject *args) { @@ -160,7 +200,9 @@ static PyObject *PyChannel_nicks(PyChannel *self, PyObject *args) } PyDoc_STRVAR(PyChannel_nicks_find_mask_doc, - "Find nick mask from nicklist, wildcards allowed." + "nicks_find_mask(mask) -> Nick object or None\n" + "\n" + "Find nick mask from nicklist, wildcards allowed.\n" ); static PyObject *PyChannel_nicks_find_mask(PyChannel *self, PyObject *args, PyObject *kwds) { @@ -177,7 +219,9 @@ static PyObject *PyChannel_nicks_find_mask(PyChannel *self, PyObject *args, PyOb } PyDoc_STRVAR(PyChannel_nick_find_doc, - "Find nick from nicklist." + "nick_find(nick) -> Nick object or None\n" + "\n" + "Find nick from nicklist.\n" ); static PyObject *PyChannel_nick_find(PyChannel *self, PyObject *args, PyObject *kwds) { @@ -194,7 +238,9 @@ static PyObject *PyChannel_nick_find(PyChannel *self, PyObject *args, PyObject * } PyDoc_STRVAR(PyChannel_nick_remove_doc, - "Remove nick from nicklist." + "nick_remove(nick) -> None\n" + "\n" + "Remove nick from nicklist.\n" ); static PyObject *PyChannel_nick_remove(PyChannel *self, PyObject *args, PyObject *kwds) { @@ -216,7 +262,9 @@ static PyObject *PyChannel_nick_remove(PyChannel *self, PyObject *args, PyObject } PyDoc_STRVAR(PyChannel_nick_insert_obj_doc, - "Insert nick object into nicklist." + "nick_insert(nick) -> None\n" + "\n" + "Insert nick object into nicklist.\n" ); static PyObject *PyChannel_nick_insert_obj(PyChannel *self, PyObject *args, PyObject *kwds) { |