#!/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)