Pidgin Nachrichtenweiterleitung über DBus

Eigentlich hat alles damit angefangen, dass ich mir ein "Googlephone" G1 gekauft habe. Dieses hat echt gute Features und durch eine gewisse Anbindung an die Googledienste auch Push-Funktionen, wie Googlemail. Ich bin mir nicht sicher, aber ich vermute, dass auch Google Talk auf dem G1 als Push-Dienst funktioniert.
Beim Hören eines Podcasts kam ich auf die Idee, mir Systemnachrichten über Google Talk auf das Handy schicken zu lassen. Als erstes ist mir dann aber etwas Anderes eingefallen. Es wäre schön, dass, wenn man sich vom Rechner entfernt, die eintreffenden IMs weitergeleitet werden würden. Wenn man dann dringend erreicht werden muss, merkt man das auch.
Eigentlich gleicht man damit nur nicht vorhandene Fähigkeiten der proprietären Protokolle gegenüber jabber aus. Aber wer nutzt schon jabber... (leider)
Lange Rede, kurze Zusammenfassung: Ich wollte eine Weiterleitung von IMs auf jabber (Google Talk). Von DBus hatte ich schon mal gehört, daher hab ich über die DBus-Anbindung von Pidgin versucht. Im Netz habe ich einige passende Codefragmente gefunden, die allesamt in Python geschrieben waren. Ich hab es dann auch mit Python versucht, obwohl ich davon nicht viel Ahnung habe. Und hier ist das zusammengestückelte Skript zur Nachrichtenweiterleitung:
#!/usr/bin/env python

# Version: 0.2

import sys
import os
import xmpp
import time
import urllib
import urllib2
import dbus
import gobject
import dbus.glib
from dbus.mainloop.glib import DBusGMainLoop

def sendToJabber(text):
	tojid = 'Empfängeradresse'
	jidparams={}
	jid=xmpp.protocol.JID('Benutzername@server.domain')
	cl=xmpp.Client(jid.getDomain(),debug=[])
	jidparams['username']="Benutzername Sender"
	jidparams['password']="Passwort"
	jidparams['resource']="away-forward"
	
	
	con=cl.connect()
	if not con:
    		print 'could not connect!'
    		sys.exit()
	print 'connected with',con
	auth=cl.auth(jidparams['username'],jidparams['password'],resource=jidparams['resource'])
	if not auth:
    		print 'could not authenticate!'
    		sys.exit()
	print 'authenticated using',auth

	id=cl.send(xmpp.protocol.Message(tojid,text))
	print 'sent message with id',id

	time.sleep(1)


def onSessionIdleChanged(state):
    global away
    if state:
	away=1
    else:
	away=0

def receivedMessage(account, sender, message, conversation, flags):
    buddy = purple.PurpleFindBuddy(account, sender)
    alias = purple.PurpleBuddyGetAlias(buddy)
    text = alias + ": " + message
    if away == 1:
        sendToJabber(text)




away=0
dbus.mainloop.glib.DBusGMainLoop(set_as_default=True)
bus = dbus.SessionBus()
bus.add_signal_receiver(receivedMessage, dbus_interface="im.pidgin.purple.PurpleInterface", signal_name="ReceivedImMsg")
bus.add_signal_receiver(onSessionIdleChanged, 'SessionIdleChanged', 'org.gnome.ScreenSaver')
obj = bus.get_object("im.pidgin.purple.PurpleService", "/im/pidgin/purple/PurpleObject")
purple = dbus.Interface(obj, "im.pidgin.purple.PurpleInterface")


loop = gobject.MainLoop()
loop.run()
Der Knackpunkt bei der Sache ist die Abfrage, ob der Benutzer abwesend ist. Ich habe es gelöst, indem das Skript den away-Status von Pidgin abfragt. Dazu habe ich mir einen extra Status angelegt, der bei kurzer Abwesenheitszeit automatisch eingestellt wird. Dabei wird dann auch automatisch das Google Talk-Konto abgemeldet, um eine unendliche Nachrichtenschleife vermieden wird. Da ich noch Twitgin für Twitter nutze, melde ich dieses damit auch automatisch ab, um nicht diese Nachrichten auch noch weitergeleitet zu bekommen. Leider gibt DBus den Status nicht unter dem bei Pidgin eingestellten Namen weiter, sondern unter einer Nummer. Diese muss man erst einmal herausfinden. Dafür ist die Zeile "print status". Startet man das Skript im Terminal, gibt dies den aktuellen Pidginstatus aus. Den Richtigen (den für abwesend) muss man dann in der nächsten Zeile eintragen.
Der Rest ist recht selbsterklärend, man benötigt nur die Adresse des Ziel-Google-Talk-Kontos und die Zugangsdaten eines zweiten jabber-Kontos zum Nachrichten senden.

Leider gibt es in Google Talk einen Bug beim Nachrichtenempfang (nicht alle werden angezeigt), aber man erhält jede Nachricht als Benachrichtigung. Und hoffentlich wird der Fehler in Android bald behoben!

Update: Das mit den Statusnummern hat sich als unzuverlässig erwiesen. Daher hab ich auf den Idle-Status von Gnome umgeschwenkt (schon im Code ergänzt).

Trackback URL:
http://barahir.twoday.net/stories/5827112/modTrackback

User Status

Du bist nicht angemeldet.

Suche

 

Aktuelle Beiträge

Sorry, dass ich schon...
Sorry, dass ich schon wieder nerve, aber dann sitzt...
Maxe (Gast) - 23. Nov, 22:37
Das erste "tail" ist...
Das erste "tail" ist remote, das zweite lokal. Die...
Barahir - 23. Nov, 20:15
Super
Danke. Kannst du mir jetzt noch verraten, wozu das...
Maxe (Gast) - 23. Nov, 18:23

Charts Lieblingskünstler - Diese Woche

RSS Box

The Harlequin project
This impressive little mod is quite fantastic really....
Caleb Kraft - 11. Dez, 23:13
Remote bike mountain
The Remote Bike project, caught our eye today. Inspired...
Caleb Kraft - 11. Dez, 21:36
Advanced in car computer system
[Jonathan] sent us a pretty in-depth writeup of his...
Caleb Kraft - 11. Dez, 19:28
Bender keg cooler
What? Another Bender project? This almost went in...
Caleb Kraft - 11. Dez, 17:55
Perspective tracking with only a web cam
[Johhny chung Lee], eat your heart out. Check out...
Caleb Kraft - 11. Dez, 16:31
Word Clock redux
[drj113] wrote back to let us know his latest version...
Jakob Griffith - 11. Dez, 15:29
Barahir: Gründe warum Amazon so erfolgreich ist: Gestern...
Barahir: Gründe warum Amazon so erfolgreich ist:...
11. Dez, 09:25
Remote control pellet gun – with scope
Project Thunderbird is an automated predator and pest...
Mike Szczys - 11. Dez, 00:32
WiiMote + iPhone Update
Using a Wii remote as the controller for iPhone games?...
Mike Szczys - 10. Dez, 21:01
Bulbdial clock kit released
Evil Mad Scientist Laboratories has just released...
Mike Szczys - 10. Dez, 19:00
AC Shield will take your breath (heart beat) away.
[Ryanjmclaughlin] came up with the idea of a Arduino...
Mike Szczys - 10. Dez, 17:28
Bendërbrau now a reality
It appears to be 5 o’clock somewhere as everyone...
Jakob Griffith - 10. Dez, 15:27
Schöner die Cluster nie schwenken
Es gibt Dinge über die kann man wunderbar streiten:...
Joern - 9. Dez, 19:46
Verizon users shout “I am root!”
Droid has been rooted. It was only a matter of time...
Mike Szczys - 9. Dez, 17:44
Robot hands you your ass at beer pong
Guess who built this contraption? You’re right,...
Mike Szczys - 9. Dez, 16:44

Status

Online seit 1136 Tagen
Zuletzt aktualisiert: 23. Nov, 22:37