#include #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; }