Mit Hilfe von bonobo habe ich es zumindest schon mal geschafft, dass bei Liederwechsel die Daten an das Serverskript weitergegeben werden.
Aber bei Programmende würde ich gerne einen leerstring an den Server senden.
Also data_upload(None).
Aber wie kann ich auf das Programmende ohne Endlosschleife testen? Mit Hilfe von Bonobo müsste ich doch eine Message von Rhythmbox abfangen können.
Hier mal mein Code:
Code: Alles auswählen
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import os, sys, bonobo, bonobo.ui, time, urllib
KEY = "GEHEIMER_KEY"
URL = "http://meinserver.tdl/pfad/zur/signatur.png"
FORMAT = "%(artist)s - %(title)s"
def get_rhythmbox_handle():
bonobo_id = "repo_ids.has('IDL:GNOME/Rhythmbox:1.0')"
result = bonobo.activation.activate(bonobo_id, [], 4)
return result
def get_trackinfo(handle):
try:
details = handle.getPlayerProperties().getValue("song").value()
return {
"title": details.title,
"artist": details.artist,
"album": details.album,
"index": details.track_number,
"length": details.duration,
"genre": details.genre,
"filename": details.path,
"filesize": details.filesize,
"count": details.play_count,
"rating": details.rating
}
except:
pass
def data_upload(trackinfo=None):
if trackinfo is None:
data = ""
else:
data = FORMAT % trackinfo
urllib.urlopen(URL + "?" + urllib.urlencode({"key":KEY,"update":data}))
def track_change(listener, event, arg, ev=None):
handle = get_rhythmbox_handle()
trackinfo = get_trackinfo(handle)
data_upload(trackinfo)
if __name__ == "__main__":
handle = get_rhythmbox_handle()
if not handle is None:
obj = handle.getPlayerProperties()
bonobo_id = "Bonobo/Property:change:song"
bonobo.event_source_client_add_listener(obj, track_change, bonobo_id)
bonobo.ui.main()