summaryrefslogtreecommitdiffstats
path: root/objects/rawlog-object.c
diff options
context:
space:
mode:
Diffstat (limited to 'objects/rawlog-object.c')
-rw-r--r--objects/rawlog-object.c306
1 files changed, 306 insertions, 0 deletions
diff --git a/objects/rawlog-object.c b/objects/rawlog-object.c
new file mode 100644
index 0000000..eed5996
--- /dev/null
+++ b/objects/rawlog-object.c
@@ -0,0 +1,306 @@
+#include <Python.h>
+#include "pyirssi_irc.h"
+#include "pymodule.h"
+#include "rawlog-object.h"
+#include "pycore.h"
+
+/* monitor "????" signal */
+static void rawlog_cleanup(RAWLOG_REC *ban)
+{
+ /* XXX */
+}
+
+static void PyRawlog_dealloc(PyRawlog *self)
+{
+ self->ob_type->tp_free((PyObject*)self);
+}
+
+static PyObject *PyRawlog_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
+{
+ PyRawlog *self;
+
+ self = (PyRawlog *)type->tp_alloc(type, 0);
+ if (!self)
+ return NULL;
+
+ return (PyObject *)self;
+}
+
+/* XXX: Need function to create the rawlog */
+
+/* Getters */
+PyDoc_STRVAR(PyRawlog_logging_doc,
+ "The raw log is being written to file currently."
+);
+static PyObject *PyRawlog_logging_get(PyRawlog *self, void *closure)
+{
+ RET_NULL_IF_INVALID(self->data);
+ return PyBool_FromLong(self->data->logging);
+}
+
+PyDoc_STRVAR(PyRawlog_nlines_doc,
+ "Number of lines in rawlog."
+);
+static PyObject *PyRawlog_nlines_get(PyRawlog *self, void *closure)
+{
+ RET_NULL_IF_INVALID(self->data);
+ return PyInt_FromLong(self->data->nlines);
+}
+
+/* specialized getters/setters */
+static PyGetSetDef PyRawlog_getseters[] = {
+ {"logging", (getter)PyRawlog_logging_get, NULL,
+ PyRawlog_logging_doc, NULL},
+ {"nlines", (getter)PyRawlog_nlines_get, NULL,
+ PyRawlog_nlines_doc, NULL},
+ {NULL}
+};
+
+/* Methods */
+PyDoc_STRVAR(PyRawlog_get_lines_doc,
+ "Return a list of lines for rawlog."
+);
+static PyObject *PyRawlog_get_lines(PyRawlog *self, PyObject *args)
+{
+ PyObject *lines = NULL;
+ GSList *node;
+
+ RET_NULL_IF_INVALID(self->data);
+
+ lines = PyList_New(0);
+ if (!lines)
+ return NULL;
+
+ for (node = self->data->lines; node; node = node->next)
+ {
+ int ret;
+ PyObject *line = PyString_FromString(node->data);
+
+ if (!line)
+ goto error;
+
+ ret = PyList_Append(lines, line);
+ Py_DECREF(line);
+ if (ret != 0)
+ goto error;
+ }
+
+ return lines;
+
+error:
+ Py_XDECREF(lines);
+ return NULL;
+}
+
+PyDoc_STRVAR(PyRawlog_destroy_doc,
+ "Destroy rawlog"
+);
+static PyObject *PyRawlog_destroy(PyRawlog *self, PyObject *args)
+{
+ RET_NULL_IF_INVALID(self->data);
+
+ rawlog_destroy(self->data);
+
+ /*XXX: what about signal handler ? */
+ self->data = NULL;
+
+ Py_RETURN_NONE;
+}
+
+PyDoc_STRVAR(PyRawlog_input_doc,
+ "Send str to rawlog as input text."
+);
+static PyObject *PyRawlog_input(PyRawlog *self, PyObject *args, PyObject *kwds)
+{
+ static char *kwlist[] = {"str", NULL};
+ char *str = "";
+
+ RET_NULL_IF_INVALID(self->data);
+
+ if (!PyArg_ParseTupleAndKeywords(args, kwds, "s", kwlist,
+ &str))
+ return NULL;
+
+ rawlog_input(self->data, str);
+
+ Py_RETURN_NONE;
+}
+
+PyDoc_STRVAR(PyRawlog_output_doc,
+ "Send str to rawlog as output text."
+);
+static PyObject *PyRawlog_output(PyRawlog *self, PyObject *args, PyObject *kwds)
+{
+ static char *kwlist[] = {"str", NULL};
+ char *str = "";
+
+ RET_NULL_IF_INVALID(self->data);
+
+ if (!PyArg_ParseTupleAndKeywords(args, kwds, "s", kwlist,
+ &str))
+ return NULL;
+
+ rawlog_output(self->data, str);
+
+ Py_RETURN_NONE;
+}
+
+PyDoc_STRVAR(PyRawlog_redirect_doc,
+ "Send str to rawlog as redirection text."
+);
+static PyObject *PyRawlog_redirect(PyRawlog *self, PyObject *args, PyObject *kwds)
+{
+ static char *kwlist[] = {"str", NULL};
+ char *str = "";
+
+ RET_NULL_IF_INVALID(self->data);
+
+ if (!PyArg_ParseTupleAndKeywords(args, kwds, "s", kwlist,
+ &str))
+ return NULL;
+
+ rawlog_redirect(self->data, str);
+
+ Py_RETURN_NONE;
+}
+
+PyDoc_STRVAR(PyRawlog_open_doc,
+ "Start logging new messages in rawlog to specified file."
+);
+static PyObject *PyRawlog_open(PyRawlog *self, PyObject *args, PyObject *kwds)
+{
+ static char *kwlist[] = {"fname", NULL};
+ char *fname = "";
+
+ RET_NULL_IF_INVALID(self->data);
+
+ if (!PyArg_ParseTupleAndKeywords(args, kwds, "s", kwlist,
+ &fname))
+ return NULL;
+
+ rawlog_open(self->data, fname);
+
+ Py_RETURN_NONE;
+}
+
+PyDoc_STRVAR(PyRawlog_close_doc,
+ "Stop logging to file"
+);
+static PyObject *PyRawlog_close(PyRawlog *self, PyObject *args)
+{
+ RET_NULL_IF_INVALID(self->data);
+
+ rawlog_close(self->data);
+
+ Py_RETURN_NONE;
+}
+
+PyDoc_STRVAR(PyRawlog_save_doc,
+ "Save the current rawlog history to specified file."
+);
+static PyObject *PyRawlog_save(PyRawlog *self, PyObject *args, PyObject *kwds)
+{
+ static char *kwlist[] = {"fname", NULL};
+ char *fname = "";
+
+ RET_NULL_IF_INVALID(self->data);
+
+ if (!PyArg_ParseTupleAndKeywords(args, kwds, "s", kwlist,
+ &fname))
+ return NULL;
+
+ rawlog_save(self->data, fname);
+
+ Py_RETURN_NONE;
+}
+
+/* Methods for object */
+static PyMethodDef PyRawlog_methods[] = {
+ {"get_lines", (PyCFunction)PyRawlog_get_lines, METH_NOARGS,
+ PyRawlog_get_lines_doc},
+ {"destroy", (PyCFunction)PyRawlog_destroy, METH_NOARGS,
+ PyRawlog_destroy_doc},
+ {"input", (PyCFunction)PyRawlog_input, METH_VARARGS | METH_KEYWORDS,
+ PyRawlog_input_doc},
+ {"output", (PyCFunction)PyRawlog_output, METH_VARARGS | METH_KEYWORDS,
+ PyRawlog_output_doc},
+ {"redirect", (PyCFunction)PyRawlog_redirect, METH_VARARGS | METH_KEYWORDS,
+ PyRawlog_redirect_doc},
+ {"open", (PyCFunction)PyRawlog_open, METH_VARARGS | METH_KEYWORDS,
+ PyRawlog_open_doc},
+ {"close", (PyCFunction)PyRawlog_close, METH_NOARGS,
+ PyRawlog_close_doc},
+ {"save", (PyCFunction)PyRawlog_save, METH_VARARGS | METH_KEYWORDS,
+ PyRawlog_save_doc},
+ {NULL} /* Sentinel */
+};
+
+PyTypeObject PyRawlogType = {
+ PyObject_HEAD_INIT(NULL)
+ 0, /*ob_size*/
+ "Rawlog", /*tp_name*/
+ sizeof(PyRawlog), /*tp_basicsize*/
+ 0, /*tp_itemsize*/
+ (destructor)PyRawlog_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*/
+ "PyRawlog objects", /* tp_doc */
+ 0, /* tp_traverse */
+ 0, /* tp_clear */
+ 0, /* tp_richcompare */
+ 0, /* tp_weaklistoffset */
+ 0, /* tp_iter */
+ 0, /* tp_iternext */
+ PyRawlog_methods, /* tp_methods */
+ 0, /* tp_members */
+ PyRawlog_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 */
+ PyRawlog_new, /* tp_new */
+};
+
+
+/* window item wrapper factory function */
+PyObject *pyrawlog_new(void *rlog)
+{
+ PyRawlog *pyrlog;
+
+ pyrlog = py_inst(PyRawlog, PyRawlogType);
+ if (!pyrlog)
+ return NULL;
+
+ pyrlog->data = rlog;
+
+ return (PyObject *)pyrlog;
+}
+
+int rawlog_object_init(void)
+{
+ g_return_val_if_fail(py_module != NULL, 0);
+
+ if (PyType_Ready(&PyRawlogType) < 0)
+ return 0;
+
+ Py_INCREF(&PyRawlogType);
+ PyModule_AddObject(py_module, "Rawlog", (PyObject *)&PyRawlogType);
+
+ return 1;
+}