Esempio n. 1
0
    def handle_icon_push(self, user, request):
        """ This is called when is received. Save the icon image. """

        validator = {'icon': str,
                     'iconid': str,
                     'version': lambda i: is_unsigned_int('version', i)
                    }
        if not validate(validator, request):
            return None

        icon = request['icon']
        iconid = request['iconid']

        if iconid == 'user':
            if user.get('faceversion') != request['version']:
                # This is an outdated version of the icon..
                return None
            if icon == '':
                # if we got an empty string, user removed the icon
                # giving None to save_face removes the picture
                delete_face(user)
            elif not save_face(user, icon):
                warning('Could not save face for %s: %d bytes\n' % (user.tag(), len(icon)))
                return None
            user.set('myfaceversion', request['version'])
            self.announce_user_change(user, what=(PROFILE_ICON_CHANGED, None))

        elif iconid.startswith('c:'):
            cname = iconid[2:]
            if cname == DEFAULT_COMMUNITY_NAME:
                return None
            com = self.get_ordinary_community(cname)
            if com == None:
                return None
            if com.get('iconversion') != request['version']:
                # This is an outdated version of the icon..
                return None
            if com.get('iconlocked'):
                return None
            if icon == '':
                delete_community_icon(com)
            elif not save_community_icon(com, icon):
                warning('Failed to update community icon: %s\n' % cname)
                return None
            com.set('myiconversion', request['version'])
            self.announce_community_change(com)
        return None
Esempio n. 2
0
    def set_community_icon(self, com, icon_fname):
        if icon_fname == None:
            delete_community_icon(com)
        else:
            icon = read_file_contents(icon_fname)
            if icon == None:
                warning('Can not set community icon from %s\n' % icon_fname)
                return False
            if not save_community_icon(com, icon):
                warning('Could not save community icon from %s\n' % icon_fname)
                return False

        # New icon version so other users will be notified. Random number
        # because this is a distributed system
        version = randint(0, 1 << 32 - 1)
        com.set('iconversion', version)
        com.set('myiconversion', version)

        self.announce_community_change(com)
        return True