# =XMPP4R - XMPP Library for Ruby # License:: Ruby's license (see the LICENSE file) or GNU GPL, at your option. # Website::http://home.gna.org/xmpp4r/ require 'xmpp4r/xmppelement' require 'rexml/element' module Jabber module UserTune NS_USERTUNE = 'http://jabber.org/protocol/tune' ## # The XMPP element, as defined in XEP-0118 User Tune # # See http://www.xmpp.org/extensions/xep-0118.html - this element # encapsulates metadata (artist, track etc) about a tune the user # is currently playing. These are expressed as child elements # such as , etc which are also managed by this class. # # If the element has no children then it indicates that the user # has stopped playing a tune. Use the Tune#playing? method to discover # this? class Tune < XMPPElement name_xmlns 'tune', NS_USERTUNE force_xmlns true ## # Construct a new <tune> element. # # Supply no arguments to make an # empty element to indicate that tune playing has stopped. # # artist:: [String] the artist or performer of the song or piece # title:: [String] the title of the song or piece # length:: [Fixnum] the duration of the song or piece in seconds # track:: [String] a unique identifier for the tune; e.g., the track number within a collection or the specific URI for the object (e.g., a stream or audio file) # source:: [String] the collection (e.g., album) or other source (e.g., a band website that hosts streams or audio files) # uri:: [String] a URI or URL pointing to information about the song, collection, or artist # rating:: [Numeric] a number indicating how much you like this song - will be clamped into an integer 0 <= x <= 10 def initialize(artist = nil, title = nil, length = nil, track = nil, source = nil, uri = nil, rating = nil) super() add_element(REXML::Element.new('artist')).text = artist if artist add_element(REXML::Element.new('title')).text = title if title add_element(REXML::Element.new('length')).text = length.to_s if length add_element(REXML::Element.new('track')).text = track if track add_element(REXML::Element.new('source')).text = source if source add_element(REXML::Element.new('uri')).text = uri if uri if rating and rating.kind_of?(Numeric) r = rating.to_i r = 0 if r < 0 r = 10 if r > 10 add_element(REXML::Element.new('rating')).text = r.to_s end end ## # Returns true if a tune is currently playing, otherwise false. def playing? (elements.size > 0) end ## # Get the artist for this tune. def artist first_element('artist').text if first_element('artist') end ## # Get the title of this tune. def title first_element('title').text if first_element('title') end ## # Get the length of this tune, in seconds. def length first_element('length').text.to_i if first_element('length') end ## # Get an identitier for this tune. def track first_element('track').text if first_element('track') end ## # Get the source of this tune, such as an album. def source first_element('source').text if first_element('source') end ## # Get a URI that represents this tune. def uri first_element('uri').text if first_element('uri') end ## # Get the rating for this track def rating first_element('rating').text.to_i if first_element('rating') end end end end