# =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/x'
require 'xmpp4r/jid'
require 'time'
module Jabber
module Delay
##
# Implementation of JEP 0091
# for
# applied on and stanzas
#
# One may also use XDelay#text for a descriptive reason
# for the delay.
#
# Please note that you must require 'xmpp4r/xdelay' to use
# this class as it's not required by a basic XMPP implementation.
# elements with the specific namespace will then be
# converted to XDelay automatically.
class XDelay < X
name_xmlns 'x', 'jabber:x:delay'
##
# Initialize a new XDelay element
#
# insertnow:: [Boolean] Set the stamp to [Time::now]
def initialize(insertnow=true)
super()
if insertnow
set_stamp(Time.now)
end
end
##
# Get the timestamp
# result:: [Time] or nil
def stamp
if attributes['stamp']
begin
# Actually this should be Time.xmlschema,
# but "unfortunately, the 'jabber:x:delay' namespace predates" JEP 0082
Time.parse(attributes['stamp'])
rescue ArgumentError
nil
end
else
nil
end
end
##
# Set the timestamp
# t:: [Time] or nil
def stamp=(t)
if t.nil?
attributes['stamp'] = nil
else
attributes['stamp'] = t.strftime("%Y%m%dT%H:%M:%S")
end
end
##
# Set the timestamp (chaining-friendly)
def set_stamp(t)
self.stamp = t
self
end
##
# Get the timestamp's origin
# result:: [JID]
def from
if attributes['from']
JID::new(attributes['from'])
else
nil
end
end
##
# Set the timestamp's origin
# jid:: [JID]
def from=(jid)
attributes['from'] = jid.nil? ? nil : jid.to_s
end
##
# Set the timestamp's origin (chaining-friendly)
def set_from(jid)
self.from = jid
self
end
end
end
end