# vim:fileencoding=utf-8
# 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 .
# Copyright (c) 2009 by Paweł Tomak
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 = "" + nick + " zmienil status na " + s + ""
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"])