slixmpp/sleekxmpp/stanza/presence.py

63 lines
1.7 KiB
Python

"""
SleekXMPP: The Sleek XMPP Library
Copyright (C) 2010 Nathanael C. Fritz
This file is part of SleekXMPP.
See the file license.txt for copying permission.
"""
from .. xmlstream.stanzabase import StanzaBase
from xml.etree import cElementTree as ET
from . error import Error
from . rootstanza import RootStanza
class Presence(RootStanza):
interfaces = set(('type', 'to', 'from', 'id', 'status', 'priority'))
types = set(('available', 'unavailable', 'error', 'probe', 'subscribe', 'subscribed', 'unsubscribe', 'unsubscribed'))
showtypes = set(('dnd', 'chat', 'xa', 'away'))
sub_interfaces = set(('status', 'priority'))
name = 'presence'
plugin_attrib = name
namespace = 'jabber:client'
def getShowElement(self):
return self.xml.find("{%s}show" % self.namespace)
def setType(self, value):
show = self.getShowElement()
if value in self.types:
if show is not None:
self.xml.remove(show)
if value == 'available':
value = ''
self._setAttr('type', value)
elif value in self.showtypes:
if show is None:
show = ET.Element("{%s}show" % self.namespace)
self.xml.append(show)
show.text = value
return self
def setPriority(self, value):
self._setSubText('priority', text = str(value))
def getPriority(self):
p = self._getSubText('priority')
if not p: p = 0
return int(p)
def getType(self):
out = self._getAttr('type')
if not out:
show = self.getShowElement()
if show is not None:
out = show.text
if not out or out is None:
out = 'available'
return out
def reply(self):
if self['type'] == 'unsubscribe':
self['type'] = 'unsubscribed'
elif self['type'] == 'subscribe':
self['type'] = 'subscribed'
return StanzaBase.reply(self)