Bonobo und Rhythmbox

Programmierung für GNOME und GTK+, GUI-Erstellung mit Glade.
Antworten
mitsuhiko
User
Beiträge: 1790
Registriert: Donnerstag 28. Oktober 2004, 16:33
Wohnort: Graz, Steiermark - Österreich
Kontaktdaten:

Ich habe bisher immer Signaturen von meinen Mediaplayern erstellt [1].
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()
TUFKAB – the user formerly known as blackbird
mitsuhiko
User
Beiträge: 1790
Registriert: Donnerstag 28. Oktober 2004, 16:33
Wohnort: Graz, Steiermark - Österreich
Kontaktdaten:

Wirklich keiner eine Idee? :cry:
TUFKAB – the user formerly known as blackbird
Antworten