Bonobo und Rhythmbox

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

Bonobo und Rhythmbox

Beitragvon mitsuhiko » Donnerstag 19. Mai 2005, 15:03

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
Benutzeravatar
mitsuhiko
User
Beiträge: 1790
Registriert: Donnerstag 28. Oktober 2004, 16:33
Wohnort: Graz, Steiermark - Österreich
Kontaktdaten:

Beitragvon mitsuhiko » Sonntag 22. Mai 2005, 12:18

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

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder