Author: pawelz Date: Mon Jul 6 08:12:26 2009 GMT Module: packages Tag: HEAD ---- Log message: - initial PLD release
---- Files affected: packages/ekg2-script-pynotif: pynotif.py (NONE -> 1.1) (NEW) ---- Diffs: ================================================================ Index: packages/ekg2-script-pynotif/pynotif.py diff -u /dev/null packages/ekg2-script-pynotif/pynotif.py:1.1 --- /dev/null Mon Jul 6 10:12:26 2009 +++ packages/ekg2-script-pynotif/pynotif.py Mon Jul 6 10:12:21 2009 @@ -0,0 +1,133 @@ +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +# Copyright (c) 2009 by Paweł Tomak <satherot (at) gmail (dot) com> + +import ekg +import time +import pynotify +import re +import sys + +TIMEOUT_STATUS=3500 +TIMEOUT_MSG=3500 + +def removeHTML(text): + reg = re.compile("&") + text = reg.sub("&", text) + reg = re.compile("<") + text = reg.sub("<", text) + reg = re.compile(">") + text = reg.sub(">", text) + return text + +def transStatus(status): + return { + 'avail': 'dostepny', + 'away': 'zaraz wracam', + 'blocking': 'BLOKUJE', + 'error': 'BLAD STATUSU!!', + 'ffc': 'chetny do rozmowy', + 'chat': 'chetny do rozmowy', + 'dnd': 'nie przeszkadzac', + 'xa': 'bardzo zajety', + 'notavail': 'niedostepny', + }[status] + +def displayNotify(title, text, timeout, type): + if not pynotify.init("EkgNotif"): + ekg.echo("you don't seem to have pynotify installed") + return 0 + n = pynotify.Notification(title, text, type) + n.set_timeout(timeout) + n.show() + return 1 + +def notifyStatus(session, uid, status, descr): + regexp = re.compile('irc:*') + regexp = regexp.findall(session) + if len(regexp): + return 1 + regexp = re.compile('.*' + session + '.*') + regexp = regexp.findall(uid) + if len(regexp): + ekg.echo("Zmienil sie status sesji: %s. Nie zostal on zmieniony przez ten program. Sprawdz to, jesli nie zmieniales statusu jakims innym programem" % session) + return 1 + sesja = ekg.session_get(session) + regexp = re.compile('([a-z]{2,4}:[^/]+)') + regexp = regexp.match(uid) + regexp = regexp.group() + try: + user = sesja.user_get(regexp) + except KeyError: + ekg.echo("Nie znalazlem uzytkownika %s." % uid) + return 1 + status = transStatus(status) + nick = user.nickname or user.uid or "Empty" + s = status or "Empty" + s = removeHTML(s) + text = "<b>" + nick + "</b> zmienil status na <b>" + s + "</b>" + if descr: + descr = removeHTML(descr) + text = text + ":\n" + descr + "\n" + return displayNotify(session, text, TIMEOUT_STATUS, ekg.config["notify:icon_status"]) + +def notifyMessage(session, uid, type, text, stime, ignore_level): + regexp = re.compile('irc:*') + regexp = regexp.findall(session) + if len(regexp): + return 1 + text = removeHTML(text) + sesja = ekg.session_get(session) + try: + user = sesja.user_get(uid) + except KeyError: + ekg.echo("Nie znalazlem uzytkownika %s." % uid) + return 1 + t = time.strftime("%H:%M:%S", time.gmtime(stime)) + title = t + " " + user.nickname + if len(text) > 200: + text = text[0:199] + "... >>>\n\n" + return displayNotify(title, text, TIMEOUT_MSG, ekg.config["notify:icon_msg"]) + +def timeCheck(name, args): + global TIMEOUT_MSG + global TIMEOUT_STATUS + rexp = re.compile('^[0-9]{4,4}') + rexp = rexp.findall(args) + if len(rexp) == 1: + if name == "notify:message_timeout": + TIMEOUT_MSG = int(rexp[0]) + return 1 + if name == "notify:status_timeout": + TIMEOUT_STATUS = int(rexp[0]) + return 1 + + if name == "notify:message_timeout": + ekg.echo("Zmienna %s bedzie pomijana do czasu, az zostanie ustawiona wartosc z zakresu od 1000ms do 9999ms. Jej obecna wartosc to: %i" % (name,TIMEOUT_MSG)) + elif name == "notify:status_timeout": + ekg.echo("Zmienna %s bedzie pomijana do czasu, az zostanie ustawiona wartosc z zakresu od 1000ms do 9999ms. Jej obecna wartosc to: %i" % (name,TIMEOUT_STATUS)) + return 0 + +ekg.handler_bind('protocol-status', notifyStatus) +ekg.handler_bind("protocol-message-received", notifyMessage) +ekg.variable_add("notify:icon_status", "dialog-warning") +ekg.variable_add("notify:icon_msg", "dialog-warning") +ekg.variable_add("notify:message_timeout", "3500", timeCheck) +ekg.variable_add("notify:status_timeout", "3500", timeCheck) + +if int(ekg.config["notify:message_timeout"]) < 1000 or int(ekg.config["notify:message_timeout"]) > 9999: + timeCheck("notify:message_timeout", ekg.config["notify:message_timeout"]) +if int(ekg.config["notify:status_timeout"]) < 1000 or int(ekg.config["notify:status_timeout"]) > 9999: + timeCheck("notify:status_timeout", ekg.config["notify:status_timeout"]) + ================================================================ _______________________________________________ pld-cvs-commit mailing list [email protected] http://lists.pld-linux.org/mailman/listinfo/pld-cvs-commit
