All pastes #1925591 Raw Edit

Elizabeth Jennifer Myers - Rhyth

public python v1 · immutable
#1925591 ·published 2010-08-26 02:54 UTC
rendered paste body
# rb_nowplaying.py - Print now playing status and whatnot## Copyright (C) 2010 Elizabeth Jennifer Myers. All rights reserved.## Redistribution and use in source and binary forms, with or without# modification, are permitted provided that the following conditions are# met:## 1) Redistributions of source code must retain the above copyright#    notice, this list of conditions and the following disclaimer.## 2) Redistributions in binary form must reproduce the above#    copyright notice, this list of conditions and the following#    disclaimer in the documentation and/or other materials provided#    with the distribution.## 3) Neither the name of the author nor the name of the contributors#    may be used to endorse or promote products derived from this#    software without specific prior written permission.# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.np_help_text = "/np - Song currently playing"prev_help_text = "/prev - Play previous song"next_help_text = "/next - Play next song"toggle_help_text = "/toggle - Toggle play/pause"__module_name__ = "rb_control"__module_version__ = "0.1"__module_description__ = "Control rhythmbox using xchat! :P" import xchat import dbusfrom os import pathdef get_dbus_obj():	try:		bus = dbus.SessionBus()	except:		xchat.prnt("dbus is shitting itself or something.")		return (None, None)	try:		playerobj = bus.get_object("org.gnome.Rhythmbox", "/org/gnome/Rhythmbox/Player")		shellobj = bus.get_object("org.gnome.Rhythmbox", "/org/gnome/Rhythmbox/Shell")	except:		xchat.prnt("I'm not very convinced rhythmbox is even running, dude...")		return (None, None)	player = dbus.Interface(playerobj, "org.gnome.Rhythmbox.Player")	shell = dbus.Interface(shellobj, "org.gnome.Rhythmbox.Shell")	return (player, shell)def convert_time(seconds):	hours = seconds / 3600	seconds -= 3600 * hours	minutes = seconds / 60	seconds -= 60 * minutes	if hours == 0:		return "%02d:%02d" % (minutes, seconds)	else:		return "%02d:%02d" % (hours, minutes, seconds)def rb_nowplaying(word, word_eol, userdata):	# Obtain dbus crud	player, shell = get_dbus_obj()	if player == None or shell == None:		return xchat.EAT_NONE	# Ascertain the current song playing via dbus	try:		nowplaying = shell.getSongProperties(player.getPlayingUri())	except:		xchat.command("say I'm not listening to anything.")		return xchat.EAT_NONE		# Get the various attributes and insert filler where appropriate	artist = nowplaying['artist']	if artist == '':		artist = "Unknown artist"		title = nowplaying['title']	if title == '':		title = "Unknown song"		album = nowplaying['album']	if album == '':		album = "Unknown album"	duration = nowplaying['duration']	if duration != 0:		duration = convert_time(duration)	else:		duration = "?:??"		genre = nowplaying['genre']	if genre == '':		genre = "Unknown"		bitrate = nowplaying['bitrate']	if bitrate == 0:		bitrate = "Unknown"	else:		bitrate = str(bitrate) + "k"	# Try to obtain the format specifier	try:		f = open(path.expanduser('~') + "/.xchat2/rb_format.txt", 'r')		npformat = f.read().rstrip("\r\n")		f.close()	except:		npformat = "me np: {artist} - {title} (album: {album}) ({duration}) (genre: {genre}) (bitrate: {bitrate})"	npformat = npformat.format(			artist = artist,			title = title,			album = album,			duration = duration,			genre = genre,			bitrate = bitrate)	# Bang.	xchat.command(npformat)def rb_next(word, word_eol, userdata):	# Obtain dbus crud	player, shell = get_dbus_obj()	if player == None or shell == None:		return xchat.EAT_NONE	try:		player.next()	except:		xchat.prnt("There was a problem communicating with rhythmbox (is rhythmbox running?)")def rb_prev(word, word_eol, userdata):	# Obtain dbus crud	player, shell = get_dbus_obj()	if player == None or shell == None:		return xchat.EAT_NONE	try:		player.previous()	except:		xchat.prnt("There was a problem communicating with rhythmbox (is rhythmbox running?)")def rb_toggle(word, word_eol, userdata):	# Obtain dbus crud	player, shell = get_dbus_obj()	if player == None or shell == None:		return xchat.EAT_NONE	try:		if player.getPlaying():			self.player.playPause(False)		else:			self.player.playPause(True)	except:		xchat.prnt("There was a problem communicating with rhythmbox (is rhythmbox running?)")xchat.hook_command("np", rb_nowplaying, help=np_help_text)xchat.hook_command("next", rb_next, help=next_help_text)xchat.hook_command("prev", rb_prev, help=prev_help_text)xchat.hook_command("toggle", rb_toggle, help=toggle_help_text)xchat.prnt("Script loaded.")