Ejemplo n.º 1
0
/**
 * Process "presence changed" message.
 */
static void
process_presence(fetion_account *ac, const gchar *sipmsg)
{
    GSList       *list;
    GSList       *pos;
    fetion_buddy *buddy;
    HybridBuddy  *imbuddy;

    list = sip_parse_presence(ac, sipmsg);

    for (pos = list; pos; pos = pos->next) {

        buddy   = (fetion_buddy*)pos->data;
        imbuddy = hybrid_blist_find_buddy(ac->account, buddy->userid);

        if (buddy->localname && *(buddy->localname) != '\0') {
            hybrid_blist_set_buddy_name(imbuddy, buddy->localname);
        }
        hybrid_blist_set_buddy_mood(imbuddy, buddy->mood_phrase);

        switch (buddy->state) {
            case P_ONLINE:
                hybrid_blist_set_buddy_state(imbuddy, HYBRID_STATE_ONLINE);
                break;
            case P_OFFLINE:
                hybrid_blist_set_buddy_state(imbuddy, HYBRID_STATE_OFFLINE);
                break;
            case P_INVISIBLE:
                hybrid_blist_set_buddy_state(imbuddy, HYBRID_STATE_OFFLINE);
                break;
            case P_AWAY:
                hybrid_blist_set_buddy_state(imbuddy, HYBRID_STATE_AWAY);
                break;
            case P_BUSY:
                hybrid_blist_set_buddy_state(imbuddy, HYBRID_STATE_BUSY);
                break;
            default:
                hybrid_blist_set_buddy_state(imbuddy, HYBRID_STATE_AWAY);
                break;
        }

        fetion_update_portrait(ac, buddy);
    }
}
Ejemplo n.º 2
0
void
fetion_buddies_init(fetion_account *ac)
{
	GSList *pos;
	gchar *start, *stop, *id;
	fetion_buddy *buddy;
	HybridGroup *imgroup;
	HybridBuddy *imbuddy;

	for (pos = ac->buddies; pos; pos = pos->next) {
		buddy = (fetion_buddy*)pos->data;

		start = buddy->groups;
		stop = buddy->groups;

		while (*stop) {
			for (; *stop && *stop != ';'; stop ++);
			id = g_strndup(start, stop - start);

			imgroup = hybrid_blist_find_group(ac->account, id);

			imbuddy = hybrid_blist_add_buddy(ac->account, imgroup,
					buddy->userid, buddy->localname);

			if (*(imbuddy->name) == '\0') {
				hybrid_blist_set_buddy_name(imbuddy, buddy->sid);
			}

			hybrid_blist_set_buddy_status(imbuddy, buddy->status == 1 ? TRUE : FALSE);

			g_free(id);

			if (*stop) {
				stop ++;
				start = stop;

			} else {
				break;
			}
		}
	}
}