+++ /dev/null
-#!/usr/bin/python
-# -*- coding: utf-8 -*-
-# Copyright (C) 2005-2009 Alexander Bernauer <alex@copton.net>
-# Copyright (C) 2005-2009 Rico Schiekel <fire@downgra.de>
-# Copyright (C) 2005-2009 Ulrich Dangel <uli@spamt.net>
-#
-# 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 version 2
-# of the License.
-#
-# 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, write to the Free Software
-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA # 02111-1307, USA.
-
-
-"""
-example of ~/.notifid.conf:
----------------------------
-
-import os
-
-host = "127.0.0.1"
-port = 8901
-logfile = os.path.expanduser("~/.event.log")
-osdparams = "-p bottom --color=red --delay=4 --age=4 " \
- "--font=\-\*\-helvetica\-medium\-r\-\*\-\*\-34\-\*\-\*\-\*\-\*\-\*\-\*\-15 " \
- "--offset=100 --shadow=0 --lines=5 --align=right --indent=100"
-actions = (
- (".*", [log], True),
- ("IRC:&bitlbee:bitlbee", [], False),
- (".*shutdown.*", [command('sudo shutdown -h now %(msg)s')], False),
- (".*", [libnotify], False),
-)
-
-"""
-
-import os
-import sys
-import re
-import string
-import socket
-import logging
-import getopt
-
-default_hostname = 'localhost'
-default_port = 1234
-default_osd_params = osdparams = "-p bottom --color=red --delay=4 --age=4 " \
- "--font=\-\*\-helvetica\-medium\-r\-\*\-\*\-34\-\*\-\*\-\*\-\*\-\*\-\*\-15 " \
- "--offset=100 --shadow=0 --lines=5 --align=right --indent=100"
-default_logfile = None
-
-
-def play(sound_file):
- def play_wrapper(msg):
- os.system('/usr/bin/aplay "%s" 2> /dev/null &' % sound_file)
- return play_wrapper
-
-def execute(command):
- def command_wrapper(msg):
- os.system(command % dict(msg = msg))
- return command_wrapper
-
-def osd(msg):
- osdcmd = "/usr/bin/osd_cat"
- osdpipe = os.popen("%s %s" % (osdcmd, osdparams), 'w')
- osdpipe.write(msg)
- osdpipe.close()
-
-def libnotify(msg):
- try:
- import dbus
- except ImportError:
- sys.stderr.write('Please install python-dbus\n')
- raise SystemExit(1)
-
- bus = dbus.SessionBus()
- notifyService = bus.get_object("org.freedesktop.Notifications", '/org/freedesktop/Notifications')
- interface = dbus.Interface(notifyService, 'org.freedesktop.Notifications')
-
- message, title = (':' + msg).split(':')[::-1][0:2]
- if not title:
- title, message = message, title
- interface.Notify('notify-server', 0, 'notification-message-im', title, message, [], {'x-canonical-append':'allowed'}, -1)
-
-def log(msg):
- if logger:
- logger.info(msg)
-
-def syntax():
- print "osd_server.py [options]"
- print " options:"
- print " -h --help print this message"
- print " -H --host host of the osd server (def: " + default_hostname + ")"
- print " -P --port port of the osd server (def: " + str(default_port) + ")"
- print " -l --log log file ('-' logs to stdout)"
-
-
-env = { 'play' : play,
- 'execute' : execute,
- 'osd' : osd,
- 'libnotify' : libnotify,
- 'log' : log,
- 'host' : default_hostname,
- 'port' : default_port,
- 'logfile' : default_logfile,
- }
-
-default_actions = (
- (".*", [log], True),
- (".*", [libnotify], False),
-)
-
-
-default_bind = (default_hostname, default_port)
-
-try:
- execfile(os.path.expanduser('~/.notifyd.conf'), {}, env)
-except IOError:
- pass
-
-try:
- opts, args = getopt.getopt(sys.argv[1:], "hH:P:l:", ["help", "host=", "port=", "log="])
-except getopt.GetoptError:
- syntax()
- sys.exit(2)
-
-for opt, arg in opts:
- if opt in ("-h", "--help"):
- syntax()
- sys.exit(3)
- elif opt in ("-H", "--host"):
- env['host'] = arg
- elif opt in ("-P", "--port"):
- env['port'] = int(arg)
- elif opt in ("-l", "--log"):
- env['logfile'] = arg
-
-
-actions = env.get('actions', default_actions)
-logfile_name = env.get('logfile')
-logfile_format = env.get('logformat', '%(asctime)s %(message)s')
-bind_address = (env['host'], env['port'])
-osd_params = env.get('osdparams', default_osd_params)
-
-if logfile_name:
- logger = logging.getLogger('notify_server')
- lformatter = logging.Formatter(logfile_format)
- if logfile_name not in ('', '-'):
- lfh = logging.FileHandler(logfile_name)
- lfh.setFormatter(lformatter)
- logger.addHandler(lfh)
- else:
- lout = logging.StreamHandler(sys.stdout)
- lout.setFormatter(lformatter)
- logger.addHandler(lout)
- logger.setLevel(logging.INFO)
-else:
- logger = None
-
-l = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
-l.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
-l.bind(bind_address)
-l.listen(5)
-
-def filter_char(c):
- return c in string.printable + "äöüßÄÖÜ" and c or '_'
-
-while 1:
- try:
- (con, addr) = l.accept()
- except:
- continue
- data = con.recv(50).strip()
- con.close()
-
- log = ''.join(filter_char(c) for c in data)
-
- for pattern, handlers, cont in actions:
- if re.match(pattern, log):
- for handler in handlers:
- handler(log)
- if not cont:
- break