| [935] | 1 | #!/usr/bin/env python | 
|---|
|  | 2 | # -*- coding: utf-8 -*- | 
|---|
|  | 3 |  | 
|---|
| [940] | 4 | """ | 
|---|
|  | 5 | knotify-client sends messages to the KDE knotify daemon. | 
|---|
|  | 6 | KDE applications can define different types of messages | 
|---|
|  | 7 | and theses types define different actions | 
|---|
|  | 8 | (display message, play sound, start program, ...) | 
|---|
|  | 9 |  | 
|---|
|  | 10 | tested on KDE 4.3.5 (openSUSE 11.2) | 
|---|
|  | 11 | """ | 
|---|
|  | 12 |  | 
|---|
|  | 13 | # $Id: knotify-client 940 2010-12-09 19:25:47Z joergs $ | 
|---|
|  | 14 |  | 
|---|
|  | 15 |  | 
|---|
| [935] | 16 | import sys | 
|---|
|  | 17 | import dbus | 
|---|
| [940] | 18 | from os import system | 
|---|
| [938] | 19 | from pprint import pprint | 
|---|
|  | 20 | from time import sleep | 
|---|
| [935] | 21 |  | 
|---|
| [938] | 22 | # since python 2.7 | 
|---|
|  | 23 | #import argparse | 
|---|
|  | 24 | from optparse import OptionParser | 
|---|
| [935] | 25 |  | 
|---|
| [940] | 26 |  | 
|---|
|  | 27 | parser = OptionParser(usage = "\n  %prog [options] 'text message to send to knotify'\n  %prog --appevents APPLICATION") | 
|---|
| [938] | 28 | #parser.add_argument('message', type=string, nargs='+', | 
|---|
|  | 29 | #                   help='message text to send') | 
|---|
|  | 30 | parser.add_option('--event', dest='event', default="notification", | 
|---|
| [940] | 31 | help='event (default: %default). Use --appevents to get list of events') | 
|---|
|  | 32 | parser.add_option('--app', dest='application', default="kde", | 
|---|
|  | 33 | help='event from application (default: %default)') | 
|---|
| [938] | 34 | parser.add_option('--title', dest='title', default=sys.argv[0], | 
|---|
| [940] | 35 | help='text in title of knotify message') | 
|---|
| [938] | 36 | parser.add_option('--timeout', dest='timeout', type=int, default=0, | 
|---|
|  | 37 | help='timeout in seconds. Without timeout, message will stay until it is confirmed, but ' + sys.argv[0] + ' will return immedialy') | 
|---|
| [940] | 38 | parser.add_option('--appevents', metavar='APPLICATION', dest='appevents', | 
|---|
|  | 39 | help='print list of events for application') | 
|---|
| [938] | 40 | (options, args) = parser.parse_args() | 
|---|
|  | 41 |  | 
|---|
|  | 42 | print "options:" | 
|---|
|  | 43 | pprint(options) | 
|---|
|  | 44 |  | 
|---|
| [940] | 45 | if options.appevents: | 
|---|
|  | 46 | ressource = options.appevents + "/" + options.appevents + ".notifyrc" | 
|---|
|  | 47 | system("kread-ressource.py --type data " + ressource ) | 
|---|
|  | 48 | exit(0) | 
|---|
|  | 49 |  | 
|---|
| [938] | 50 | message = " ".join( args ) | 
|---|
|  | 51 |  | 
|---|
|  | 52 | print "message: ", message | 
|---|
|  | 53 |  | 
|---|
| [935] | 54 | knotify = dbus.SessionBus().get_object("org.kde.knotify", "/Notify") | 
|---|
|  | 55 |  | 
|---|
| [938] | 56 |  | 
|---|
|  | 57 | # predefined notify settings, see | 
|---|
|  | 58 | # find /usr/share/kde4/apps -name *.notifyrc | 
|---|
|  | 59 | # grep -v '[a-z]\[' /usr/share/kde4/apps/kde/kde.notifyrc | 
|---|
|  | 60 |  | 
|---|
| [935] | 61 | # interface for knotify, | 
|---|
|  | 62 | # taken from knotify.h | 
|---|
|  | 63 | # int event( | 
|---|
|  | 64 | #       const QString &event, | 
|---|
|  | 65 | #       const QString &fromApp, | 
|---|
| [938] | 66 | #       const QVariantList& contexts, | 
|---|
| [935] | 67 | #       const QString &title, | 
|---|
|  | 68 | #       const QString &text, | 
|---|
|  | 69 | #       const QByteArray& pixmap, | 
|---|
|  | 70 | #       const QStringList& actions, | 
|---|
|  | 71 | #       int timeout, | 
|---|
|  | 72 | #       qlonglong winId ); | 
|---|
|  | 73 |  | 
|---|
| [938] | 74 | # specifiing timeout as parameter does not show a effect, | 
|---|
|  | 75 | # therefore notification is closed manually after timeout | 
|---|
| [940] | 76 | id = knotify.event( options.event, options.application, [], options.title, message, [], [], options.timeout, dbus_interface="org.kde.KNotify") | 
|---|
| [935] | 77 |  | 
|---|
| [938] | 78 | if options.timeout > 0: | 
|---|
|  | 79 | print "Knotify-ID: ", id | 
|---|
| [935] | 80 |  | 
|---|
| [938] | 81 | sleep(options.timeout) | 
|---|
| [935] | 82 |  | 
|---|
| [938] | 83 | # void update(int id, const QString &title, const QString &text, const KNotifyImage& image,  const QStringList& actions); | 
|---|
|  | 84 | #knotify.update( id, "knotify-client", "finished", [], [], dbus_interface="org.kde.KNotify") | 
|---|
|  | 85 |  | 
|---|
|  | 86 | #sleep( 1 ) | 
|---|
|  | 87 |  | 
|---|
|  | 88 | #for i in range(3): | 
|---|
|  | 89 | #print i | 
|---|
|  | 90 | #knotify.update( id, "knotify-client", str(i), [], [], dbus_interface="org.kde.KNotify") | 
|---|
|  | 91 | ## void reemit(int id, const ContextList& contexts); | 
|---|
|  | 92 | #knotify.reemit( id, [], dbus_interface="org.kde.KNotify" ) | 
|---|
|  | 93 | #sleep(3) | 
|---|
|  | 94 |  | 
|---|
|  | 95 | knotify.closeNotification(id, dbus_interface="org.kde.KNotify"); | 
|---|
|  | 96 |  | 
|---|
|  | 97 | exit(0) | 
|---|