diff --git a/plugins/cricket-score.py b/plugins/cricket-score.py new file mode 100644 index 00000000..73d1e5d8 --- /dev/null +++ b/plugins/cricket-score.py @@ -0,0 +1,26 @@ +import prof +import urllib2 +import json +import time + +score_url = "http://api.scorescard.com/?type=score&teamone=Australia&teamtwo=England" + +# hooks + +def prof_on_start(): + req = urllib2.Request(score_url, None, {'Content-Type': 'application/json'}) + f = urllib2.urlopen(req) + response = f.read() + f.close() + result_json = json.loads(response); + batting1 = result_json['cb1'] + batting2 = result_json['cb2'] + team1_first = result_json['t1FI'] + team2_first = result_json['t2FI'] + + prof.cons_show(batting1) + prof.cons_show(batting2) + prof.cons_show(team1_first) + prof.cons_show(team2_first) + + prof.notify(team2_first, 5000, "Cricket score") diff --git a/plugins/platform-info.py b/plugins/platform-info.py new file mode 100644 index 00000000..1c1e5df9 --- /dev/null +++ b/plugins/platform-info.py @@ -0,0 +1,21 @@ +import prof +import platform + +# hooks + +def prof_init(version, status): + prof.register_command("/platform", 0, 0, "/platform", "Output system information.", "Output system information", cmd_platform) + +# local functions + +def cmd_platform(): + result_summary = platform.platform() +# result_machine = plaform.machine() +# result_node = platform,node() +# result_processor = platform.processor() +# result_release = platform.release() +# result_system = platform.system() +# result_version = platform.version() + +# prof.cons_show(result_machine + " " + result_node + " " + result_processor + " " + result_release + " " + result_release + " " + result_system + " " + result_version) + prof.cons_show(result_summary) diff --git a/src/plugins/api.c b/src/plugins/api.c index d71634dd..e7af8b57 100644 --- a/src/plugins/api.c +++ b/src/plugins/api.c @@ -23,6 +23,7 @@ #include #include "plugins/command.h" +#include "ui/notifier.h" #include "ui/ui.h" static PyObject* @@ -69,9 +70,26 @@ api_register_command(PyObject *self, PyObject *args) return Py_BuildValue(""); } +static PyObject* +api_notify(PyObject *self, PyObject *args) +{ + const char *message = NULL; + const char *category = NULL; + int timeout_ms = 5000; + + if (!PyArg_ParseTuple(args, "sis", &message, &timeout_ms, &category)) { + return NULL; + } + + notify(message, timeout_ms, category); + + return Py_BuildValue(""); +} + static PyMethodDef apiMethods[] = { { "cons_show", api_cons_show, METH_VARARGS, "Print a line to the console." }, { "register_command", api_register_command, METH_VARARGS, "Register a command." }, + { "notify", api_notify, METH_VARARGS, "Send desktop notification." }, { NULL, NULL, 0, NULL } }; diff --git a/src/plugins/plugins.c b/src/plugins/plugins.c index fa1216f5..8318ba29 100644 --- a/src/plugins/plugins.c +++ b/src/plugins/plugins.c @@ -33,6 +33,16 @@ static void _on_start(void); static void _run_plugins(const char * const function, PyObject *p_args); static GSList* plugins; + +static void +_check_error(void) +{ + if (PyErr_Occurred()) { + PyErr_Print(); + PyErr_Clear(); + } +} + void plugins_init(void) { @@ -42,12 +52,15 @@ plugins_init(void) GSList *module_names = _get_module_names(); Py_Initialize(); + _check_error(); api_init(); + _check_error(); // TODO change to use XDG spec GString *path = g_string_new(Py_GetPath()); g_string_append(path, ":./plugins/"); PySys_SetPath(path->str); + _check_error(); g_string_free(path, TRUE); if (module_names != NULL) { @@ -57,6 +70,7 @@ plugins_init(void) while (module_name != NULL) { p_module = PyImport_ImportModule(module_name->data); + _check_error(); if (p_module != NULL) { cons_show("Loaded plugin: %s", module_name->data); plugins = g_slist_append(plugins, p_module); @@ -68,11 +82,9 @@ plugins_init(void) cons_show(""); _init(); + _check_error(); _on_start(); - if (PyErr_Occurred()) { - PyErr_Print(); - PyErr_Clear(); - } + _check_error(); } return; } @@ -137,8 +149,10 @@ _run_plugins(const char * const function, PyObject *p_args) PyObject *p_module = plugin->data; if (PyObject_HasAttrString(p_module, function)) { p_function = PyObject_GetAttrString(p_module, function); + _check_error(); if (p_function && PyCallable_Check(p_function)) { PyObject_CallObject(p_function, p_args); + _check_error(); Py_XDECREF(p_function); } } diff --git a/src/ui/notifier.c b/src/ui/notifier.c index f43c8c25..3a72dd83 100644 --- a/src/ui/notifier.c +++ b/src/ui/notifier.c @@ -34,11 +34,9 @@ #include "log.h" #include "muc.h" +#include "ui/notifier.h" #include "ui/ui.h" -static void _notify(const char * const message, int timeout, - const char * const category); - void notifier_init(void) { @@ -63,7 +61,7 @@ notify_typing(const char * const handle) char message[strlen(handle) + 1 + 11]; sprintf(message, "%s: typing...", handle); - _notify(message, 10000, "Incoming message"); + notify(message, 10000, "Incoming message"); } void @@ -78,7 +76,7 @@ notify_invite(const char * const from, const char * const room, g_string_append_printf(message, "\n\"%s\"", reason); } - _notify(message->str, 10000, "Incoming message"); + notify(message->str, 10000, "Incoming message"); g_string_free(message, FALSE); } @@ -89,7 +87,7 @@ notify_message(const char * const handle, int win) char message[strlen(handle) + 1 + 14]; sprintf(message, "%s: message (%d).", handle, win); - _notify(message, 10000, "incoming message"); + notify(message, 10000, "incoming message"); } void @@ -100,7 +98,7 @@ notify_room_message(const char * const handle, const char * const room, int win) g_string_append_printf(text, "Room: %s\n", room); g_string_append_printf(text, "%s: message (%d).", handle, win); - _notify(text->str, 10000, "incoming message"); + notify(text->str, 10000, "incoming message"); g_string_free(text, FALSE); } @@ -110,7 +108,7 @@ notify_subscription(const char * const from) { GString *message = g_string_new("Subscription request: \n"); g_string_append(message, from); - _notify(message->str, 10000, "Incomming message"); + notify(message->str, 10000, "Incomming message"); g_string_free(message, FALSE); } @@ -153,14 +151,14 @@ notify_remind(void) } if ((unread > 0) || (open > 0) || (subs > 0)) { - _notify(text->str, 5000, "Incoming message"); + notify(text->str, 5000, "Incoming message"); } g_string_free(text, TRUE); } -static void -_notify(const char * const message, int timeout, +void +notify(const char * const message, int timeout, const char * const category) { #ifdef HAVE_LIBNOTIFY diff --git a/src/ui/notifier.h b/src/ui/notifier.h index 9db789e8..d7e08aa5 100644 --- a/src/ui/notifier.h +++ b/src/ui/notifier.h @@ -31,3 +31,6 @@ void notify_remind(void); void notify_invite(const char * const from, const char * const room, const char * const reason); void notify_subscription(const char * const from); + +void notify(const char * const message, int timeout, + const char * const category);