summaryrefslogtreecommitdiff
path: root/src/contact.py
diff options
context:
space:
mode:
authorEmmanuel Gil Peyrot <linkmauve@linkmauve.fr>2016-03-31 18:54:41 +0100
committerEmmanuel Gil Peyrot <linkmauve@linkmauve.fr>2016-06-11 20:49:43 +0100
commit332a5c2553db41de777473a1e1be9cd1522c9496 (patch)
tree3ee06a59f147ccc4009b35cccfbe2461bcd18310 /src/contact.py
parentcf44cf7cdec9fdb35caa372563d57e7045dc29dd (diff)
downloadpoezio-332a5c2553db41de777473a1e1be9cd1522c9496.tar.gz
poezio-332a5c2553db41de777473a1e1be9cd1522c9496.tar.bz2
poezio-332a5c2553db41de777473a1e1be9cd1522c9496.tar.xz
poezio-332a5c2553db41de777473a1e1be9cd1522c9496.zip
Move the src directory to poezio, for better cython compatibility.
Diffstat (limited to 'src/contact.py')
-rw-r--r--src/contact.py197
1 files changed, 0 insertions, 197 deletions
diff --git a/src/contact.py b/src/contact.py
deleted file mode 100644
index c670e5bc..00000000
--- a/src/contact.py
+++ /dev/null
@@ -1,197 +0,0 @@
-# Copyright 2010-2011 Florent Le Coz <louiz@louiz.org>
-#
-# This file is part of Poezio.
-#
-# Poezio is free software: you can redistribute it and/or modify
-# it under the terms of the zlib license. See the COPYING file.
-
-"""
-Defines the Resource and Contact classes, which are used in
-the roster.
-"""
-
-import logging
-log = logging.getLogger(__name__)
-
-from common import safeJID
-from collections import defaultdict
-
-class Resource(object):
- """
- Defines a roster item.
- It's a precise resource.
- """
- def __init__(self, jid, data):
- """
- data: the dict to use as a source
- """
- self._jid = jid # Full jid
- self._data = data
-
- @property
- def jid(self):
- return self._jid
-
- @property
- def priority(self):
- return self._data.get('priority') or 0
-
- @property
- def presence(self):
- return self._data.get('show') or ''
-
- show = presence
-
- @property
- def status(self):
- return self._data.get('status') or ''
-
- def __repr__(self):
- return '<%s>' % self._jid
-
- def __eq__(self, value):
- if not isinstance(value, Resource):
- return False
- return self.jid == value.jid and self._data == value._data
-
-class Contact(object):
- """
- This a way to gather multiple resources from the same bare JID.
- This class contains zero or more Resource object and useful methods
- to get the resource with the highest priority, etc
- """
- def __init__(self, item):
- """
- item: a slixmpp RosterItem pointing to that contact
- """
- self.__item = item
- self.folded_states = defaultdict(lambda: True)
- self._name = ''
- self.error = None
- self.tune = {}
- self.gaming = {}
- self.mood = ''
- self.activity = ''
-
- @property
- def groups(self):
- """Name of the groups the contact is in"""
- return self.__item['groups'] or ['none']
-
- @property
- def bare_jid(self):
- """The bare jid of the contact"""
- return self.__item.jid
-
- @property
- def name(self):
- """The name of the contact or an empty string."""
- return self.__item['name'] or self._name or ''
-
- @name.setter
- def name(self, value):
- """Set the name of the contact with user nickname"""
- self._name = value
-
- @property
- def ask(self):
- if self.__item['pending_out']:
- return 'asked'
-
- @property
- def pending_in(self):
- """We received a subscribe stanza from this contact."""
- return self.__item['pending_in']
-
- @pending_in.setter
- def pending_in(self, value):
- self.__item['pending_in'] = value
-
- @property
- def pending_out(self):
- """We sent a subscribe stanza to this contact."""
- return self.__item['pending_out']
-
- @pending_out.setter
- def pending_out(self, value):
- self.__item['pending_out'] = value
-
- @property
- def resources(self):
- """List of the available resources as Resource objects"""
- return (Resource(
- '%s%s' % (self.bare_jid, ('/' + key) if key else ''),
- self.__item.resources[key]
- ) for key in self.__item.resources.keys())
-
- @property
- def subscription(self):
- return self.__item['subscription']
-
- def __contains__(self, value):
- return value in self.__item.resources or safeJID(value).resource in self.__item.resources
-
- def __len__(self):
- """Number of resources"""
- return len(self.__item.resources)
-
- def __bool__(self):
- """This contacts exists even when he has no resources"""
- return True
-
- def __getitem__(self, key):
- """Return the corresponding Resource object, or None"""
- res = safeJID(key).resource
- resources = self.__item.resources
- item = resources.get(res, None) or resources.get(key, None)
- return Resource(key, item) if item else None
-
- def subscribe(self):
- """Subscribe to this JID"""
- self.__item.subscribe()
-
- def authorize(self):
- """Authorize this JID"""
- self.__item.authorize()
-
- def unauthorize(self):
- """Unauthorize this JID"""
- self.__item.unauthorize()
-
- def unsubscribe(self):
- """Unsubscribe from this JID"""
- self.__item.unsubscribe()
-
- def get(self, key, default=None):
- """Same as __getitem__, but with a configurable default"""
- return self[key] or default
-
- def get_resources(self):
- """Return all resources, sorted by priority """
- compare_resources = lambda x: x.priority
- return sorted(self.resources, key=compare_resources, reverse=True)
-
- def get_highest_priority_resource(self):
- """Return the resource with the highest priority"""
- resources = self.get_resources()
- if resources:
- return resources[0]
- return None
-
- def folded(self, group_name='none'):
- """
- Return the Folded state of a contact for this group
- """
- return self.folded_states[group_name]
-
- def toggle_folded(self, group='none'):
- """
- Fold if it's unfolded, and vice versa
- """
- self.folded_states[group] = not self.folded_states[group]
-
- def __repr__(self):
- ret = '<Contact: %s' % self.bare_jid
- for resource in self.resources:
- ret += '\n\t\t%s' % resource
- return ret + ' />\n'