#!/usr/bin/ruby # # pidgin_status.rb # a d-bus script to set your pidgin status and optional status message # # Copyright (c) 2008, 2010 joshua stein # # 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. The name of the author may not be used to endorse or promote products # derived from this software without specific prior written permission. # # THIS SOFTWARE IS PROVIDED BY THE AUTHOR "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 AUTHOR 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. # require "dbus" # magic! STATUS_AVAILABLE = 2 STATUS_AWAY = 5 status = case ARGV[0].to_s when "away" STATUS_AWAY when "available" STATUS_AVAILABLE else STDERR.puts "usage: #{$0} " exit -1 end message = ARGV[1] sb = DBus::SessionBus.instance if !sb.proxy.ListNames.first.include?("im.pidgin.purple.PurpleService") STDERR.puts "pidgin not running, exiting" exit -1 end pd = sb.service("im.pidgin.purple.PurpleService") pidgin = pd.object("/im/pidgin/purple/PurpleObject") pidgin.default_iface = "im.pidgin.purple.PurpleInterface" pidgin.introspect if (ss = pidgin.PurpleSavedstatusGetCurrent()).is_a? Array if pidgin.PurpleSavedstatusGetType(ss.first).first == status && pidgin.PurpleSavedstatusGetMessage(ss.first).first.to_s == message.to_s # already away or available with this message, don't change exit end ps = pidgin.PurpleSavedstatusNew("", status).first pidgin.PurpleSavedstatusSetMessage(ps, message.to_s) pidgin.PurpleSavedstatusActivate(ps) end