comparison src/server.c @ 1252:46c09828e929

[gaim-migrate @ 1262] still need to do buddy.c, conversation.c, dialogs.c, prefs.c. committer: Tailor Script <tailor@pidgin.im>
author Eric Warmenhoven <eric@warmenhoven.org>
date Wed, 13 Dec 2000 22:12:02 +0000
parents b5783215b245
children f44bcae47188
comparison
equal deleted inserted replaced
1251:2d12541cedb1 1252:46c09828e929
45 #include "pixmaps/cancel.xpm" 45 #include "pixmaps/cancel.xpm"
46 46
47 void serv_login(struct aim_user *user) 47 void serv_login(struct aim_user *user)
48 { 48 {
49 struct prpl *p = find_prpl(user->protocol); 49 struct prpl *p = find_prpl(user->protocol);
50 if (user->gc != NULL) return; 50 if (user->gc != NULL)
51 return;
51 if (p && p->login) { 52 if (p && p->login) {
52 debug_printf("Logging in using %s\n", (*p->name)()); 53 debug_printf("Logging in using %s\n", (*p->name)());
53 (*p->login)(user); 54 (*p->login)(user);
54 } 55 }
55 } 56 }
65 bcs = gc->buddy_chats; 66 bcs = gc->buddy_chats;
66 } 67 }
67 68
68 if (gc->idle_timer > 0) 69 if (gc->idle_timer > 0)
69 gtk_timeout_remove(gc->idle_timer); 70 gtk_timeout_remove(gc->idle_timer);
70 gc->idle_timer = 0; 71 gc->idle_timer = 0;
71 72
72 if (gc->keepalive > 0) 73 if (gc->keepalive > 0)
73 gtk_timeout_remove(gc->keepalive); 74 gtk_timeout_remove(gc->keepalive);
74 gc->keepalive = 0; 75 gc->keepalive = 0;
75 76
84 void serv_touch_idle(struct gaim_connection *gc) 85 void serv_touch_idle(struct gaim_connection *gc)
85 { 86 {
86 /* Are we idle? If so, not anymore */ 87 /* Are we idle? If so, not anymore */
87 if (gc->is_idle > 0) { 88 if (gc->is_idle > 0) {
88 gc->is_idle = 0; 89 gc->is_idle = 0;
89 serv_set_idle(gc, 0); 90 serv_set_idle(gc, 0);
90 } 91 }
91 time(&gc->lastsent); 92 time(&gc->lastsent);
92 } 93 }
93 94
94 void serv_finish_login(struct gaim_connection *gc) 95 void serv_finish_login(struct gaim_connection *gc)
95 { 96 {
96 char *buf; 97 char *buf;
97 98
98 if (strlen(gc->user->user_info)) { 99 if (strlen(gc->user->user_info)) {
99 buf = g_malloc(strlen(gc->user->user_info) * 4); 100 buf = g_malloc(strlen(gc->user->user_info) * 4);
100 strncpy_withhtml(buf, gc->user->user_info, strlen(gc->user->user_info) * 4); 101 strncpy_withhtml(buf, gc->user->user_info, strlen(gc->user->user_info) * 4);
101 serv_set_info(gc, buf); 102 serv_set_info(gc, buf);
102 g_free(buf); 103 g_free(buf);
103 } 104 }
104 105
105 if (gc->idle_timer > 0) 106 if (gc->idle_timer > 0)
106 gtk_timeout_remove(gc->idle_timer); 107 gtk_timeout_remove(gc->idle_timer);
107 108
108 gc->idle_timer = gtk_timeout_add(20000, (GtkFunction)check_idle, gc); 109 gc->idle_timer = gtk_timeout_add(20000, (GtkFunction)check_idle, gc);
109 serv_touch_idle(gc); 110 serv_touch_idle(gc);
110 111
111 time(&gc->login_time); 112 time(&gc->login_time);
112 113
113 serv_add_buddy(gc, gc->username); 114 serv_add_buddy(gc, gc->username);
114 115
115 update_keepalive(gc, gc->options & OPT_USR_KEEPALV); 116 update_keepalive(gc, gc->options & OPT_USR_KEEPALV);
116 } 117 }
117 118
118 119
120 void serv_send_im(struct gaim_connection *gc, char *name, char *message, int away) 121 void serv_send_im(struct gaim_connection *gc, char *name, char *message, int away)
121 { 122 {
122 if (gc->prpl && gc->prpl->send_im) 123 if (gc->prpl && gc->prpl->send_im)
123 (*gc->prpl->send_im)(gc, name, message, away); 124 (*gc->prpl->send_im)(gc, name, message, away);
124 125
125 if (!away) 126 if (!away)
126 serv_touch_idle(gc); 127 serv_touch_idle(gc);
127 } 128 }
128 129
129 void serv_get_info(struct gaim_connection *g, char *name) 130 void serv_get_info(struct gaim_connection *g, char *name)
130 { 131 {
131 if (g && g->prpl && g->prpl->get_info) 132 if (g && g->prpl && g->prpl->get_info)
176 { 177 {
177 if (g->prpl && g->prpl->set_info) 178 if (g->prpl && g->prpl->set_info)
178 (*g->prpl->set_info)(g, info); 179 (*g->prpl->set_info)(g, info);
179 } 180 }
180 181
181 void serv_change_passwd(struct gaim_connection *g, char *orig, char *new) { 182 void serv_change_passwd(struct gaim_connection *g, char *orig, char *new)
183 {
182 if (g->prpl && g->prpl->change_passwd) 184 if (g->prpl && g->prpl->change_passwd)
183 (*g->prpl->change_passwd)(g, orig, new); 185 (*g->prpl->change_passwd)(g, orig, new);
184 } 186 }
185 187
186 void serv_add_buddy(struct gaim_connection *g, char *name) 188 void serv_add_buddy(struct gaim_connection *g, char *name)
187 { 189 {
188 if (g->prpl && g->prpl->add_buddy) 190 if (g->prpl && g->prpl->add_buddy)
189 (*g->prpl->add_buddy)(g, name); 191 (*g->prpl->add_buddy)(g, name);
190 } 192 }
191 193
192 void serv_add_buddies(struct gaim_connection *g, GList *buddies) 194 void serv_add_buddies(struct gaim_connection *g, GList * buddies)
193 { 195 {
194 if (g->prpl && g->prpl->add_buddies) 196 if (g->prpl && g->prpl->add_buddies)
195 (*g->prpl->add_buddies)(g, buddies); 197 (*g->prpl->add_buddies)(g, buddies);
196 } 198 }
197 199
268 270
269 void serv_chat_leave(struct gaim_connection *g, int id) 271 void serv_chat_leave(struct gaim_connection *g, int id)
270 { 272 {
271 /* i think this is the only one this should be necessary for since this is the 273 /* i think this is the only one this should be necessary for since this is the
272 * only thing that could possibly get called after the connection is closed */ 274 * only thing that could possibly get called after the connection is closed */
273 if (!g_slist_find(connections, g)) return; 275 if (!g_slist_find(connections, g))
276 return;
274 277
275 if (g->prpl && g->prpl->chat_leave) 278 if (g->prpl && g->prpl->chat_leave)
276 (*g->prpl->chat_leave)(g, id); 279 (*g->prpl->chat_leave)(g, id);
277 } 280 }
278 281
299 302
300 char *buffy = g_strdup(message); 303 char *buffy = g_strdup(message);
301 char *angel = g_strdup(name); 304 char *angel = g_strdup(name);
302 int plugin_return = plugin_event(event_im_recv, gc, &angel, &buffy, 0); 305 int plugin_return = plugin_event(event_im_recv, gc, &angel, &buffy, 0);
303 if (!buffy || !angel || plugin_return) { 306 if (!buffy || !angel || plugin_return) {
304 if (buffy) g_free(buffy); 307 if (buffy)
305 if (angel) g_free(angel); 308 g_free(buffy);
309 if (angel)
310 g_free(angel);
306 return; 311 return;
307 } 312 }
308 g_snprintf(message, strlen(message) + 1, "%s", buffy); 313 g_snprintf(message, strlen(message) + 1, "%s", buffy);
309 g_free(buffy); 314 g_free(buffy);
310 g_snprintf(name, strlen(name) + 1, "%s", angel); 315 g_snprintf(name, strlen(name) + 1, "%s", angel);
311 g_free(angel); 316 g_free(angel);
312 317
313 if ((general_options & OPT_GEN_TIK_HACK) && awaymessage && 318 if ((general_options & OPT_GEN_TIK_HACK) && awaymessage &&
314 !strcmp(message, ">>>Automated Message: Getting Away Message<<<")) 319 !strcmp(message, ">>>Automated Message: Getting Away Message<<<")) {
315 {
316 char *tmpmsg = stylize(awaymessage->message, MSG_LEN); 320 char *tmpmsg = stylize(awaymessage->message, MSG_LEN);
317 serv_send_im(gc, name, tmpmsg, 1); 321 serv_send_im(gc, name, tmpmsg, 1);
318 g_free(tmpmsg); 322 g_free(tmpmsg);
319 return; 323 return;
320 } 324 }
321 325
322 cnv = find_conversation(name); 326 cnv = find_conversation(name);
323 327
324 if (general_options & OPT_GEN_SEND_LINKS) { 328 if (general_options & OPT_GEN_SEND_LINKS) {
325 linkify_text(message); 329 linkify_text(message);
326 } 330 }
327 331
328 if (away) 332 if (away)
329 away = WFLAG_AUTO; 333 away = WFLAG_AUTO;
330 334
331 if (awaymessage != NULL) { 335 if (awaymessage != NULL) {
332 if (!(general_options & OPT_GEN_DISCARD_WHEN_AWAY)) { 336 if (!(general_options & OPT_GEN_DISCARD_WHEN_AWAY)) {
376 if (is_idle) 380 if (is_idle)
377 is_idle = -1; 381 is_idle = -1;
378 382
379 /* apply default fonts and colors */ 383 /* apply default fonts and colors */
380 tmpmsg = stylize(awaymessage->message, MSG_LEN); 384 tmpmsg = stylize(awaymessage->message, MSG_LEN);
381 385
382 /* PRPL */ 386 /* PRPL */
383 if (gc->protocol == PROTO_TOC) { 387 if (gc->protocol == PROTO_TOC) {
384 escape_text(tmpmsg); 388 escape_text(tmpmsg);
385 escape_message(tmpmsg); 389 escape_message(tmpmsg);
386 } 390 }
388 g_free(tmpmsg); 392 g_free(tmpmsg);
389 tmpmsg = stylize(awaymessage->message, MSG_LEN); 393 tmpmsg = stylize(awaymessage->message, MSG_LEN);
390 394
391 if (is_idle == -1) 395 if (is_idle == -1)
392 is_idle = 1; 396 is_idle = 1;
393 397
394 if (cnv != NULL) 398 if (cnv != NULL)
395 write_to_conv(cnv, away_subs(tmpmsg, alias), WFLAG_SEND | WFLAG_AUTO, NULL); 399 write_to_conv(cnv, away_subs(tmpmsg, alias), WFLAG_SEND | WFLAG_AUTO, NULL);
396 g_free(tmpmsg); 400 g_free(tmpmsg);
397 } 401 }
398 } 402 }
399 403
400 404
401 405
402 void serv_got_update(struct gaim_connection *gc, char *name, int loggedin, int evil, time_t signon, time_t idle, int type, gushort caps) 406 void serv_got_update(struct gaim_connection *gc, char *name, int loggedin, int evil, time_t signon,
403 { 407 time_t idle, int type, gushort caps)
404 struct buddy *b = find_buddy(gc, name); 408 {
409 struct buddy *b = find_buddy(gc, name);
405 struct gaim_connection *g = find_gaim_conn_by_name(name); 410 struct gaim_connection *g = find_gaim_conn_by_name(name);
406 411
407 if (g) { 412 if (g) {
408 gc->correction_time = (int)(signon - g->login_time); 413 gc->correction_time = (int)(signon - g->login_time);
409 if (!b) { 414 if (!b) {
410 return; 415 return;
411 } 416 }
412 } 417 }
413 418
414 if (!b) { 419 if (!b) {
415 debug_printf("Error, no such person\n"); 420 debug_printf("Error, no such person\n");
416 return; 421 return;
417 } 422 }
418 423
419 /* This code will 'align' the name from the TOC */ 424 /* This code will 'align' the name from the TOC */
420 /* server with what's in our record. We want to */ 425 /* server with what's in our record. We want to */
421 /* store things how THEY want it... */ 426 /* store things how THEY want it... */
422 if (strcmp(name, b->name)) { 427 if (strcmp(name, b->name)) {
423 GList *cnv = conversations; 428 GList *cnv = conversations;
424 struct conversation *cv; 429 struct conversation *cv;
425 430
426 char *who = g_malloc(80); 431 char *who = g_malloc(80);
427 432
428 strcpy(who, normalize(name)); 433 strcpy(who, normalize(name));
429 434
430 while(cnv) { 435 while (cnv) {
431 cv = (struct conversation *)cnv->data; 436 cv = (struct conversation *)cnv->data;
432 if (!strcasecmp(who, normalize(cv->name))) { 437 if (!strcasecmp(who, normalize(cv->name))) {
433 g_snprintf(cv->name, sizeof(cv->name), "%s", name); 438 g_snprintf(cv->name, sizeof(cv->name), "%s", name);
434 if (find_log_info(name) || (general_options & OPT_GEN_LOG_ALL)) 439 if (find_log_info(name) || (general_options & OPT_GEN_LOG_ALL))
435 g_snprintf(who, 63, LOG_CONVERSATION_TITLE, name); 440 g_snprintf(who, 63, LOG_CONVERSATION_TITLE, name);
436 else 441 else
437 g_snprintf(who, 63, CONVERSATION_TITLE, name); 442 g_snprintf(who, 63, CONVERSATION_TITLE, name);
438 gtk_window_set_title(GTK_WINDOW(cv->window), who); 443 gtk_window_set_title(GTK_WINDOW(cv->window), who);
439 /* was g_free(buf), but break gives us that 444 /* was g_free(buf), but break gives us that
440 * and freeing twice is not good --Sumner */ 445 * and freeing twice is not good --Sumner */
441 break; 446 break;
442 } 447 }
443 cnv = cnv->next; 448 cnv = cnv->next;
444 } 449 }
445 g_free(who); 450 g_free(who);
446 g_snprintf(b->name, sizeof(b->name), "%s", name); 451 g_snprintf(b->name, sizeof(b->name), "%s", name);
447 /*gtk_label_set_text(GTK_LABEL(b->label), b->name);*/ 452 /*gtk_label_set_text(GTK_LABEL(b->label), b->name); */
448 453
449 /* okay lets save the new config... */ 454 /* okay lets save the new config... */
450 455
451 } 456 }
452 457
453 if (!b->idle && idle) plugin_event(event_buddy_idle, gc, b->name, 0, 0); 458 if (!b->idle && idle)
459 plugin_event(event_buddy_idle, gc, b->name, 0, 0);
454 if (b->idle && !idle) { 460 if (b->idle && !idle) {
455 do_pounce(b->name, OPT_POUNCE_UNIDLE); 461 do_pounce(b->name, OPT_POUNCE_UNIDLE);
456 plugin_event(event_buddy_unidle, gc, b->name, 0, 0); 462 plugin_event(event_buddy_unidle, gc, b->name, 0, 0);
457 } 463 }
458 464
459 b->idle = idle; 465 b->idle = idle;
460 b->evil = evil; 466 b->evil = evil;
461 467
462 if ((b->uc & UC_UNAVAILABLE) && !(type & UC_UNAVAILABLE)) { 468 if ((b->uc & UC_UNAVAILABLE) && !(type & UC_UNAVAILABLE)) {
463 do_pounce(b->name, OPT_POUNCE_UNAWAY); 469 do_pounce(b->name, OPT_POUNCE_UNAWAY);
464 plugin_event(event_buddy_back, gc, b->name, 0, 0); 470 plugin_event(event_buddy_back, gc, b->name, 0, 0);
465 } else if (!(b->uc & UC_UNAVAILABLE) && (type & UC_UNAVAILABLE)) { 471 } else if (!(b->uc & UC_UNAVAILABLE) && (type & UC_UNAVAILABLE)) {
466 plugin_event(event_buddy_away, gc, b->name, 0, 0); 472 plugin_event(event_buddy_away, gc, b->name, 0, 0);
467 } 473 }
468 474
469 b->uc = type; 475 b->uc = type;
470 if (caps) b->caps = caps; 476 if (caps)
471 477 b->caps = caps;
472 b->signon = signon; 478
473 479 b->signon = signon;
474 if (loggedin) { 480
475 if (!b->present) { 481 if (loggedin) {
476 b->present = 1; 482 if (!b->present) {
477 do_pounce(b->name, OPT_POUNCE_SIGNON); 483 b->present = 1;
484 do_pounce(b->name, OPT_POUNCE_SIGNON);
478 plugin_event(event_buddy_signon, gc, b->name, 0, 0); 485 plugin_event(event_buddy_signon, gc, b->name, 0, 0);
479 } 486 }
480 } else { 487 } else {
481 if (b->present) 488 if (b->present)
482 plugin_event(event_buddy_signoff, gc, b->name, 0, 0); 489 plugin_event(event_buddy_signoff, gc, b->name, 0, 0);
483 b->present = 0; 490 b->present = 0;
484 } 491 }
485 492
486 set_buddy(gc, b); 493 set_buddy(gc, b);
487 } 494 }
488 495
489 static 496 static
490 void close_warned(GtkWidget *w, GtkWidget *w2) 497 void close_warned(GtkWidget *w, GtkWidget *w2)
491 { 498 {
492 gtk_widget_destroy(w2); 499 gtk_widget_destroy(w2);
493 } 500 }
494 501
495 502
496 503
497 void serv_got_eviled(struct gaim_connection *gc, char *name, int lev) 504 void serv_got_eviled(struct gaim_connection *gc, char *name, int lev)
498 { 505 {
499 char *buf2 = g_malloc(1024); 506 char *buf2 = g_malloc(1024);
500 GtkWidget *d, *label, *close; 507 GtkWidget *d, *label, *close;
501 508
502 509
503 plugin_event(event_warned, gc, name, (void *)lev, 0); 510 plugin_event(event_warned, gc, name, (void *)lev, 0);
504 511
505 g_snprintf(buf2, 1023, "%s have just been warned by %s.\nYour new warning level is %d%%", 512 g_snprintf(buf2, 1023, "%s have just been warned by %s.\nYour new warning level is %d%%",
506 gc->username, ((name == NULL) ? "an anonymous person" : name) , lev); 513 gc->username, ((name == NULL)? "an anonymous person" : name), lev);
507 514
508 515
509 d = gtk_dialog_new(); 516 d = gtk_dialog_new();
510 gtk_widget_realize(d); 517 gtk_widget_realize(d);
511 aol_icon(d->window); 518 aol_icon(d->window);
512 519
513 label = gtk_label_new(buf2); 520 label = gtk_label_new(buf2);
514 gtk_widget_show(label); 521 gtk_widget_show(label);
515 close = gtk_button_new_with_label("Close"); 522 close = gtk_button_new_with_label("Close");
516 if (display_options & OPT_DISP_COOL_LOOK) 523 if (display_options & OPT_DISP_COOL_LOOK)
517 gtk_button_set_relief(GTK_BUTTON(close), GTK_RELIEF_NONE); 524 gtk_button_set_relief(GTK_BUTTON(close), GTK_RELIEF_NONE);
518 gtk_widget_show(close); 525 gtk_widget_show(close);
519 gtk_box_pack_start(GTK_BOX(GTK_DIALOG(d)->vbox), 526 gtk_box_pack_start(GTK_BOX(GTK_DIALOG(d)->vbox), label, FALSE, FALSE, 5);
520 label, FALSE, FALSE, 5); 527 gtk_box_pack_start(GTK_BOX(GTK_DIALOG(d)->action_area), close, FALSE, FALSE, 5);
521 gtk_box_pack_start(GTK_BOX(GTK_DIALOG(d)->action_area), 528
522 close, FALSE, FALSE, 5); 529 gtk_window_set_title(GTK_WINDOW(d), "Warned");
523 530 gtk_signal_connect(GTK_OBJECT(close), "clicked", GTK_SIGNAL_FUNC(close_warned), d);
524 gtk_window_set_title(GTK_WINDOW(d), "Warned"); 531 gtk_widget_show(d);
525 gtk_signal_connect(GTK_OBJECT(close), "clicked", GTK_SIGNAL_FUNC(close_warned), d);
526 gtk_widget_show(d);
527 } 532 }
528 533
529 534
530 535
531 static void close_invite(GtkWidget *w, GtkWidget *w2) 536 static void close_invite(GtkWidget *w, GtkWidget *w2)
534 } 539 }
535 540
536 static void chat_invite_callback(GtkWidget *w, GtkWidget *w2) 541 static void chat_invite_callback(GtkWidget *w, GtkWidget *w2)
537 { 542 {
538 struct gaim_connection *g = (struct gaim_connection *) 543 struct gaim_connection *g = (struct gaim_connection *)
539 gtk_object_get_user_data(GTK_OBJECT(GTK_DIALOG(w2)->vbox)); 544 gtk_object_get_user_data(GTK_OBJECT(GTK_DIALOG(w2)->vbox));
540 if (g->protocol == PROTO_TOC) { 545 if (g->protocol == PROTO_TOC) {
541 int i = (int)gtk_object_get_user_data(GTK_OBJECT(w2)); 546 int i = (int)gtk_object_get_user_data(GTK_OBJECT(w2));
542 serv_accept_chat(g, i); 547 serv_accept_chat(g, i);
543 gtk_widget_destroy(w2); 548 gtk_widget_destroy(w2);
544 } else if (g->protocol == PROTO_OSCAR) { 549 } else if (g->protocol == PROTO_OSCAR) {
545 char *i = (char *)gtk_object_get_user_data(GTK_OBJECT(w2)); 550 char *i = (char *)gtk_object_get_user_data(GTK_OBJECT(w2));
546 int id = (int)gtk_object_get_user_data(GTK_OBJECT(w)); 551 int id = (int)gtk_object_get_user_data(GTK_OBJECT(w));
547 serv_join_chat(g, id, i); 552 serv_join_chat(g, id, i);
552 557
553 558
554 559
555 void serv_got_chat_invite(struct gaim_connection *g, char *name, int id, char *who, char *message) 560 void serv_got_chat_invite(struct gaim_connection *g, char *name, int id, char *who, char *message)
556 { 561 {
557 GtkWidget *d; 562 GtkWidget *d;
558 GtkWidget *label; 563 GtkWidget *label;
559 GtkWidget *yesbtn; 564 GtkWidget *yesbtn;
560 GtkWidget *nobtn; 565 GtkWidget *nobtn;
561 566
562 char buf2[BUF_LONG]; 567 char buf2[BUF_LONG];
563 568
564 569
565 plugin_event(event_chat_invited, g, who, name, message); 570 plugin_event(event_chat_invited, g, who, name, message);
566 571
567 if (message) 572 if (message)
568 g_snprintf(buf2, sizeof(buf2), "User '%s' invites %s to buddy chat room: '%s'\n%s", who, g->username, name, message); 573 g_snprintf(buf2, sizeof(buf2), "User '%s' invites %s to buddy chat room: '%s'\n%s", who,
574 g->username, name, message);
569 else 575 else
570 g_snprintf(buf2, sizeof(buf2), "User '%s' invites %s to buddy chat room: '%s'\n", who, g->username, name); 576 g_snprintf(buf2, sizeof(buf2), "User '%s' invites %s to buddy chat room: '%s'\n", who,
571 577 g->username, name);
572 d = gtk_dialog_new(); 578
573 gtk_widget_realize(d); 579 d = gtk_dialog_new();
574 aol_icon(d->window); 580 gtk_widget_realize(d);
575 581 aol_icon(d->window);
576 582
577 label = gtk_label_new(buf2); 583
578 gtk_widget_show(label); 584 label = gtk_label_new(buf2);
579 yesbtn = picture_button(d, _("Yes"), ok_xpm); 585 gtk_widget_show(label);
580 nobtn = picture_button(d, _("No"), cancel_xpm); 586 yesbtn = picture_button(d, _("Yes"), ok_xpm);
581 gtk_widget_show(nobtn); 587 nobtn = picture_button(d, _("No"), cancel_xpm);
582 gtk_box_pack_start(GTK_BOX(GTK_DIALOG(d)->vbox), 588 gtk_widget_show(nobtn);
583 label, FALSE, FALSE, 5); 589 gtk_box_pack_start(GTK_BOX(GTK_DIALOG(d)->vbox), label, FALSE, FALSE, 5);
584 gtk_box_pack_start(GTK_BOX(GTK_DIALOG(d)->action_area), 590 gtk_box_pack_start(GTK_BOX(GTK_DIALOG(d)->action_area), yesbtn, FALSE, FALSE, 5);
585 yesbtn, FALSE, FALSE, 5); 591 gtk_box_pack_start(GTK_BOX(GTK_DIALOG(d)->action_area), nobtn, FALSE, FALSE, 5);
586 gtk_box_pack_start(GTK_BOX(GTK_DIALOG(d)->action_area),
587 nobtn, FALSE, FALSE, 5);
588 592
589 gtk_object_set_user_data(GTK_OBJECT(GTK_DIALOG(d)->vbox), g); 593 gtk_object_set_user_data(GTK_OBJECT(GTK_DIALOG(d)->vbox), g);
590 if (g->protocol == PROTO_TOC) { 594 if (g->protocol == PROTO_TOC) {
591 gtk_object_set_user_data(GTK_OBJECT(d), (void *)id); 595 gtk_object_set_user_data(GTK_OBJECT(d), (void *)id);
592 gtk_object_set_user_data(GTK_OBJECT(GTK_DIALOG(d)->vbox), g); 596 gtk_object_set_user_data(GTK_OBJECT(GTK_DIALOG(d)->vbox), g);
593 } else if (g->protocol == PROTO_OSCAR) { 597 } else if (g->protocol == PROTO_OSCAR) {
594 gtk_object_set_user_data(GTK_OBJECT(d), (void *)g_strdup(name)); 598 gtk_object_set_user_data(GTK_OBJECT(d), (void *)g_strdup(name));
595 gtk_object_set_user_data(GTK_OBJECT(yesbtn), (void *)id); 599 gtk_object_set_user_data(GTK_OBJECT(yesbtn), (void *)id);
596 } 600 }
597 601
598 602
599 gtk_window_set_title(GTK_WINDOW(d), "Buddy chat invite"); 603 gtk_window_set_title(GTK_WINDOW(d), "Buddy chat invite");
600 gtk_signal_connect(GTK_OBJECT(nobtn), "clicked", GTK_SIGNAL_FUNC(close_invite), d); 604 gtk_signal_connect(GTK_OBJECT(nobtn), "clicked", GTK_SIGNAL_FUNC(close_invite), d);
601 gtk_signal_connect(GTK_OBJECT(yesbtn), "clicked", GTK_SIGNAL_FUNC(chat_invite_callback), d); 605 gtk_signal_connect(GTK_OBJECT(yesbtn), "clicked", GTK_SIGNAL_FUNC(chat_invite_callback), d);
602 606
603 607
604 gtk_widget_show(d); 608 gtk_widget_show(d);
605 } 609 }
606 610
607 void serv_got_joined_chat(struct gaim_connection *gc, int id, char *name) 611 void serv_got_joined_chat(struct gaim_connection *gc, int id, char *name)
608 { 612 {
609 struct conversation *b; 613 struct conversation *b;
610 614
611 plugin_event(event_chat_join, gc, name, 0, 0); 615 plugin_event(event_chat_join, gc, name, 0, 0);
612 616
613 b = (struct conversation *)g_new0(struct conversation, 1); 617 b = (struct conversation *)g_new0(struct conversation, 1);
614 gc->buddy_chats = g_slist_append(gc->buddy_chats, b); 618 gc->buddy_chats = g_slist_append(gc->buddy_chats, b);
615 619
616 b->is_chat = TRUE; 620 b->is_chat = TRUE;
617 b->ignored = NULL; 621 b->ignored = NULL;
618 b->in_room = NULL; 622 b->in_room = NULL;
619 b->id = id; 623 b->id = id;
620 b->gc = gc; 624 b->gc = gc;
621 g_snprintf(b->name, 80, "%s", name); 625 g_snprintf(b->name, 80, "%s", name);
622 626
623 if ((general_options & OPT_GEN_LOG_ALL) || find_log_info(b->name)) { 627 if ((general_options & OPT_GEN_LOG_ALL) || find_log_info(b->name)) {
624 FILE *fd; 628 FILE *fd;
625 char *filename; 629 char *filename;
626 630
627 filename = (char *)malloc(100); 631 filename = (char *)malloc(100);
628 g_snprintf(filename, 100, "%s.chat", b->name); 632 g_snprintf(filename, 100, "%s.chat", b->name);
629 633
630 fd = open_log_file(filename); 634 fd = open_log_file(filename);
631 if (!(general_options & OPT_GEN_STRIP_HTML)) 635 if (!(general_options & OPT_GEN_STRIP_HTML))
632 fprintf(fd, "<HR><BR><H3 Align=Center> ---- New Conversation @ %s ----</H3><BR>\n", full_date()); 636 fprintf(fd,
637 "<HR><BR><H3 Align=Center> ---- New Conversation @ %s ----</H3><BR>\n",
638 full_date());
633 else 639 else
634 fprintf(fd, "---- New Conversation @ %s ----\n", full_date()); 640 fprintf(fd, "---- New Conversation @ %s ----\n", full_date());
635 641
636 fclose(fd); 642 fclose(fd);
637 free(filename); 643 free(filename);
638 } 644 }
639 645
640 show_new_buddy_chat(b); 646 show_new_buddy_chat(b);
641 } 647 }
642 648
643 void serv_got_chat_left(struct gaim_connection *g, int id) 649 void serv_got_chat_left(struct gaim_connection *g, int id)
644 { 650 {
645 GSList *bcs = g->buddy_chats; 651 GSList *bcs = g->buddy_chats;
646 struct conversation *b = NULL; 652 struct conversation *b = NULL;
647 653
648 654
649 while(bcs) { 655 while (bcs) {
650 b = (struct conversation *)bcs->data; 656 b = (struct conversation *)bcs->data;
651 if (id == b->id) { 657 if (id == b->id) {
652 break; 658 break;
653 } 659 }
654 b = NULL; 660 b = NULL;
655 bcs = bcs->next; 661 bcs = bcs->next;
656 } 662 }
657 663
658 if (!b) 664 if (!b)
659 return; 665 return;
660 666
661 plugin_event(event_chat_leave, g, b->name, 0, 0); 667 plugin_event(event_chat_leave, g, b->name, 0, 0);
662 668
663 debug_printf("Leaving room %s.\n", b->name); 669 debug_printf("Leaving room %s.\n", b->name);
664 670
665 g->buddy_chats = g_slist_remove(g->buddy_chats, b); 671 g->buddy_chats = g_slist_remove(g->buddy_chats, b);
666 672
667 while (b->in_room) { 673 while (b->in_room) {
668 char *tmp = b->in_room->data; 674 char *tmp = b->in_room->data;
669 b->in_room = g_list_remove(b->in_room, tmp); 675 b->in_room = g_list_remove(b->in_room, tmp);
670 g_free(tmp); 676 g_free(tmp);
671 } 677 }
672 678
673 g_free(b); 679 g_free(b);
674 } 680 }
675 681
676 void serv_got_chat_in(struct gaim_connection *g, int id, char *who, int whisper, char *message) 682 void serv_got_chat_in(struct gaim_connection *g, int id, char *who, int whisper, char *message)
677 { 683 {
678 int w; 684 int w;
679 GSList *bcs = g->buddy_chats; 685 GSList *bcs = g->buddy_chats;
680 struct conversation *b = NULL; 686 struct conversation *b = NULL;
681 687
682 while(bcs) { 688 while (bcs) {
683 b = (struct conversation *)bcs->data; 689 b = (struct conversation *)bcs->data;
684 if (id == b->id) 690 if (id == b->id)
685 break; 691 break;
686 bcs = bcs->next; 692 bcs = bcs->next;
687 b = NULL; 693 b = NULL;
688 694
689 } 695 }
690 if (!b) 696 if (!b)
691 return; 697 return;
692 698
693 if (plugin_event(event_chat_recv, g, b->name, who, message)) 699 if (plugin_event(event_chat_recv, g, b->name, who, message))
694 return; 700 return;
695 701
696 if (whisper) 702 if (whisper)
697 w = WFLAG_WHISPER; 703 w = WFLAG_WHISPER;
698 else 704 else
699 w = 0; 705 w = 0;
700 706
701 chat_write(b, who, w, message); 707 chat_write(b, who, w, message);
702 } 708 }
703 709
704 void send_keepalive(gpointer d) { 710 void send_keepalive(gpointer d)
711 {
705 struct gaim_connection *gc = (struct gaim_connection *)d; 712 struct gaim_connection *gc = (struct gaim_connection *)d;
706 if (gc->prpl && gc->prpl->keepalive) 713 if (gc->prpl && gc->prpl->keepalive)
707 (*gc->prpl->keepalive)(gc); 714 (*gc->prpl->keepalive)(gc);
708 } 715 }
709 716
710 void update_keepalive(struct gaim_connection *gc, gboolean on) { 717 void update_keepalive(struct gaim_connection *gc, gboolean on)
718 {
711 if (on && !gc->keepalive && blist) { 719 if (on && !gc->keepalive && blist) {
712 debug_printf("allowing NOP\n"); 720 debug_printf("allowing NOP\n");
713 gc->keepalive = gtk_timeout_add(60000, (GtkFunction)send_keepalive, gc); 721 gc->keepalive = gtk_timeout_add(60000, (GtkFunction)send_keepalive, gc);
714 } else if (!on && gc->keepalive > 0) { 722 } else if (!on && gc->keepalive > 0) {
715 debug_printf("removing NOP\n"); 723 debug_printf("removing NOP\n");