diff options
Diffstat (limited to 'objects/log-object.c')
| -rw-r--r-- | objects/log-object.c | 477 |
1 files changed, 0 insertions, 477 deletions
diff --git a/objects/log-object.c b/objects/log-object.c deleted file mode 100644 index b18f826..0000000 --- a/objects/log-object.c +++ /dev/null @@ -1,477 +0,0 @@ -#include <Python.h> -#include "pyirssi_irc.h" -#include "pymodule.h" -#include "log-object.h" -#include "factory.h" -#include "pycore.h" - -static LOG_ITEM_REC *find_item(LOG_REC *log, PyLogitem *item); -static void log_cleanup(LOG_REC *log); -static int logtype(int *type, int target, int window); - -/* find/convert a py log item */ -static LOG_ITEM_REC *find_item(LOG_REC *log, PyLogitem *item) -{ - int type; - char *name; - char *servertag = NULL; - - if (!item->type || !item->name) - return NULL; - - type = PyInt_AS_LONG(item->type); - name = PyString_AS_STRING(item->name); - if (item->servertag) - servertag = PyString_AS_STRING(item->servertag); - - return log_item_find(log, type, name, servertag); -} - -/* monitor "log remove" signal */ -static void log_cleanup(LOG_REC *log) -{ - PyLog *pylog = signal_get_user_data(); - - if (log == pylog->data) - { - pylog->data = NULL; - pylog->cleanup_installed = 0; - signal_remove_data("log remove", log_cleanup, pylog); - } -} - -static void PyLog_dealloc(PyLog *self) -{ - if (self->cleanup_installed) - signal_remove_data("log remove", log_cleanup, self); - - if (self->data && !g_slist_find(logs, self->data)) - { - printtext(NULL, NULL, MSGLEVEL_CRAP, "destroying orphan log %s", self->data->fname); - log_close(self->data); - } - - self->ob_type->tp_free((PyObject*)self); -} - -static PyObject *PyLog_new(PyTypeObject *type, PyObject *args, PyObject *kwds) -{ - PyLog *self; - - self = (PyLog *)type->tp_alloc(type, 0); - if (!self) - return NULL; - - return (PyObject *)self; -} - -/* function to create the log */ -PyDoc_STRVAR(PyLog_doc, - "__init__(fname, level=MSGLEVEL_ALL)\n" - "\n" - "Create a log\n" -); -static int PyLog_init(PyLog *self, PyObject *args, PyObject *kwds) -{ - char *fname; - int level = MSGLEVEL_ALL; - LOG_REC *log; - - static char *kwlist[] = {"fname", "level", NULL}; - - if (!PyArg_ParseTupleAndKeywords(args, kwds, "s|i", kwlist, - &fname, &level)) - return -1; - - /*XXX: anything better than RuntimeError ? */ - if (self->data || self->cleanup_installed) - { - PyErr_Format(PyExc_RuntimeError, "log already opened; close it first"); - return -1; - } - - log = log_create_rec(fname, level); - if (!log) - { - PyErr_Format(PyExc_RuntimeError, "failed to create log"); - return -1; - } - - self->data = log; - self->cleanup_installed = 1; - signal_add_last_data("log remove", log_cleanup, self); - - return 0; -} - -/* Getters */ -PyDoc_STRVAR(PyLog_fname_doc, - "Log file name" -); -static PyObject *PyLog_fname_get(PyLog *self, void *closure) -{ - RET_NULL_IF_INVALID(self->data); - RET_AS_STRING_OR_NONE(self->data->fname); -} - -PyDoc_STRVAR(PyLog_real_fname_doc, - "The actual opened log file (after %d.%m.Y etc. are expanded)" -); -static PyObject *PyLog_real_fname_get(PyLog *self, void *closure) -{ - RET_NULL_IF_INVALID(self->data); - RET_AS_STRING_OR_NONE(self->data->real_fname); -} - -PyDoc_STRVAR(PyLog_opened_doc, - "Log file is open" -); -static PyObject *PyLog_opened_get(PyLog *self, void *closure) -{ - RET_NULL_IF_INVALID(self->data); - return PyLong_FromUnsignedLong(self->data->opened); -} - -PyDoc_STRVAR(PyLog_level_doc, - "Log only these levels" -); -static PyObject *PyLog_level_get(PyLog *self, void *closure) -{ - RET_NULL_IF_INVALID(self->data); - return PyInt_FromLong(self->data->level); -} - -PyDoc_STRVAR(PyLog_last_doc, - "Timestamp when last message was written" -); -static PyObject *PyLog_last_get(PyLog *self, void *closure) -{ - RET_NULL_IF_INVALID(self->data); - return PyLong_FromUnsignedLong(self->data->last); -} - -PyDoc_STRVAR(PyLog_autoopen_doc, - "Automatically open log at startup" -); -static PyObject *PyLog_autoopen_get(PyLog *self, void *closure) -{ - RET_NULL_IF_INVALID(self->data); - return PyBool_FromLong(self->data->autoopen); -} - -PyDoc_STRVAR(PyLog_failed_doc, - "Opening log failed last time" -); -static PyObject *PyLog_failed_get(PyLog *self, void *closure) -{ - RET_NULL_IF_INVALID(self->data); - return PyBool_FromLong(self->data->failed); -} - -PyDoc_STRVAR(PyLog_temp_doc, - "Log isn't saved to config file" -); -static PyObject *PyLog_temp_get(PyLog *self, void *closure) -{ - RET_NULL_IF_INVALID(self->data); - return PyBool_FromLong(self->data->temp); -} - -/* specialized getters/setters */ -static PyGetSetDef PyLog_getseters[] = { - {"fname", (getter)PyLog_fname_get, NULL, - PyLog_fname_doc, NULL}, - {"real_fname", (getter)PyLog_real_fname_get, NULL, - PyLog_real_fname_doc, NULL}, - {"opened", (getter)PyLog_opened_get, NULL, - PyLog_opened_doc, NULL}, - {"level", (getter)PyLog_level_get, NULL, - PyLog_level_doc, NULL}, - {"last", (getter)PyLog_last_get, NULL, - PyLog_last_doc, NULL}, - {"autoopen", (getter)PyLog_autoopen_get, NULL, - PyLog_autoopen_doc, NULL}, - {"failed", (getter)PyLog_failed_get, NULL, - PyLog_failed_doc, NULL}, - {"temp", (getter)PyLog_temp_get, NULL, - PyLog_temp_doc, NULL}, - {NULL} -}; - -/* Methods */ -PyDoc_STRVAR(PyLog_items_doc, - "items() -> list of Log objects\n" - "\n" - "Return a list of log items\n" -); -static PyObject *PyLog_items(PyLog *self, PyObject *args) -{ - RET_NULL_IF_INVALID(self->data); - return py_irssi_objlist_new(self->data->items, 1, (InitFunc)pylogitem_new); -} - -PyDoc_STRVAR(PyLog_update_doc, - "update() -> None\n" - "\n" - "Add log to list of logs / save changes to config file.\n" -); -static PyObject *PyLog_update(PyLog *self, PyObject *args) -{ - RET_NULL_IF_INVALID(self->data); - - log_update(self->data); - - Py_RETURN_NONE; -} - -PyDoc_STRVAR(PyLog_close_doc, - "destroy() -> None\n" - "\n" - "Destroy the log file\n" -); -static PyObject *PyLog_close(PyLog *self, PyObject *args) -{ - RET_NULL_IF_INVALID(self->data); - - log_close(self->data); - - Py_RETURN_NONE; -} - -PyDoc_STRVAR(PyLog_start_logging_doc, - "start_logging() -> None\n" - "\n" - "Open log file and start logging.\n" -); -static PyObject *PyLog_start_logging(PyLog *self, PyObject *args) -{ - RET_NULL_IF_INVALID(self->data); - - log_start_logging(self->data); - - Py_RETURN_NONE; -} - -PyDoc_STRVAR(PyLog_stop_logging_doc, - "stop_logging() -> None\n" - "\n" - "Stop and close the log file.\n" -); -static PyObject *PyLog_stop_logging(PyLog *self, PyObject *args) -{ - RET_NULL_IF_INVALID(self->data); - - log_stop_logging(self->data); - - Py_RETURN_NONE; -} - -static int logtype(int *type, int target, int window) -{ - if (target || window) - { - if (target && window) - { - PyErr_SetString(PyExc_TypeError, "must specify target or window, not both"); - return 0; - } - - *type = target? 0 : 1; - } - else if (*type < 0) - { - PyErr_SetString(PyExc_TypeError, "must specify type, target, or window"); - return 0; - } - - return 1; -} - -PyDoc_STRVAR(PyLog_item_add_doc, - "item_add(item, servertag=None, type=0, target=False, window=False) -> None\n" - "\n" - "Add a log item to log.\n" - "\n" - "Add a target item (nick, chan): \n" - " item_add('#linux', target=True)\n" - " item_add('#linux', type=0)\n" - "\n" - "Add a window ref: \n" - " item_add('2', window=True)\n" - " item_add('2', type=1)\n" -); -static PyObject *PyLog_item_add(PyLog *self, PyObject *args, PyObject *kwds) -{ - static char *kwlist[] = {"item", "servertag", "type", "target", "window", NULL}; - char *item = ""; - char *servertag = NULL; - int type = 0; - int target = 0; - int window = 0; - - RET_NULL_IF_INVALID(self->data); - - if (!PyArg_ParseTupleAndKeywords(args, kwds, "s|ziii", kwlist, - &item, &servertag, &type, &target, &window)) - return NULL; - - if (!logtype(&type, target, window)) - return NULL; - - log_item_add(self->data, type, item, servertag); - - Py_RETURN_NONE; -} - -PyDoc_STRVAR(PyLog_item_destroy_doc, - "item_destroy(item) -> None\n" - "\n" - "Remove log item from log.\n" -); -static PyObject *PyLog_item_destroy(PyLog *self, PyObject *args, PyObject *kwds) -{ - static char *kwlist[] = {"item", NULL}; - PyObject *item = NULL; - LOG_ITEM_REC *li; - - RET_NULL_IF_INVALID(self->data); - - if (!PyArg_ParseTupleAndKeywords(args, kwds, "O", kwlist, - &item)) - return NULL; - - if (!pylogitem_check(item)) - return PyErr_Format(PyExc_TypeError, "arg 1 should be log item"); - - li = find_item(self->data, (PyLogitem *)item); - if (!li) - return PyErr_Format(PyExc_TypeError, "log item invalid or not found"); - - log_item_destroy(self->data, li); - - Py_RETURN_NONE; -} - -PyDoc_STRVAR(PyLog_item_find_doc, - "item_find(item, servertag=None, type=-1, target=False, window=False) -> item or None\n" - "\n" - "Find item from log.\n" -); -static PyObject *PyLog_item_find(PyLog *self, PyObject *args, PyObject *kwds) -{ - static char *kwlist[] = {"item", "servertag", "type", "target", "window", NULL}; - char *item = ""; - char *server = NULL; - int type = 0; - int target = 0; - int window = 0; - LOG_ITEM_REC *li; - - RET_NULL_IF_INVALID(self->data); - - if (!PyArg_ParseTupleAndKeywords(args, kwds, "s|ziii", kwlist, - &item, &server, &type, &target, &window)) - return NULL; - - if (!logtype(&type, target, window)) - return NULL; - - li = log_item_find(self->data, type, item, server); - if (li) - return pylogitem_new(li); - - Py_RETURN_NONE; -} - -/* Methods for object */ -static PyMethodDef PyLog_methods[] = { - {"items", (PyCFunction)PyLog_items, METH_NOARGS, - PyLog_items_doc}, - {"update", (PyCFunction)PyLog_update, METH_NOARGS, - PyLog_update_doc}, - {"close", (PyCFunction)PyLog_close, METH_NOARGS, - PyLog_close_doc}, - {"start_logging", (PyCFunction)PyLog_start_logging, METH_NOARGS, - PyLog_start_logging_doc}, - {"stop_logging", (PyCFunction)PyLog_stop_logging, METH_NOARGS, - PyLog_stop_logging_doc}, - {"item_add", (PyCFunction)PyLog_item_add, METH_VARARGS | METH_KEYWORDS, - PyLog_item_add_doc}, - {"item_destroy", (PyCFunction)PyLog_item_destroy, METH_VARARGS | METH_KEYWORDS, - PyLog_item_destroy_doc}, - {"item_find", (PyCFunction)PyLog_item_find, METH_VARARGS | METH_KEYWORDS, - PyLog_item_find_doc}, - {NULL} /* Sentinel */ -}; - -PyTypeObject PyLogType = { - PyObject_HEAD_INIT(NULL) - 0, /*ob_size*/ - "Log", /*tp_name*/ - sizeof(PyLog), /*tp_basicsize*/ - 0, /*tp_itemsize*/ - (destructor)PyLog_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*/ - PyLog_doc, /* tp_doc */ - 0, /* tp_traverse */ - 0, /* tp_clear */ - 0, /* tp_richcompare */ - 0, /* tp_weaklistoffset */ - 0, /* tp_iter */ - 0, /* tp_iternext */ - PyLog_methods, /* tp_methods */ - 0, /* tp_members */ - PyLog_getseters, /* tp_getset */ - 0, /* tp_base */ - 0, /* tp_dict */ - 0, /* tp_descr_get */ - 0, /* tp_descr_set */ - 0, /* tp_dictoffset */ - (initproc)PyLog_init, /* tp_init */ - 0, /* tp_alloc */ - PyLog_new, /* tp_new */ -}; - - -/* window item wrapper factory function */ -PyObject *pylog_new(void *log) -{ - PyLog *pylog; - - pylog = (PyLog *)PyLogType.tp_alloc(&PyLogType, 0); - if (!pylog) - return NULL; - - pylog->data = log; - pylog->cleanup_installed = 1; - signal_add_last_data("log remove", log_cleanup, pylog); - - return (PyObject *)pylog; -} - -int log_object_init(void) -{ - g_return_val_if_fail(py_module != NULL, 0); - - if (PyType_Ready(&PyLogType) < 0) - return 0; - - Py_INCREF(&PyLogType); - PyModule_AddObject(py_module, "Log", (PyObject *)&PyLogType); - - return 1; -} |
