summaryrefslogtreecommitdiffstats
path: root/objects/irc-channel-object.c
diff options
context:
space:
mode:
authorChristopher Davis <loafier@gmail.com>2006-06-19 12:25:06 +0000
committerChristopher Davis <loafier@gmail.com>2006-06-19 12:25:06 +0000
commitbb48c914c6239ed1dbcb29eb62d33d3ab91e7215 (patch)
tree0b6910959f96f683f3aa11a8e2f53572e42b3305 /objects/irc-channel-object.c
parentefef73ae301947875602d67d0979a8ce3bd57dd0 (diff)
downloadirssi-python-bb48c914c6239ed1dbcb29eb62d33d3ab91e7215.tar.gz
irssi-python-bb48c914c6239ed1dbcb29eb62d33d3ab91e7215.tar.xz
irssi-python-bb48c914c6239ed1dbcb29eb62d33d3ab91e7215.zip
initial import
git-svn-id: http://svn.irssi.org/repos/irssi-python@4282 dbcabf3a-b0e7-0310-adc4-f8d773084564
Diffstat (limited to 'objects/irc-channel-object.c')
-rw-r--r--objects/irc-channel-object.c166
1 files changed, 166 insertions, 0 deletions
diff --git a/objects/irc-channel-object.c b/objects/irc-channel-object.c
new file mode 100644
index 0000000..daf3329
--- /dev/null
+++ b/objects/irc-channel-object.c
@@ -0,0 +1,166 @@
+#include <Python.h>
+#include "pyirssi_irc.h"
+#include "pymodule.h"
+#include "pycore.h"
+#include "irc-channel-object.h"
+#include "factory.h"
+
+/* PyIrcChannel destructor is inherited from PyChannel */
+
+/* specialized getters/setters */
+static PyGetSetDef PyIrcChannel_getseters[] = {
+ {NULL}
+};
+
+PyDoc_STRVAR(bans_doc,
+ "Returns a list of bans in the channel."
+);
+static PyObject *PyIrcChannel_bans(PyIrcChannel *self, PyObject *args)
+{
+ return py_irssi_objlist_new(self->data->banlist, 1, (InitFunc)pyban_new);
+}
+
+PyDoc_STRVAR(ban_get_mask_doc,
+ "Get ban mask for 'nick'."
+);
+static PyObject *PyIrcChannel_ban_get_mask(PyIrcChannel *self, PyObject *args, PyObject *kwds)
+{
+ static char *kwlist[] = {"nick", "ban_type", NULL};
+ char *nick, *str;
+ int ban_type = 0;
+ PyObject *ret;
+
+ RET_NULL_IF_INVALID(self->data);
+
+ if (!PyArg_ParseTupleAndKeywords(args, kwds, "s|i", kwlist, &nick, &ban_type))
+ return NULL;
+
+ str = ban_get_mask(self->data, nick, ban_type);
+ if (!str)
+ Py_RETURN_NONE;
+
+ ret = PyString_FromString(str);
+ g_free(str);
+
+ return ret;
+}
+
+PyDoc_STRVAR(banlist_add_doc,
+ "Add a new ban to channel. Return None if duplicate."
+);
+static PyObject *PyIrcChannel_banlist_add(PyIrcChannel *self, PyObject *args, PyObject *kwds)
+{
+ static char *kwlist[] = {"ban", "nick", "time", NULL};
+ char *ban, *nick;
+ time_t btime;
+ BAN_REC *newban;
+
+ RET_NULL_IF_INVALID(self->data);
+
+ if (!PyArg_ParseTupleAndKeywords(args, kwds, "ssk", kwlist, &ban, &nick, &btime))
+ return NULL;
+
+ newban = banlist_add(self->data, ban, nick, btime);
+ /* XXX: return none or throw error? */
+ if (!newban)
+ Py_RETURN_NONE;
+
+ return pyban_new(newban);
+}
+
+PyDoc_STRVAR(banlist_remove_doc,
+ "Remove a new ban from channel."
+);
+static PyObject *PyIrcChannel_banlist_remove(PyIrcChannel *self, PyObject *args, PyObject *kwds)
+{
+ static char *kwlist[] = {"ban", "nick", NULL};
+ char *ban, *nick;
+
+ RET_NULL_IF_INVALID(self->data);
+
+ if (!PyArg_ParseTupleAndKeywords(args, kwds, "ss", kwlist, &ban, &nick))
+ return NULL;
+
+ banlist_remove(self->data, ban, nick);
+ Py_RETURN_NONE;
+}
+
+/* Methods for object */
+static PyMethodDef PyIrcChannel_methods[] = {
+ {"bans", (PyCFunction)PyIrcChannel_bans, METH_NOARGS,
+ bans_doc},
+
+ {"ban_get_mask", (PyCFunction)PyIrcChannel_ban_get_mask, METH_VARARGS | METH_KEYWORDS,
+ ban_get_mask_doc},
+
+ {"banlist_add", (PyCFunction)PyIrcChannel_banlist_add, METH_VARARGS | METH_KEYWORDS,
+ banlist_add_doc},
+
+ {"banlist_remove", (PyCFunction)PyIrcChannel_banlist_remove, METH_VARARGS | METH_KEYWORDS,
+ banlist_remove_doc},
+
+ {NULL} /* Sentinel */
+};
+
+PyTypeObject PyIrcChannelType = {
+ PyObject_HEAD_INIT(NULL)
+ 0, /*ob_size*/
+ "IrcChannel", /*tp_name*/
+ sizeof(PyIrcChannel), /*tp_basicsize*/
+ 0, /*tp_itemsize*/
+ 0, /*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*/
+ "PyIrcChannel objects", /* tp_doc */
+ 0, /* tp_traverse */
+ 0, /* tp_clear */
+ 0, /* tp_richcompare */
+ 0, /* tp_weaklistoffset */
+ 0, /* tp_iter */
+ 0, /* tp_iternext */
+ PyIrcChannel_methods, /* tp_methods */
+ 0, /* tp_members */
+ PyIrcChannel_getseters, /* tp_getset */
+ &PyChannelType, /* tp_base */
+ 0, /* tp_dict */
+ 0, /* tp_descr_get */
+ 0, /* tp_descr_set */
+ 0, /* tp_dictoffset */
+ 0, /* tp_init */
+ 0, /* tp_alloc */
+ 0, /* tp_new */
+};
+
+
+/* irc channel factory function */
+PyObject *pyirc_channel_new(void *chan)
+{
+ static const char *BASE_NAME = "CHANNEL";
+ return pychannel_sub_new(chan, BASE_NAME, &PyIrcChannelType);
+}
+
+int irc_channel_object_init(void)
+{
+ g_return_val_if_fail(py_module != NULL, 0);
+
+ if (PyType_Ready(&PyIrcChannelType) < 0)
+ return 0;
+
+ Py_INCREF(&PyIrcChannelType);
+ PyModule_AddObject(py_module, "IrcChannel", (PyObject *)&PyIrcChannelType);
+
+ return 1;
+}