static void grl_gravatar_source_resolve (GrlSource *source, GrlSourceResolveSpec *rs) { gboolean artist_avatar_required = FALSE; gboolean author_avatar_required = FALSE; GRL_DEBUG (__FUNCTION__); GList *iter; /* Check that albumart is requested */ iter = rs->keys; while (iter && (!artist_avatar_required || !author_avatar_required)) { GrlKeyID key = GRLPOINTER_TO_KEYID (iter->data); if (key == GRL_METADATA_KEY_ARTIST_AVATAR) { artist_avatar_required = TRUE; } else if (key == GRL_METADATA_KEY_AUTHOR_AVATAR) { author_avatar_required = TRUE; } iter = g_list_next (iter); } if (artist_avatar_required) { set_avatar (GRL_DATA (rs->media), GRL_METADATA_KEY_ARTIST); } if (author_avatar_required) { set_avatar (GRL_DATA (rs->media), GRL_METADATA_KEY_AUTHOR); } rs->callback (source, rs->operation_id, rs->media, rs->user_data, NULL); }
/* sets self avatar, see self_set_and_save_avatar */ int self_set_avatar(const uint8_t *data, uint32_t size) { if (!set_avatar(-1, data, size)) { return 0; } uint8_t *png_data = malloc(size); memcpy(png_data, data, size); postmessage_toxcore(TOX_AVATAR_SET, UTOX_AVATAR_FORMAT_PNG, size, png_data); return 1; }
ts::uint32 active_protocol_c::gm_handler(gmsg<GM_UI_EVENT>&e) { if (UE_THEMECHANGED == e.evt) { // self avatar must be recreated to fit new gui theme set_avatar( contacts().find_subself(id) ); icons_cache.clear(); // FREE MEMORY } return 0; }
/** tries to load avatar from disk for given client id string and set avatar based on saved png data * avatar is avatar to initialize. Will be unset if no file is found on disk or if file is corrupt or too large, * otherwise will be set to avatar found on disk * id is cid string of whose avatar to find(see also load_avatar in avatar.h) * if png_data_out is not NULL, the png data loaded from disk will be copied to it. * if it is not null, it should be at least UTOX_AVATAR_MAX_DATA_LENGTH bytes long * if png_size_out is not null, the size of the png data will be stored in it * * returns: 1 on successful loading, 0 on failure * * TODO: move this function into avatar.c */ _Bool init_avatar(AVATAR *avatar, const char_t *id, uint8_t *png_data_out, uint32_t *png_size_out) { unset_avatar(avatar); uint8_t avatar_data[UTOX_AVATAR_MAX_DATA_LENGTH]; uint32_t size; if (load_avatar(id, avatar_data, &size)) { if (set_avatar(avatar, avatar_data, size)) { if (png_data_out) { memcpy(png_data_out, avatar_data, size); } if (png_size_out) { *png_size_out = size; } return 1; } } return 0; }
/** tries to load avatar from disk for given client id string and set avatar based on saved png data * avatar is avatar to initialize. Will be unset if no file is found on disk or if file is corrupt or too large, * otherwise will be set to avatar found on disk * id is cid string of whose avatar to find(see also load_avatar in avatar.h) * if png_data_out is not NULL, the png data loaded from disk will be copied to it. * if it is not null, it should be at least UTOX_AVATAR_MAX_DATA_LENGTH bytes long * if png_size_out is not null, the size of the png data will be stored in it * * returns: 1 on successful loading, 0 on failure */ _Bool init_avatar(AVATAR *avatar, uint32_t friend_number, uint8_t *png_data_out, uint32_t *png_size_out) { unset_avatar(avatar); uint8_t *avatar_data = NULL; size_t size = 0; if (load_avatar(friend_number, &avatar_data, &size)) { if (set_avatar(friend_number, avatar_data, size)) { if (png_data_out) { memcpy(png_data_out, avatar_data, size); } if (png_size_out) { *png_size_out = size; } return 1; } } return 0; }