KaikOut/kaikout/xmpp/profile.py

119 lines
3.4 KiB
Python
Raw Normal View History

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
NOTE
The VCard XML fields that can be set are as follows:
FN, NICKNAME, URL, BDAY, ROLE, NOTE, MAILER,
TZ, REV, UID, DESC, TITLE, PRODID, SORT-STRING,
N, ADR, TEL, EMAIL, JABBERID, ORG, CATEGORIES,
NOTE, PRODID, REV, SORT-STRING, SOUND, UID, URL,
CLASS, KEY, MAILER, GEO, TITLE, ROLE,
LOGO, AGENT
TODO
1) Test XEP-0084.
2) Make sure to support all type of servers.
3) Catch IqError
ERROR:slixmpp.basexmpp:internal-server-error: Database failure
WARNING:slixmpp.basexmpp:You should catch IqError exceptions
"""
import glob
from kaikout.config import Config
import kaikout.config as config
from kaikout.log import Logger
from slixmpp.exceptions import IqTimeout, IqError
import os
logger = Logger(__name__)
# class XmppProfile:
async def update(self):
""" Update profile """
try:
await set_vcard(self)
except IqTimeout as e:
logger.error('Profile vCard: Error Timeout')
logger.error(str(e))
except IqError as e:
logger.error('Profile vCard: Error XmppIQ')
logger.error(str(e))
try:
await set_avatar(self)
except IqTimeout as e:
logger.error('Profile Photo: Error Timeout')
logger.error(str(e))
except IqError as e:
logger.error('Profile Photo: Error XmppIQ')
logger.error(str(e))
async def set_avatar(self):
config_dir = config.get_default_config_directory()
if not os.path.isdir(config_dir):
config_dir = '/usr/share/kaikout/'
filename = glob.glob(config_dir + '/image.*')
if not filename and os.path.isdir('/usr/share/kaikout/'):
# filename = '/usr/share/kaikout/image.svg'
filename = glob.glob('/usr/share/kaikout/image.*')
if not filename:
config_dir = os.path.dirname(__file__)
config_dir = config_dir.split('/')
config_dir.pop()
config_dir = '/'.join(config_dir)
filename = glob.glob(config_dir + '/assets/image.*')
if len(filename):
filename = filename[0]
image_file = os.path.join(config_dir, filename)
with open(image_file, 'rb') as avatar_file:
avatar = avatar_file.read()
# await self.plugin['xep_0084'].publish_avatar(avatar)
try:
await self.plugin['xep_0153'].set_avatar(avatar=avatar)
except IqTimeout as e:
logger.error('Profile Photo: Error Timeout 222')
logger.error(str(e))
except IqError as e:
logger.error('Profile Photo: Error XmppIQ 222')
logger.error(str(e))
def set_identity(self, category):
"""
Identify for Service Descovery.
Parameters
----------
category : str
"client" or "service".
Returns
-------
None.
"""
self['xep_0030'].add_identity(
category=category,
itype='news',
name='kaikout',
node=None,
jid=self.boundjid.full,
)
async def set_vcard(self):
vcard = self.plugin['xep_0054'].make_vcard()
profile = config.get_values('accounts.toml', 'xmpp')['profile']
for key in profile:
vcard[key] = profile[key]
await self.plugin['xep_0054'].publish_vcard(vcard)