packages: ekg2-script-pynotif/pynotif.py (NEW) - initial PLD release

pawelz pawelz at pld-linux.org
Mon Jul 6 10:12:26 CEST 2009


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("&#38;", text)
+    reg = re.compile("<")
+    text = reg.sub("&#60;", text)
+    reg = re.compile(">")
+    text = reg.sub("&#62;", 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"])
+
================================================================


More information about the pld-cvs-commit mailing list