示例#1
0
void clanmate_list_update(const char *jid,
                          const char *nickname,
                          const char *profile_id,
                          int status,
                          int experience,
                          int clan_points,
                          int clan_role)
{
    struct clanmate *f = list_get(session.clanmates, nickname);

    if (!f)
        return;

    clanmate_free_fields_(f);

    clanmate_set_fields_(f, jid, nickname, profile_id, status, experience,
                         clan_points, clan_role);

#ifdef DBUS_API
    dbus_api_update_buddy_list();
#endif
}
示例#2
0
static void clanmate_free(struct clanmate *f)
{
    clanmate_free_fields_(f);
    free(f);
}
示例#3
0
void clanmate_list_update ( const char *jid,
							const char *nickname,
							const char *profile_id,
							int status,
							int experience,
							int clan_points,
							int clan_role,
							unsigned int invite_date,
							char *place_token,
							char *place_info_token,
							char *mode_info_token,
							char *mission_info_token )
{
	/* Handled by friend_list_update() */
	if ( list_get ( session.profile.friends, nickname ) )
		return;

	struct clanmate *f = list_get ( session.clan.clanmates, nickname );

	if ( !f )
		return;

	if ( status & STATUS_ONLINE )
	{
		char *map;
		if ( place_token && place_info_token && strstr ( place_token, "pve" ) )
			FORMAT ( map, "%s", place_info_token );
		else if ( place_token && mission_info_token && strstr ( place_token, "pvp" ) )
			FORMAT ( map, "@%s", mission_info_token + sizeof ( "@pvp_mission_display_name" ) );
		else
			map = strdup ( KRED "@unknown" );

		int NOTONLINE = STATUS_PLAYING | STATUS_AFK | STATUS_ROOM;

		if ( f->status == STATUS_OFFLINE )
			LOGPRINT ( "%-20s " KGRN BOLD "%s\n", "PLAYER ONLINE", nickname );
		else if ( ( f->status & NOTONLINE ) && !( status & NOTONLINE ) )
			LOGPRINT ( "%-20s " KGRN BOLD "%s\n", "PLAYER ONLINE", nickname );
		else if ( ( !( f->status & STATUS_AFK ) || ( f->status & ( STATUS_ROOM | STATUS_PLAYING ) ) ) &&
				  ( ( status & STATUS_AFK ) && !( status & ( STATUS_ROOM | STATUS_PLAYING ) ) ) )
			LOGPRINT ( "%-20s " KYEL BOLD "%s\n", "PLAYER AFK", nickname );
		else if ( !( f->status & STATUS_PLAYING ) && ( status & STATUS_PLAYING ) )
			LOGPRINT ( "%-20s " KMAG BOLD "%-20s " KRST BOLD "%s\n", "PLAYER INGAME", nickname, map );
		else if ( !( f->status & STATUS_ROOM ) && ( status & STATUS_ROOM ) )
			LOGPRINT ( "%-20s " KGRN BOLD "%-20s " KRST BOLD "%s\n", "PLAYER INROOM", nickname, map );

		free ( map );
	}
	else if ( f->status & STATUS_ONLINE )
		LOGPRINT ( "%-20s " KCYN BOLD "%s\n", "PLAYER OFFLINE", nickname );

	clanmate_free_fields_ ( f );

	clanmate_set_fields_ ( f, jid, nickname, profile_id, status, experience,
						   clan_points, clan_role, invite_date,
						   place_token, place_info_token, mode_info_token, mission_info_token );

#ifdef DBUS_API
	dbus_api_update_buddy_list ( );
#endif
}