--- a/src/protocols/oscar/oscar.c Mon Mar 10 04:51:10 2003 +0000 +++ b/src/protocols/oscar/oscar.c Mon Mar 10 05:30:31 2003 +0000 @@ -2202,13 +2202,13 @@ if (g_slist_find(connections, gc)) { struct oscar_data *od = gc->proto_data; - struct buddy *buddy = find_buddy(gc->account, data->name); - struct group *group = find_group_by_buddy(buddy); + struct buddy *buddy = gaim_find_buddy(gc->account, data->name); + struct group *group = gaim_find_buddys_group(buddy); if (buddy && group) { debug_printf("ssi: adding buddy %s to group %s\n", buddy->name, group->name); aim_ssi_sendauthrequest(od->sess, od->conn, data->name, msg ? msg : _("Please authorize me so I can add you to my buddy list.")); if (!aim_ssi_itemlist_finditem(od->sess->ssi.local, group->name, buddy->name, AIM_SSI_TYPE_BUDDY)) - aim_ssi_addbuddy(od->sess, od->conn, buddy->name, group->name, get_buddy_alias_only(buddy), NULL, NULL, 1); + aim_ssi_addbuddy(od->sess, od->conn, buddy->name, group->name, gaim_get_buddy_alias_only(buddy), NULL, NULL, 1); } } } @@ -2233,9 +2233,9 @@ struct buddy *buddy; gchar *dialog_msg, *nombre; - buddy = find_buddy(gc->account, name); - if (buddy && (get_buddy_alias_only(buddy))) - nombre = g_strdup_printf("%s (%s)", name, get_buddy_alias_only(buddy)); + buddy = gaim_find_buddy(gc->account, name); + if (buddy && (gaim_get_buddy_alias_only(buddy))) + nombre = g_strdup_printf("%s (%s)", name, gaim_get_buddy_alias_only(buddy)); else nombre = g_strdup(name); @@ -2259,9 +2259,9 @@ struct buddy *buddy; gchar message; message = 0; - buddy = find_buddy(gc->account, data->name); + buddy = gaim_find_buddy(gc->account, data->name); aim_im_sendch4(od->sess, data->name, AIM_ICQMSG_AUTHGRANTED, &message); - show_got_added(gc, NULL, data->name, (buddy ? get_buddy_alias_only(buddy) : NULL), NULL); + show_got_added(gc, NULL, data->name, (buddy ? gaim_get_buddy_alias_only(buddy) : NULL), NULL); #else aim_ssi_sendauthreply(od->sess, od->conn, data->name, 0x01, NULL); #endif @@ -3948,13 +3948,10 @@ static void oscar_get_away(struct gaim_connection *g, char *who) { struct oscar_data *od = (struct oscar_data *)g->proto_data; if (od->icq) { - struct buddy *budlight = find_buddy(g->account, who); + struct buddy *budlight = gaim_find_buddy(g->account, who); if (budlight) if ((budlight->uc & 0xffff0000) >> 16) - if (budlight->caps & AIM_CAPS_ICQSERVERRELAY) - aim_im_sendch2_geticqaway(od->sess, who, (budlight->uc & 0xffff0000) >> 16); - else - debug_printf("Error: Remote client does not support retrieval of status messages.\n"); + aim_im_sendch2_geticqaway(od->sess, who, (budlight->uc & 0xffff0000) >> 16); else debug_printf("Error: The user %s has no status message, therefore not requesting.\n", who); else @@ -4155,11 +4152,11 @@ aim_add_buddy(od->sess, od->conn, name); #else if ((od->sess->ssi.received_data) && !(aim_ssi_itemlist_exists(od->sess->ssi.local, name))) { - struct buddy *buddy = find_buddy(gc->account, name); - struct group *group = find_group_by_buddy(buddy); + struct buddy *buddy = gaim_find_buddy(gc->account, name); + struct group *group = gaim_find_buddys_group(buddy); if (buddy && group) { debug_printf("ssi: adding buddy %s to group %s\n", name, group->name); - aim_ssi_addbuddy(od->sess, od->conn, buddy->name, group->name, get_buddy_alias_only(buddy), NULL, NULL, 0); + aim_ssi_addbuddy(od->sess, od->conn, buddy->name, group->name, gaim_get_buddy_alias_only(buddy), NULL, NULL, 0); } } #endif @@ -4182,11 +4179,11 @@ #else if (od->sess->ssi.received_data) { while (buddies) { - struct buddy *buddy = find_buddy(gc->account, (const char *)buddies->data); - struct group *group = find_group_by_buddy(buddy); + struct buddy *buddy = gaim_find_buddy(gc->account, (const char *)buddies->data); + struct group *group = gaim_find_buddys_group(buddy); if (buddy && group) { debug_printf("ssi: adding buddy %s to group %s\n", (const char *)buddies->data, group->name); - aim_ssi_addbuddy(od->sess, od->conn, buddy->name, group->name, get_buddy_alias_only(buddy), NULL, NULL, 0); + aim_ssi_addbuddy(od->sess, od->conn, buddy->name, group->name, gaim_get_buddy_alias_only(buddy), NULL, NULL, 0); } buddies = buddies->next; } @@ -4342,7 +4339,7 @@ char *gname_utf8 = gaim_try_conv_to_utf8(gname); char *alias = aim_ssi_getalias(sess->ssi.local, gname, curitem->name); char *alias_utf8 = gaim_try_conv_to_utf8(alias); - struct buddy *buddy = find_buddy(gc->account, curitem->name); + struct buddy *buddy = gaim_find_buddy(gc->account, curitem->name); /* Should gname be freed here? -- elb */ free(alias); if (buddy) { @@ -4350,8 +4347,14 @@ if (alias_utf8) strcpy(buddy->alias, alias_utf8); } else { + struct group *g; + buddy = gaim_buddy_new(gc->account, curitem->name, alias_utf8); + + if (!(g = gaim_find_group(gname_utf8 ? gname_utf8 : _("Orphans")))) + g = gaim_group_new(gname_utf8 ? gname_utf8 : _("Orphans")); + debug_printf("ssi: adding buddy %s to group %s to local list\n", curitem->name, gname); - add_buddy(gc->account, (gname_utf8 ? gname_utf8 : "orphans"), curitem->name, alias_utf8); + gaim_blist_add_buddy(buddy, g, NULL); tmp++; } free(gname_utf8); @@ -4433,7 +4436,7 @@ free(alias); } else { debug_printf("ssi: adding buddy %s from local list to server list\n", buddy->name); - aim_ssi_addbuddy(sess, od->conn, buddy->name, group->name, get_buddy_alias_only(buddy), NULL, NULL, 0); + aim_ssi_addbuddy(sess, od->conn, buddy->name, group->name, gaim_get_buddy_alias_only(buddy), NULL, NULL, 0); } } } @@ -4541,9 +4544,9 @@ debug_printf("ssi: %s has given you permission to add him to your buddy list\n", sn); - buddy = find_buddy(gc->account, sn); - if (buddy && (get_buddy_alias_only(buddy))) - nombre = g_strdup_printf("%s (%s)", sn, get_buddy_alias_only(buddy)); + buddy = gaim_find_buddy(gc->account, sn); + if (buddy && (gaim_get_buddy_alias_only(buddy))) + nombre = g_strdup_printf("%s (%s)", sn, gaim_get_buddy_alias_only(buddy)); else nombre = g_strdup(sn); @@ -4575,9 +4578,9 @@ debug_printf("ssi: received authorization request from %s\n", sn); - buddy = find_buddy(gc->account, sn); - if (buddy && (get_buddy_alias_only(buddy))) - nombre = g_strdup_printf("%s (%s)", sn, get_buddy_alias_only(buddy)); + buddy = gaim_find_buddy(gc->account, sn); + if (buddy && (gaim_get_buddy_alias_only(buddy))) + nombre = g_strdup_printf("%s (%s)", sn, gaim_get_buddy_alias_only(buddy)); else nombre = g_strdup(sn); @@ -4610,9 +4613,9 @@ debug_printf("ssi: received authorization reply from %s. Reply is 0x%04hhx\n", sn, reply); - buddy = find_buddy(gc->account, sn); - if (buddy && (get_buddy_alias_only(buddy))) - nombre = g_strdup_printf("%s (%s)", sn, get_buddy_alias_only(buddy)); + buddy = gaim_find_buddy(gc->account, sn); + if (buddy && (gaim_get_buddy_alias_only(buddy))) + nombre = g_strdup_printf("%s (%s)", sn, gaim_get_buddy_alias_only(buddy)); else nombre = g_strdup(sn); @@ -4641,9 +4644,9 @@ sn = va_arg(ap, char *); va_end(ap); - buddy = find_buddy(gc->account, sn); + buddy = gaim_find_buddy(gc->account, sn); debug_printf("ssi: %s added you to their buddy list\n", sn); - show_got_added(gc, NULL, sn, (buddy ? get_buddy_alias_only(buddy) : NULL), NULL); + show_got_added(gc, NULL, sn, (buddy ? gaim_get_buddy_alias_only(buddy) : NULL), NULL); return 1; } @@ -4799,8 +4802,41 @@ return 0; } -static char **oscar_list_icon(int uc) { - if (uc == 0) +static const char *oscar_list_icon(struct gaim_account *a, struct buddy *b) { + if (!b) { + if (isdigit(a->username[0])) + return "icq"; + else + return "aim"; + } + + if (isdigit(b->name[0])) + return "icq"; + return "aim"; +} + +static const char **oscar_list_emblems(struct buddy *b, char **se, char **sw, char **nw, char **ne) +{ + char *emblems[4] = {NULL,NULL,NULL,NULL}; + int i = 0; + + if (b->uc & UC_UNAVAILABLE) + emblems[i++] = "away"; + if (b->uc & UC_WIRELESS) + emblems[i++] = "wireless"; + if (b->uc & UC_AOL) + emblems[i++] = "aol"; + if (b->uc & UC_ADMIN) + emblems[i++] = "admin"; + if (b->uc & UC_AB && i < 4) + emblems[i++] = "activebuddy"; + *se = emblems[0]; + *sw = emblems[1]; + *nw = emblems[2]; + *ne = emblems[3]; +} + +/* if (uc == 0) return (char **)icon_online_xpm; if (uc & 0xffff0000) { uc >>= 16; @@ -4833,7 +4869,8 @@ if (uc & UC_NORMAL) return (char **)free_icon_xpm; return NULL; -} +*/ + /* * We have just established a socket with the other dude, so set up some handlers. @@ -5016,12 +5053,9 @@ struct oscar_data *od = gc->proto_data; od->evilhack = g_slist_append(od->evilhack, g_strdup(normalize(who))); if (od->icq) { - struct buddy *budlight = find_buddy(gc->account, who); + struct buddy *budlight = gaim_find_buddy(gc->account, who); if (budlight) - if ((budlight->uc >> 16) & (AIM_ICQ_STATE_AWAY || AIM_ICQ_STATE_DND || AIM_ICQ_STATE_OUT || AIM_ICQ_STATE_BUSY || AIM_ICQ_STATE_CHAT)) - if (budlight->caps & AIM_CAPS_ICQSERVERRELAY) - aim_im_sendch2_geticqaway(od->sess, who, (budlight->uc & 0xffff0000) >> 16); - else { + if ((budlight->uc >> 16) & (AIM_ICQ_STATE_AWAY || AIM_ICQ_STATE_DND || AIM_ICQ_STATE_OUT || AIM_ICQ_STATE_BUSY || AIM_ICQ_STATE_CHAT)) { char *state_msg = gaim_icq_status((budlight->uc & 0xffff0000) >> 16); char *dialog_msg = g_strdup_printf(_("<B>UIN:</B> %s<BR><B>Status:</B> %s<HR><I>Remote client does not support sending status messages.</I><BR>"), who, state_msg); g_show_info_text(gc, who, 2, dialog_msg, NULL); @@ -5049,7 +5083,7 @@ int at; switch(gc->account->permdeny) { - case 1: + case 1: aim_bos_changevisibility(od->sess, od->conn, AIM_VISIBILITYCHANGE_DENYADD, gc->username); break; case 2: @@ -5185,7 +5219,7 @@ m = g_list_append(m, pbm); #endif } else { - struct buddy *b = find_buddy(gc->account, who); + struct buddy *b = gaim_find_buddy(gc->account, who); if (!b || (b->uc & UC_UNAVAILABLE)) { pbm = g_new0(struct proto_buddy_menu, 1); @@ -5329,8 +5363,8 @@ for (curb=group->members; curb; curb=g_slist_next(curb)) { struct buddy *buddy = curb->data; if (buddy->account == gc->account && aim_ssi_waitingforauth(od->sess->ssi.local, group->name, buddy->name)) { - if (get_buddy_alias_only(buddy)) - nombre = g_strdup_printf(" %s (%s)", buddy->name, get_buddy_alias_only(buddy)); + if (gaim_get_buddy_alias_only(buddy)) + nombre = g_strdup_printf(" %s (%s)", buddy->name, gaim_get_buddy_alias_only(buddy)); else nombre = g_strdup_printf(" %s", buddy->name); tmp = g_strdup_printf("%s<BR>%s", text, nombre); @@ -5545,6 +5579,7 @@ ret->options = OPT_PROTO_MAIL_CHECK | OPT_PROTO_BUDDY_ICON | OPT_PROTO_IM_IMAGE; ret->name = g_strdup("AIM/ICQ"); ret->list_icon = oscar_list_icon; + ret->list_emblems = oscar_list_emblems; ret->away_states = oscar_away_states; ret->actions = oscar_actions; ret->buddy_menu = oscar_buddy_menu;