quick frontend (contat list/cache): workaround for avatar issue in MUC. Need to be reworked properly in the future (TODO)
This commit is contained in:
parent
b97038f281
commit
f992739212
2 changed files with 34 additions and 12 deletions
|
|
@ -764,7 +764,10 @@ class QuickApp(object):
|
|||
self.contact_lists[profile].setCache(entity, 'nick', value)
|
||||
self.callListeners('nick', entity, value, profile=profile)
|
||||
elif key == "avatar":
|
||||
if value and entity in self.contact_lists[profile]:
|
||||
if value: # and entity in self.contact_lists[profile]:
|
||||
# FIXME: contact_list check is removed to work around 'avatar' issues
|
||||
# (avatar can't be requested if we don't save them here)
|
||||
# avatar need to be refactored properly in backend and here
|
||||
def gotFilename(filename):
|
||||
self.contact_lists[profile].setCache(entity, 'avatar', filename)
|
||||
self.callListeners('avatar', entity, filename, profile=profile)
|
||||
|
|
|
|||
|
|
@ -207,13 +207,14 @@ class ProfileContactList(object):
|
|||
def getCache(self, entity, name=None):
|
||||
"""Return a cache value for a contact
|
||||
|
||||
@param entity(entity.entity): entity of the contact from who we want data (resource is used if given)
|
||||
@param entity(jid.JID): entity of the contact from who we want data (resource is used if given)
|
||||
if a resource specific information is requested:
|
||||
- if no resource is given (bare jid), the main resource is used, according to priority
|
||||
- if resource is given, it is used
|
||||
@param name(unicode): name the data to get, or None to get everything
|
||||
@return: full cache if no name is given, or value of "name", or None
|
||||
"""
|
||||
# FIXME: resource handling need to be reworked
|
||||
try:
|
||||
cache = self._cache[entity.bare]
|
||||
except KeyError:
|
||||
|
|
@ -222,19 +223,33 @@ class ProfileContactList(object):
|
|||
|
||||
if name is None:
|
||||
return cache
|
||||
try:
|
||||
if name in ('status', C.PRESENCE_STATUSES, C.PRESENCE_PRIORITY, C.PRESENCE_SHOW):
|
||||
# these data are related to the resource
|
||||
if not entity.resource:
|
||||
|
||||
if name in ('status', C.PRESENCE_STATUSES, C.PRESENCE_PRIORITY, C.PRESENCE_SHOW):
|
||||
# these data are related to the resource
|
||||
if not entity.resource:
|
||||
try:
|
||||
main_resource = cache[C.CONTACT_MAIN_RESOURCE]
|
||||
cache = cache[C.CONTACT_RESOURCES][main_resource]
|
||||
else:
|
||||
cache = cache[C.CONTACT_RESOURCES][entity.resource]
|
||||
except KeyError:
|
||||
# we ignore presence info if we don't have any resource in cache
|
||||
# FIXME: to be checked
|
||||
return
|
||||
cache = cache[C.CONTACT_RESOURCES].setdefault(main_resource, {})
|
||||
else:
|
||||
cache = cache[C.CONTACT_RESOURCES].setdefault(entity.resource, {})
|
||||
|
||||
if name == 'status': # XXX: we get the first status for 'status' key
|
||||
# TODO: manage main language for statuses
|
||||
return cache[C.PRESENCE_STATUSES].get(C.PRESENCE_STATUSES_DEFAULT, '')
|
||||
if name == 'status': # XXX: we get the first status for 'status' key
|
||||
# TODO: manage main language for statuses
|
||||
return cache[C.PRESENCE_STATUSES].get(C.PRESENCE_STATUSES_DEFAULT, '')
|
||||
|
||||
elif entity.resource:
|
||||
# if we have a resource, we first check if the value is not available for the resource
|
||||
# and we fallback to main cache if not found
|
||||
try:
|
||||
return cache[C.CONTACT_RESOURCES][entity.resource][name]
|
||||
except KeyError:
|
||||
pass
|
||||
|
||||
try:
|
||||
return cache[name]
|
||||
except KeyError:
|
||||
return None
|
||||
|
|
@ -373,6 +388,10 @@ class ProfileContactList(object):
|
|||
|
||||
# now the attributes we keep in cache
|
||||
for attribute, value in attributes.iteritems():
|
||||
if attribute == 'avatar' and entity.resource:
|
||||
# FIXME: Q&D hack to workaround avatar issue.
|
||||
# TODO: Need to refactor avatar handling in backend and here
|
||||
cache[C.CONTACT_RESOURCES].setdefault(entity.resource, {})[attribute] = value
|
||||
cache[attribute] = value
|
||||
|
||||
# we can update the display
|
||||
|
|
|
|||
Loading…
Reference in a new issue