CUBISTCODE

CUBISTCODE

Notification window for Xmms2 track change

#!/usr/bin/env python
# display_track.py
# show osd notification on xmms2 track change

import xmmsclient
import os
import sys
import time

def xmms_connect(name):
  xmms = xmmsclient.XMMS(name)
  try:
    xmms.connect(os.getenv("XMMS_PATH"))
  except IOError, detail:
    print "Connection failed:", detail
    sys.exit(1)

  return xmms

# retrieve current playing id
def xmms_playback_id(xmms):
  result = xmms.playback_current_id()
  result.wait()
  if result.iserror():
    return 0

  id = result.value()

  return id
        


def get_current_track(xmms, playback_id):
  result = xmms.medialib_get_info(playback_id)
  result.wait()

  if result.iserror():
    print "medialib get info returns error, %s" % result.get_error()
    return None

  minfo = result.value()
  try:
    artist = minfo["artist"]
  except KeyError:
    artist = "No Artist"

  try:
    title = minfo["title"]
  except KeyError:
    title = "No Title"
        
  try:
    bitrate = minfo["bitrate"]
  except KeyError:
    bitrate = 0
        
  return "%s - %s [%s]" % (artist, title, bitrate)

def main():
  last_playback_id = 0
  osd_options="\
--font='-b&h-lucida-medium-normal-*-96-*-*-*-p-*-iso10646-1' \
-B black \
-R white \
-b 100 \
--x-offset=50 \
--y-offset=-50 \
--width=900"
  xmms = xmms_connect("aosd_display")

  while 1:
    playback_id = xmms_playback_id(xmms)

    if playback_id != 0 and playback_id != last_playback_id:
      last_playback_id = playback_id
      track = get_current_track(xmms, playback_id)
      os.system("echo '%s' | /usr/bin/aosd_cat %s" % (track, osd_options))
    time.sleep(2)
    
main()


Tags: python, scripts, xmms2

Rate This Article:



Privacy Policy | Copyright/Trademark Notification