Mercurial > pidgin
comparison src/server.c @ 4167:7002b6f16bdf
[gaim-migrate @ 4396]
(00:14:20) Robot101: if anyone with CVS would like to choose between the
docklet eating messages if you ask it to queue them, or an occasional crash
when returning from away with queued messages, I have a patch to revert ari's
'fix' at http://people.debian.org/~robot101/silly-ari.diff
(00:15:05) Robot101: Sean and I agreed that keeping the queued messages in a
GSList is better, so if ari could seperate the gtk2ification and the
fixing of the crash, without breaking the generic queueing stuff, that'd be
peachy
(00:15:22) Robot101: in the meantime, the docklet saying it has queued messages,
and not letting you read them, is pretty damn obnoxious.
(00:16:30) LSchiere: i'll do it
committer: Tailor Script <tailor@pidgin.im>
| author | Luke Schierer <lschiere@pidgin.im> |
|---|---|
| date | Thu, 02 Jan 2003 05:18:16 +0000 |
| parents | d3c8d2b40494 |
| children | ebfb80bbe1ed |
comparison
equal
deleted
inserted
replaced
| 4166:481c51159627 | 4167:7002b6f16bdf |
|---|---|
| 471 return val; | 471 return val; |
| 472 } | 472 } |
| 473 | 473 |
| 474 int find_queue_row_by_name(char *name) | 474 int find_queue_row_by_name(char *name) |
| 475 { | 475 { |
| 476 gchar *temp; | 476 GSList *templist; |
| 477 gint i = 0; | 477 char *temp; |
| 478 gboolean valid; | 478 int i; |
| 479 GtkTreeIter iter; | 479 |
| 480 | 480 templist = message_queue; |
| 481 valid = gtk_tree_model_get_iter_first(GTK_TREE_MODEL(awayqueuestore), &iter); | 481 |
| 482 while(valid) { | 482 for (i = 0; i < GTK_CLIST(clistqueue)->rows; i++) { |
| 483 gtk_tree_model_get(GTK_TREE_MODEL(awayqueuestore), &iter, 0, &temp, -1); | 483 gtk_clist_get_text(GTK_CLIST(clistqueue), i, 0, &temp); |
| 484 if(!strcmp(name, temp)) | 484 |
| 485 if (!strcmp(name, temp)) | |
| 485 return i; | 486 return i; |
| 486 g_free(temp); | |
| 487 | |
| 488 i++; | |
| 489 valid = gtk_tree_model_iter_next(GTK_TREE_MODEL(awayqueuestore), &iter); | |
| 490 } | 487 } |
| 491 | 488 |
| 492 return -1; | 489 return -1; |
| 493 } | 490 } |
| 494 | 491 |
| 624 /* either we're going to queue it or not. Because of the way awayness currently | 621 /* either we're going to queue it or not. Because of the way awayness currently |
| 625 * works, this is fucked up. it's possible for an account to be away without the | 622 * works, this is fucked up. it's possible for an account to be away without the |
| 626 * imaway dialog being shown. in fact, it's possible for *all* the accounts to be | 623 * imaway dialog being shown. in fact, it's possible for *all* the accounts to be |
| 627 * away without the imaway dialog being shown. so in order for this to be queued | 624 * away without the imaway dialog being shown. so in order for this to be queued |
| 628 * properly, we have to make sure that the imaway dialog actually exists, first. */ | 625 * properly, we have to make sure that the imaway dialog actually exists, first. */ |
| 629 if (!cnv && awayqueue && (away_options & OPT_AWAY_QUEUE)) { | 626 if (!cnv && clistqueue && (away_options & OPT_AWAY_QUEUE)) { |
| 630 /* alright, so we're going to queue it. neat, eh? :) so first we create | 627 /* alright, so we're going to queue it. neat, eh? :) so first we create |
| 631 * something to store the message, and add it to our queue. Then we update | 628 * something to store the message, and add it to our queue. Then we update |
| 632 * the away dialog to indicate that we've queued something. */ | 629 * the away dialog to indicate that we've queued something. */ |
| 633 struct queued_message *qm; | 630 struct queued_message *qm; |
| 634 GtkTreeIter iter; | 631 struct buddy *b; |
| 635 gchar path[10]; | 632 |
| 636 | |
| 637 qm = g_new0(struct queued_message, 1); | 633 qm = g_new0(struct queued_message, 1); |
| 638 g_snprintf(qm->name, sizeof(qm->name), "%s", name); | 634 g_snprintf(qm->name, sizeof(qm->name), "%s", name); |
| 639 qm->message = g_memdup(message, len == -1 ? strlen(message) + 1 : len); | 635 qm->message = g_memdup(message, len == -1 ? strlen(message) + 1 : len); |
| 640 qm->gc = gc; | 636 qm->gc = gc; |
| 641 qm->tm = mtime; | 637 qm->tm = mtime; |
| 642 qm->flags = WFLAG_RECV | away; | 638 qm->flags = WFLAG_RECV | away; |
| 643 qm->len = len; | 639 qm->len = len; |
| 644 message_queue = g_slist_append(message_queue, qm); | 640 message_queue = g_slist_append(message_queue, qm); |
| 645 | 641 |
| 646 row = find_queue_row_by_name(qm->name); | 642 row = find_queue_row_by_name(qm->name); |
| 643 | |
| 647 if (row >= 0) { | 644 if (row >= 0) { |
| 648 char number[32]; | 645 char number[32]; |
| 649 int qtotal; | 646 int qtotal; |
| 650 | 647 |
| 651 qtotal = find_queue_total_by_name(qm->name); | 648 qtotal = find_queue_total_by_name(qm->name); |
| 652 g_snprintf(number, 32, _("(%d messages)"), qtotal); | 649 g_snprintf(number, 32, _("(%d messages)"), qtotal); |
| 653 g_snprintf(path, 10, "%d", row); | 650 gtk_clist_set_text(GTK_CLIST(clistqueue), row, 1, number); |
| 654 gtk_tree_model_get_iter_from_string( | |
| 655 GTK_TREE_MODEL(awayqueuestore), &iter, path); | |
| 656 gtk_list_store_set(awayqueuestore, &iter, | |
| 657 1, number, -1); | |
| 658 } else { | 651 } else { |
| 659 gtk_tree_model_get_iter_first(GTK_TREE_MODEL(awayqueuestore), | 652 gchar *heh[2]; |
| 660 &iter); | 653 |
| 661 gtk_list_store_append(awayqueuestore, &iter); | 654 heh[0] = qm->name; |
| 662 gtk_list_store_set(awayqueuestore, &iter, | 655 heh[1] = _("(1 message)"); |
| 663 0, qm->name, | 656 gtk_clist_append(GTK_CLIST(clistqueue), heh); |
| 664 1, _("(1 message)"), | |
| 665 -1); | |
| 666 } | 657 } |
| 667 } else { | 658 } else { |
| 668 /* ok, so we're not queuing it. well then, we'll try to handle it normally. | 659 /* ok, so we're not queuing it. well then, we'll try to handle it normally. |
| 669 * Some people think that ignoring it is a perfectly acceptible way to handle | 660 * Some people think that ignoring it is a perfectly acceptible way to handle |
| 670 * it. i think they're on crack, but hey, that's why it's optional. */ | 661 * it. i think they're on crack, but hey, that's why it's optional. */ |
| 724 qar->sent_away = t; | 715 qar->sent_away = t; |
| 725 | 716 |
| 726 /* apply default fonts and colors */ | 717 /* apply default fonts and colors */ |
| 727 tmpmsg = stylize(gc->away, MSG_LEN); | 718 tmpmsg = stylize(gc->away, MSG_LEN); |
| 728 serv_send_im(gc, name, away_subs(tmpmsg, alias), -1, IM_FLAG_AWAY); | 719 serv_send_im(gc, name, away_subs(tmpmsg, alias), -1, IM_FLAG_AWAY); |
| 729 if (!cnv && awayqueue && (away_options & OPT_AWAY_QUEUE)) { | 720 if (!cnv && clistqueue && (away_options & OPT_AWAY_QUEUE)) { |
| 730 struct queued_message *qm; | 721 struct queued_message *qm; |
| 731 qm = g_new0(struct queued_message, 1); | 722 qm = g_new0(struct queued_message, 1); |
| 732 g_snprintf(qm->name, sizeof(qm->name), "%s", name); | 723 g_snprintf(qm->name, sizeof(qm->name), "%s", name); |
| 733 qm->message = g_strdup(away_subs(tmpmsg, alias)); | 724 qm->message = g_strdup(away_subs(tmpmsg, alias)); |
| 734 qm->gc = gc; | 725 qm->gc = gc; |
