comparison finch/gntconv.c @ 28409:71dc3b5edbe7

Rejoin an opened chat after an account reconnects. Previously, we used to rejoin an open chat only if the account was disconnected due to an error. But now, the chat rooms will be rejoined even if we disconnected manually.
author Sadrul Habib Chowdhury <imadil@gmail.com>
date Wed, 21 Oct 2009 23:26:41 +0000
parents f15b14df260d
children 72472238ad45
comparison
equal deleted inserted replaced
28408:d1c18bd588e2 28409:71dc3b5edbe7
365 g_hash_table_destroy(comps); 365 g_hash_table_destroy(comps);
366 } 366 }
367 } 367 }
368 } 368 }
369 369
370 static void
371 account_signing_off(PurpleConnection *gc)
372 {
373 GList *list = purple_get_chats();
374
375 /* We are about to sign off. See which chats we are currently in, and mark
376 * them for rejoin on reconnect. */
377 while (list) {
378 PurpleConversation *conv = list->data;
379 if (!purple_conv_chat_has_left(PURPLE_CONV_CHAT(conv))) {
380 purple_conversation_set_data(conv, "want-to-rejoin", GINT_TO_POINTER(TRUE));
381 purple_conversation_write(conv, NULL, _("The account has disconnected and you are no "
382 "longer in this chat. You will be automatically rejoined in the chat when "
383 "the account reconnects."),
384 PURPLE_MESSAGE_SYSTEM, time(NULL));
385 }
386 list = list->next;
387 }
388 }
389
370 static gpointer 390 static gpointer
371 finch_conv_get_handle(void) 391 finch_conv_get_handle(void)
372 { 392 {
373 static int handle; 393 static int handle;
374 return &handle; 394 return &handle;
1431 PURPLE_CALLBACK(buddy_signed_on_off), NULL); 1451 PURPLE_CALLBACK(buddy_signed_on_off), NULL);
1432 purple_signal_connect(purple_connections_get_handle(), "signed-on", finch_conv_get_handle(), 1452 purple_signal_connect(purple_connections_get_handle(), "signed-on", finch_conv_get_handle(),
1433 PURPLE_CALLBACK(account_signed_on_off), NULL); 1453 PURPLE_CALLBACK(account_signed_on_off), NULL);
1434 purple_signal_connect(purple_connections_get_handle(), "signed-off", finch_conv_get_handle(), 1454 purple_signal_connect(purple_connections_get_handle(), "signed-off", finch_conv_get_handle(),
1435 PURPLE_CALLBACK(account_signed_on_off), NULL); 1455 PURPLE_CALLBACK(account_signed_on_off), NULL);
1456 purple_signal_connect(purple_connections_get_handle(), "signing-off", finch_conv_get_handle(),
1457 PURPLE_CALLBACK(account_signing_off), NULL);
1436 } 1458 }
1437 1459
1438 void finch_conversation_uninit() 1460 void finch_conversation_uninit()
1439 { 1461 {
1440 purple_signals_disconnect_by_handle(finch_conv_get_handle()); 1462 purple_signals_disconnect_by_handle(finch_conv_get_handle());