Seite 1 von 1

Bonobo und Rhythmbox

Verfasst: Donnerstag 19. Mai 2005, 15:03
von mitsuhiko
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()

Verfasst: Sonntag 22. Mai 2005, 12:18
von mitsuhiko
Wirklich keiner eine Idee? :cry: