Mercurial > pidgin
changeset 1336:f3303fc05572
[gaim-migrate @ 1346]
icq is much improved. protocols can store per-buddy data. add_buddies is less important.
committer: Tailor Script <tailor@pidgin.im>
author | Eric Warmenhoven <eric@warmenhoven.org> |
---|---|
date | Wed, 20 Dec 2000 15:12:35 +0000 |
parents | 4d1dc4f66b4e |
children | 198b0e53d7c3 |
files | plugins/icq/gaim_icq.c src/gaim.h src/server.c |
diffstat | 3 files changed, 87 insertions(+), 4 deletions(-) [+] |
line wrap: on
line diff
--- a/plugins/icq/gaim_icq.c Wed Dec 20 14:12:54 2000 +0000 +++ b/plugins/icq/gaim_icq.c Wed Dec 20 15:12:35 2000 +0000 @@ -12,6 +12,8 @@ #include "pixmaps/gnomeicu-occ.xpm" #include "pixmaps/gnomeicu-ffc.xpm" +#define USEROPT_NICK 0 + struct icq_data { ICQLINK *link; int cur_status; @@ -199,11 +201,34 @@ unsigned int length, void *data) { } +static void icq_web_pager(struct icq_link *link, unsigned char hour, unsigned char minute, + unsigned char day, unsigned char month, unsigned short year, const char *nick, + const char *email, const char *msg) { + struct gaim_connection *gc = find_gaim_conn_by_icq_link(link); + char *who = g_strdup_printf("ICQ Web Pager: %s (%s)", nick, email); + char *what = g_strdup(msg); + serv_got_im(gc, who, what, 0); + g_free(who); + g_free(what); +} + +static void icq_mail_express(struct icq_link *link, unsigned char hour, unsigned char minute, + unsigned char day, unsigned char month, unsigned short year, const char *nick, + const char *email, const char *msg) { + struct gaim_connection *gc = find_gaim_conn_by_icq_link(link); + char *who = g_strdup_printf("ICQ Mail Express: %s (%s)", nick, email); + char *what = g_strdup(msg); + serv_got_im(gc, who, what, 0); + g_free(who); + g_free(what); +} + static void icq_login(struct aim_user *user) { struct gaim_connection *gc = new_gaim_conn(user); struct icq_data *id = gc->proto_data = g_new0(struct icq_data, 1); ICQLINK *link = id->link = icq_ICQLINKNew(atol(user->username), user->password, - g_strdup("gaim user") /* hehe :) */, TRUE); + user->proto_opt[USEROPT_NICK][0] ? user->proto_opt[USEROPT_NICK] : "gaim user", + TRUE); int icqSocket; icq_LogLevel = ICQ_LOG_MESSAGE; @@ -212,6 +237,8 @@ link->icq_Disconnected = icq_logged_off; link->icq_RecvMessage = icq_msg_incoming; link->icq_RecvURL = icq_url_incoming; + link->icq_RecvWebPager = icq_web_pager; + link->icq_RecvMailExpress = icq_mail_express; link->icq_UserOnline = icq_user_online; link->icq_UserOffline = icq_user_offline; link->icq_UserStatusUpdate = icq_user_status; @@ -337,11 +364,59 @@ gtk_widget_show(button); } +static void icq_print_option(GtkEntry *entry, struct aim_user *user) { + int entrynum; + + entrynum = (int) gtk_object_get_user_data(GTK_OBJECT(entry)); + + if (entrynum == USEROPT_NICK) + g_snprintf(user->proto_opt[USEROPT_NICK], + sizeof(user->proto_opt[USEROPT_NICK]), + "%s", gtk_entry_get_text(entry)); +} + +static void icq_user_opts(GtkWidget *book, struct aim_user *user) { + GtkWidget *vbox; + GtkWidget *hbox; + GtkWidget *label; + GtkWidget *entry; + + vbox = gtk_vbox_new(FALSE, 5); + gtk_container_set_border_width(GTK_CONTAINER(vbox), 5); + gtk_notebook_append_page(GTK_NOTEBOOK(book), vbox, + gtk_label_new("ICQ Options")); + gtk_widget_show(vbox); + + hbox = gtk_hbox_new(FALSE, 5); + gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 0); + gtk_widget_show(hbox); + + label = gtk_label_new("Nick"); + gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 0); + gtk_widget_show(label); + + entry = gtk_entry_new(); + gtk_box_pack_end(GTK_BOX(hbox), entry, FALSE, FALSE, 0); + gtk_object_set_user_data(GTK_OBJECT(entry), (void *)USEROPT_NICK); + gtk_signal_connect(GTK_OBJECT(entry), "changed", + GTK_SIGNAL_FUNC(icq_print_option), user); + if (user->proto_opt[USEROPT_NICK][0]) + gtk_entry_set_text(GTK_ENTRY(entry), user->proto_opt[USEROPT_NICK]); + else + gtk_entry_set_text(GTK_ENTRY(entry), "gaim user"); + gtk_widget_show(entry); + + hbox = gtk_hbox_new(FALSE, 5); + gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 0); + gtk_widget_show(hbox); +} + static void icq_init(struct prpl *ret) { ret->protocol = PROTO_ICQ; ret->name = icq_name; ret->list_icon = icq_list_icon; ret->action_menu = icq_action_menu; + ret->user_opts = icq_user_opts; ret->login = icq_login; ret->close = icq_close; ret->send_im = icq_send_msg;
--- a/src/gaim.h Wed Dec 20 14:12:54 2000 +0000 +++ b/src/gaim.h Wed Dec 20 15:12:35 2000 +0000 @@ -221,6 +221,7 @@ time_t idle; int uc; gushort caps; /* woohoo! */ + void *proto_data; /* what a hack */ }; struct buddy_show {
--- a/src/server.c Wed Dec 20 14:12:54 2000 +0000 +++ b/src/server.c Wed Dec 20 15:12:35 2000 +0000 @@ -191,10 +191,17 @@ (*g->prpl->add_buddy)(g, name); } -void serv_add_buddies(struct gaim_connection *g, GList * buddies) +void serv_add_buddies(struct gaim_connection *g, GList *buddies) { - if (g->prpl && g->prpl->add_buddies) - (*g->prpl->add_buddies)(g, buddies); + if (g->prpl) { + if (g->prpl->add_buddies) + (*g->prpl->add_buddies)(g, buddies); + else if (g->prpl->add_buddy) + while (buddies) { + (*g->prpl->add_buddy)(g, buddies->data); + buddies = buddies->next; + } + } }