#!/usr/bin/python# Banshee Plugin for Xchat# Copyright (C) 2007 Will Farrington <wcfarrington@gmail.com>## This program is free software: you can redistribute it and/or modify# it under the terms of the GNU General Public License as published by# the Free Software Foundation, either version 3 of the License, or# (at your option) any later version.## This program is distributed in the hope that it will be useful,# but WITHOUT ANY WARRANTY; without even the implied warranty of# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the# GNU General Public License for more details.## You should have received a copy of the GNU General Public License# along with this program. If not, see <http://www.gnu.org/licenses/>.import xchatimport dbus__module_name__ = "Banshee Plugin for Xchat"__module_version__ = "1.0"__module_description__ = "Announce music from and control Banshee Music Player."bus = dbus.SessionBus()class Dbus: def __init__(self): obj = bus.get_object('org.freedesktop.DBus', '/org/freedesktop/DBus') iface = dbus.Interface(obj, 'org.freedesktop.DBus') if 'org.gnome.Banshee' in iface.ListNames(): banshee_obj = bus.get_object('org.gnome.Banshee', '/org/gnome/Banshee/Player') global banshee_iface banshee_iface = dbus.Interface(banshee_obj, 'org.gnome.Banshee.Core') else: xchat.prnt("\002Banshee is not registered with DBus. Please start Banshee.\002") return def grab_track_data(self): global track_ritle global track_artist global track_album global track_rating global track_pos global track_dur track_title = banshee_iface.GetPlayingTitle() track_artist = banshee_iface.GetPlayingArtist() track_album = banshee_iface.GetPlayingAlbum() track_rating = banshee_iface.GetPlayingRating() track_pos = banshee_iface.GetPlayingPosition() track_dur = banshee_iface.GetPlayingDuration() if track_rating == 0: track_rating = "Not Rated." else: track_rating = "%s/5" % track_rating track_pos = int(track_pos) track_dur = int(track_dur) track_pos = "%d:%02d" % (track_pos / 60, track_pos % 60) track_dur = "%d:%02d" % (track_dur / 60, track_dur % 60)class Commands: def mabout(self, word, word_eol, nil): xchat.prnt("\002\037%s\037\002" % __module_name__) xchat.prnt(" \002About:\002") xchat.prnt(" * Author: Will Farrington <wcfarrington@gmail.com>") xchat.prnt(" * Script Version: %s" % __module_version__) xchat.prnt(" \002Help:\002") xchat.prnt(" * \037/media\037 - Displays the currently playing track") xchat.prnt(" * \037/prev\037 - Skips to the previous track") xchat.prnt(" * \037/stop\037 - Stops playback") xchat.prnt(" * \037/play\037 - Starts playback") xchat.prnt(" * \037/pause\037 - Pauses playback") xchat.prnt(" * \037/next\037 - Skips to the next track") xchat.prnt(" * \037/rate n\037 - Rates the song n/5") def media(self, word, word_eol, nil): Dbus().grab_track_data() xchat.command("me is listening to: \"%s\" by %s on %s; Rated: %s (%s/%s)" % (track_title, track_artist, track_album, track_rating, track_pos, track_dur)) def next(self, word, word_eol, nil): Dbus() banshee_iface.Next() xchat.prnt("Skipped to next track.") def prev(self, word, word_eol, nil): Dbus() banshee_iface.Previous() xchat.prnt("Skipped to previous track.") def play(self, word, word_eol, nil): Dbus() banshee_iface.Play() xchat.prnt("Started playback.") def pause(self, word, word_eol, nil): Dbus() banshee_iface.Pause() xchat.prnt("Paused playback.") def rate(self, word, word_eol, new_rating): Dbus().grab_track_data() new_rating = int(word[1]) banshee_iface.SetPlayingRating(new_rating) xchat.prnt("Rated \"%s\" by %s a %s/5." % (track_title, track_artist, new_rating))xchat.prnt("Loaded \002%s\002:" % __module_name__)xchat.prnt("Use \002/mabout\002 to display a list of commands.")mabout_hook = xchat.hook_command("mabout", Commands().mabout)media_hook = xchat.hook_command("media", Commands().media)next_hook = xchat.hook_command("next", Commands().next)prev_hook = xchat.hook_command("prev", Commands().prev)play_hook = xchat.hook_command("play", Commands().play)pause_hook = xchat.hook_command("pause", Commands().pause)rate_hook = xchat.hook_command("rate", Commands().rate)def munload(nil): xchat.unhook(mabout_hook) xchat.unhook(media_hook) xchat.unhook(next_hook) xchat.unhook(prev_hook) xchat.unhook(play_hook) xchat.unhook(pause_hook) xchat.unhook(rate_hook) xchat.prnt("Thanks for using my script! =)")xchat.hook_unload(munload)