comparison src/oscar.c @ 1072:81d19577285a

[gaim-migrate @ 1082] got rid of a few FIXME's and implemented the option to hide (show) empty groups committer: Tailor Script <tailor@pidgin.im>
author Eric Warmenhoven <eric@warmenhoven.org>
date Mon, 06 Nov 2000 00:30:24 +0000
parents b0b40b5faede
children efcacae6acdb
comparison
equal deleted inserted replaced
1071:ce12622502c5 1072:81d19577285a
690 690
691 static int accept_direct_im(gpointer w, struct ask_direct *d) { 691 static int accept_direct_im(gpointer w, struct ask_direct *d) {
692 struct gaim_connection *gc = d->gc; 692 struct gaim_connection *gc = d->gc;
693 struct oscar_data *od = (struct oscar_data *)gc->proto_data; 693 struct oscar_data *od = (struct oscar_data *)gc->proto_data;
694 struct direct_im *dim; 694 struct direct_im *dim;
695 char buf[256];
695 696
696 debug_printf("Accepted DirectIM.\n"); 697 debug_printf("Accepted DirectIM.\n");
697 698
698 dim = find_direct_im(od, d->sn); 699 dim = find_direct_im(od, d->sn);
699 if (dim) { 700 if (dim) {
709 cancel_direct_im(w, d); 710 cancel_direct_im(w, d);
710 return; 711 return;
711 } 712 }
712 713
713 if (!(dim->cnv = find_conversation(d->sn))) dim->cnv = new_conversation(d->sn); 714 if (!(dim->cnv = find_conversation(d->sn))) dim->cnv = new_conversation(d->sn);
715 g_snprintf(buf, sizeof buf, _("<B>Direct IM with %s established</B>"), d->sn);
716 write_to_conv(dim->cnv, buf, WFLAG_SYSTEM, NULL);
717
714 gtk_signal_connect(GTK_OBJECT(dim->cnv->window), "destroy", 718 gtk_signal_connect(GTK_OBJECT(dim->cnv->window), "destroy",
715 GTK_SIGNAL_FUNC(delete_direct_im), dim); 719 GTK_SIGNAL_FUNC(delete_direct_im), dim);
716 720
717 od->direct_ims = g_slist_append(od->direct_ims, dim); 721 od->direct_ims = g_slist_append(od->direct_ims, dim);
718 dim->watcher = gdk_input_add(dim->conn->fd, GDK_INPUT_READ | GDK_INPUT_EXCEPTION, 722 dim->watcher = gdk_input_add(dim->conn->fd, GDK_INPUT_READ | GDK_INPUT_EXCEPTION,
1524 struct gaim_connection *gc = find_gaim_conn_by_aim_sess(sess); 1528 struct gaim_connection *gc = find_gaim_conn_by_aim_sess(sess);
1525 struct oscar_data *od = (struct oscar_data *)gc->proto_data; 1529 struct oscar_data *od = (struct oscar_data *)gc->proto_data;
1526 struct aim_directim_priv *priv; 1530 struct aim_directim_priv *priv;
1527 struct aim_conn_t *newconn; 1531 struct aim_conn_t *newconn;
1528 struct direct_im *dim; 1532 struct direct_im *dim;
1533 char buf[256];
1529 1534
1530 va_start(ap, command); 1535 va_start(ap, command);
1531 newconn = va_arg(ap, struct aim_conn_t *); 1536 newconn = va_arg(ap, struct aim_conn_t *);
1532 va_end(ap); 1537 va_end(ap);
1533 1538
1542 GTK_SIGNAL_FUNC(delete_direct_im), dim); 1547 GTK_SIGNAL_FUNC(delete_direct_im), dim);
1543 gdk_input_remove(dim->watcher); 1548 gdk_input_remove(dim->watcher);
1544 dim->conn = newconn; 1549 dim->conn = newconn;
1545 dim->watcher = gdk_input_add(dim->conn->fd, GDK_INPUT_READ | GDK_INPUT_EXCEPTION, 1550 dim->watcher = gdk_input_add(dim->conn->fd, GDK_INPUT_READ | GDK_INPUT_EXCEPTION,
1546 oscar_callback, dim->conn); 1551 oscar_callback, dim->conn);
1547 /* FIXME: print to screen that this is now direct */ 1552 g_snprintf(buf, sizeof buf, _("<B>Direct IM with %s established</B>"), priv->sn);
1553 write_to_conv(dim->cnv, buf, WFLAG_SYSTEM, NULL);
1548 1554
1549 aim_conn_addhandler(sess, newconn, AIM_CB_FAM_OFT, AIM_CB_OFT_DIRECTIMINCOMING, 1555 aim_conn_addhandler(sess, newconn, AIM_CB_FAM_OFT, AIM_CB_OFT_DIRECTIMINCOMING,
1550 gaim_directim_incoming, 0); 1556 gaim_directim_incoming, 0);
1551 aim_conn_addhandler(sess, newconn, AIM_CB_FAM_OFT, AIM_CB_OFT_DIRECTIMDISCONNECT, 1557 aim_conn_addhandler(sess, newconn, AIM_CB_FAM_OFT, AIM_CB_OFT_DIRECTIMDISCONNECT,
1552 gaim_directim_disconnect, 0); 1558 gaim_directim_disconnect, 0);
1580 struct aim_conn_t *conn; 1586 struct aim_conn_t *conn;
1581 char *sn; 1587 char *sn;
1582 struct gaim_connection *gc = find_gaim_conn_by_aim_sess(sess); 1588 struct gaim_connection *gc = find_gaim_conn_by_aim_sess(sess);
1583 struct oscar_data *od = (struct oscar_data *)gc->proto_data; 1589 struct oscar_data *od = (struct oscar_data *)gc->proto_data;
1584 struct direct_im *dim; 1590 struct direct_im *dim;
1591 char buf[256];
1585 1592
1586 va_start(ap, command); 1593 va_start(ap, command);
1587 conn = va_arg(ap, struct aim_conn_t *); 1594 conn = va_arg(ap, struct aim_conn_t *);
1588 sn = va_arg(ap, char *); 1595 sn = va_arg(ap, char *);
1589 va_end(ap); 1596 va_end(ap);
1593 dim = find_direct_im(od, sn); 1600 dim = find_direct_im(od, sn);
1594 od->direct_ims = g_slist_remove(od->direct_ims, dim); 1601 od->direct_ims = g_slist_remove(od->direct_ims, dim);
1595 gdk_input_remove(dim->watcher); 1602 gdk_input_remove(dim->watcher);
1596 gtk_signal_disconnect_by_data(GTK_OBJECT(dim->cnv->window), dim); 1603 gtk_signal_disconnect_by_data(GTK_OBJECT(dim->cnv->window), dim);
1597 1604
1598 /* FIXME: need to indicate no longer direct */ 1605 g_snprintf(buf, sizeof buf, _("<B>Direct IM with %s closed</B>"), sn);
1606 if (dim->cnv)
1607 write_to_conv(dim->cnv, buf, WFLAG_SYSTEM, NULL);
1599 1608
1600 aim_conn_kill(sess, &conn); 1609 aim_conn_kill(sess, &conn);
1601 1610
1602 return 1; 1611 return 1;
1603 } 1612 }
1627 return; 1636 return;
1628 } 1637 }
1629 dim = g_new0(struct direct_im, 1); 1638 dim = g_new0(struct direct_im, 1);
1630 dim->gc = gc; 1639 dim->gc = gc;
1631 g_snprintf(dim->name, sizeof dim->name, "%s", who); 1640 g_snprintf(dim->name, sizeof dim->name, "%s", who);
1632 od->direct_ims = g_slist_append(od->direct_ims, dim);
1633 1641
1634 dim->conn = aim_directim_initiate(od->sess, od->conn, NULL, who); 1642 dim->conn = aim_directim_initiate(od->sess, od->conn, NULL, who);
1635 dim->watcher = gdk_input_add(dim->conn->fd, GDK_INPUT_READ | GDK_INPUT_EXCEPTION, 1643 if (dim->conn != NULL) {
1636 oscar_callback, dim->conn); 1644 od->direct_ims = g_slist_append(od->direct_ims, dim);
1637 aim_conn_addhandler(od->sess, dim->conn, AIM_CB_FAM_OFT, AIM_CB_OFT_DIRECTIMINITIATE, 1645 dim->watcher = gdk_input_add(dim->conn->fd, GDK_INPUT_READ | GDK_INPUT_EXCEPTION,
1638 gaim_directim_initiate, 0); 1646 oscar_callback, dim->conn);
1647 aim_conn_addhandler(od->sess, dim->conn, AIM_CB_FAM_OFT, AIM_CB_OFT_DIRECTIMINITIATE,
1648 gaim_directim_initiate, 0);
1649 } else {
1650 do_error_dialog(_("Unable to open Direct IM"), _("Error"));
1651 g_free(dim);
1652 }
1639 } 1653 }
1640 1654
1641 static void oscar_action_menu(GtkWidget *menu, struct gaim_connection *gc, char *who) { 1655 static void oscar_action_menu(GtkWidget *menu, struct gaim_connection *gc, char *who) {
1642 GtkWidget *button; 1656 GtkWidget *button;
1643 char *n = g_strdup(normalize(gc->username)); 1657 char *n = g_strdup(normalize(gc->username));