comparison libpurple/account.c @ 32827:4a34689eeb33 default tip

merged from im.pidgin.pidgin
author Yoshiki Yazawa <yaz@honeyplanet.jp>
date Sat, 19 Nov 2011 14:42:54 +0900
parents ec6371d4cae8
children
comparison
equal deleted inserted replaced
32692:0f94ec89f0bc 32827:4a34689eeb33
39 #include "signals.h" 39 #include "signals.h"
40 #include "status.h" 40 #include "status.h"
41 #include "util.h" 41 #include "util.h"
42 #include "xmlnode.h" 42 #include "xmlnode.h"
43 43
44 typedef struct
45 {
46 PurpleConnectionErrorInfo *current_error;
47 } PurpleAccountPrivate;
48
49 #define PURPLE_ACCOUNT_GET_PRIVATE(account) \
50 ((PurpleAccountPrivate *) (account->priv))
51
52 /* TODO: Should use PurpleValue instead of this? What about "ui"? */ 44 /* TODO: Should use PurpleValue instead of this? What about "ui"? */
53 typedef struct 45 typedef struct
54 { 46 {
55 PurplePrefType type; 47 PurplePrefType type;
56 48
359 } 351 }
360 352
361 static xmlnode * 353 static xmlnode *
362 account_to_xmlnode(PurpleAccount *account) 354 account_to_xmlnode(PurpleAccount *account)
363 { 355 {
364 PurpleAccountPrivate *priv = PURPLE_ACCOUNT_GET_PRIVATE(account);
365
366 xmlnode *node, *child; 356 xmlnode *node, *child;
367 const char *tmp; 357 const char *tmp;
368 PurplePresence *presence; 358 PurplePresence *presence;
369 PurpleProxyInfo *proxy_info; 359 PurpleProxyInfo *proxy_info;
370 360
417 { 407 {
418 child = proxy_settings_to_xmlnode(proxy_info); 408 child = proxy_settings_to_xmlnode(proxy_info);
419 xmlnode_insert_child(node, child); 409 xmlnode_insert_child(node, child);
420 } 410 }
421 411
422 child = current_error_to_xmlnode(priv->current_error); 412 child = current_error_to_xmlnode(account->current_error);
423 xmlnode_insert_child(node, child); 413 xmlnode_insert_child(node, child);
424 414
425 return node; 415 return node;
426 } 416 }
427 417
994 984
995 PurpleAccount * 985 PurpleAccount *
996 purple_account_new(const char *username, const char *protocol_id) 986 purple_account_new(const char *username, const char *protocol_id)
997 { 987 {
998 PurpleAccount *account = NULL; 988 PurpleAccount *account = NULL;
999 PurpleAccountPrivate *priv = NULL;
1000 PurplePlugin *prpl = NULL; 989 PurplePlugin *prpl = NULL;
1001 PurplePluginProtocolInfo *prpl_info = NULL; 990 PurplePluginProtocolInfo *prpl_info = NULL;
1002 PurpleStatusType *status_type; 991 PurpleStatusType *status_type;
1003 992
1004 g_return_val_if_fail(username != NULL, NULL); 993 g_return_val_if_fail(username != NULL, NULL);
1009 if (account != NULL) 998 if (account != NULL)
1010 return account; 999 return account;
1011 1000
1012 account = g_new0(PurpleAccount, 1); 1001 account = g_new0(PurpleAccount, 1);
1013 PURPLE_DBUS_REGISTER_POINTER(account, PurpleAccount); 1002 PURPLE_DBUS_REGISTER_POINTER(account, PurpleAccount);
1014 priv = g_new0(PurpleAccountPrivate, 1);
1015 account->priv = priv;
1016 1003
1017 purple_account_set_username(account, username); 1004 purple_account_set_username(account, username);
1018 1005
1019 purple_account_set_protocol_id(account, protocol_id); 1006 purple_account_set_protocol_id(account, protocol_id);
1020 1007
1053 } 1040 }
1054 1041
1055 void 1042 void
1056 purple_account_destroy(PurpleAccount *account) 1043 purple_account_destroy(PurpleAccount *account)
1057 { 1044 {
1058 PurpleAccountPrivate *priv = NULL;
1059 GList *l; 1045 GList *l;
1060 1046
1061 g_return_if_fail(account != NULL); 1047 g_return_if_fail(account != NULL);
1062 1048
1063 purple_debug_info("account", "Destroying account %p\n", account); 1049 purple_debug_info("account", "Destroying account %p\n", account);
1100 while (account->permit) { 1086 while (account->permit) {
1101 g_free(account->permit->data); 1087 g_free(account->permit->data);
1102 account->permit = g_slist_delete_link(account->permit, account->permit); 1088 account->permit = g_slist_delete_link(account->permit, account->permit);
1103 } 1089 }
1104 1090
1105 priv = PURPLE_ACCOUNT_GET_PRIVATE(account); 1091 PURPLE_DBUS_UNREGISTER_POINTER(account->current_error);
1106 PURPLE_DBUS_UNREGISTER_POINTER(priv->current_error); 1092 if (account->current_error) {
1107 if (priv->current_error) { 1093 g_free(account->current_error->description);
1108 g_free(priv->current_error->description); 1094 g_free(account->current_error);
1109 g_free(priv->current_error); 1095 }
1110 }
1111 g_free(priv);
1112 1096
1113 PURPLE_DBUS_UNREGISTER_POINTER(account); 1097 PURPLE_DBUS_UNREGISTER_POINTER(account);
1114 g_free(account); 1098 g_free(account);
1115 } 1099 }
1116 1100
1130 1114
1131 purple_debug_info("account", "Registering account %s\n", 1115 purple_debug_info("account", "Registering account %s\n",
1132 purple_account_get_username(account)); 1116 purple_account_get_username(account));
1133 1117
1134 _purple_connection_new(account, TRUE, purple_account_get_password(account)); 1118 _purple_connection_new(account, TRUE, purple_account_get_password(account));
1119 }
1120
1121 void
1122 purple_account_register_completed(PurpleAccount *account, gboolean succeeded)
1123 {
1124 g_return_if_fail(account != NULL);
1125
1126 if (account->registration_cb)
1127 (account->registration_cb)(account, succeeded, account->registration_cb_user_data);
1135 } 1128 }
1136 1129
1137 void 1130 void
1138 purple_account_unregister(PurpleAccount *account, PurpleAccountUnregistrationCb cb, void *user_data) 1131 purple_account_unregister(PurpleAccount *account, PurpleAccountUnregistrationCb cb, void *user_data)
1139 { 1132 {
1277 if (!purple_account_get_remember_password(account)) 1270 if (!purple_account_get_remember_password(account))
1278 purple_account_set_password(account, NULL); 1271 purple_account_set_password(account, NULL);
1279 purple_account_set_connection(account, NULL); 1272 purple_account_set_connection(account, NULL);
1280 1273
1281 account->disconnecting = FALSE; 1274 account->disconnecting = FALSE;
1275 }
1276
1277 gboolean
1278 purple_account_is_disconnecting(const PurpleAccount *account)
1279 {
1280 g_return_val_if_fail(account != NULL, TRUE);
1281
1282 return account->disconnecting;
1282 } 1283 }
1283 1284
1284 void 1285 void
1285 purple_account_notify_added(PurpleAccount *account, const char *remote_user, 1286 purple_account_notify_added(PurpleAccount *account, const char *remote_user,
1286 const char *id, const char *alias, 1287 const char *id, const char *alias,
1605 purple_account_get_username(account)); 1606 purple_account_get_username(account));
1606 1607
1607 purple_request_input(gc, _("Set User Info"), primary, NULL, 1608 purple_request_input(gc, _("Set User Info"), primary, NULL,
1608 purple_account_get_user_info(account), 1609 purple_account_get_user_info(account),
1609 TRUE, FALSE, ((gc != NULL) && 1610 TRUE, FALSE, ((gc != NULL) &&
1610 (gc->flags & PURPLE_CONNECTION_HTML) ? "html" : NULL), 1611 (purple_connection_get_flags(gc) & PURPLE_CONNECTION_HTML) ? "html" : NULL),
1611 _("Save"), G_CALLBACK(set_user_info_cb), 1612 _("Save"), G_CALLBACK(set_user_info_cb),
1612 _("Cancel"), NULL, 1613 _("Cancel"), NULL,
1613 account, NULL, NULL, 1614 account, NULL, NULL,
1614 account); 1615 account);
1615 } 1616 }
2484 2485
2485 g_return_val_if_fail(setting->type == PURPLE_PREF_BOOLEAN, default_value); 2486 g_return_val_if_fail(setting->type == PURPLE_PREF_BOOLEAN, default_value);
2486 2487
2487 return setting->value.boolean; 2488 return setting->value.boolean;
2488 } 2489 }
2490
2491 gpointer
2492 purple_account_get_ui_data(const PurpleAccount *account)
2493 {
2494 g_return_val_if_fail(account != NULL, NULL);
2495
2496 return account->ui_data;
2497 }
2498
2499 void
2500 purple_account_set_ui_data(PurpleAccount *account,
2501 gpointer ui_data)
2502 {
2503 g_return_if_fail(account != NULL);
2504
2505 account->ui_data = ui_data;
2506 }
2507
2489 2508
2490 PurpleLog * 2509 PurpleLog *
2491 purple_account_get_log(PurpleAccount *account, gboolean create) 2510 purple_account_get_log(PurpleAccount *account, gboolean create)
2492 { 2511 {
2493 g_return_val_if_fail(account != NULL, NULL); 2512 g_return_val_if_fail(account != NULL, NULL);
2707 } 2726 }
2708 2727
2709 static void 2728 static void
2710 set_current_error(PurpleAccount *account, PurpleConnectionErrorInfo *new_err) 2729 set_current_error(PurpleAccount *account, PurpleConnectionErrorInfo *new_err)
2711 { 2730 {
2712 PurpleAccountPrivate *priv;
2713 PurpleConnectionErrorInfo *old_err; 2731 PurpleConnectionErrorInfo *old_err;
2714 2732
2715 g_return_if_fail(account != NULL); 2733 g_return_if_fail(account != NULL);
2716 2734
2717 priv = PURPLE_ACCOUNT_GET_PRIVATE(account); 2735 old_err = account->current_error;
2718 old_err = priv->current_error;
2719 2736
2720 if(new_err == old_err) 2737 if(new_err == old_err)
2721 return; 2738 return;
2722 2739
2723 priv->current_error = new_err; 2740 account->current_error = new_err;
2724 2741
2725 purple_signal_emit(purple_accounts_get_handle(), 2742 purple_signal_emit(purple_accounts_get_handle(),
2726 "account-error-changed", 2743 "account-error-changed",
2727 account, old_err, new_err); 2744 account, old_err, new_err);
2728 schedule_accounts_save(); 2745 schedule_accounts_save();
2760 } 2777 }
2761 2778
2762 const PurpleConnectionErrorInfo * 2779 const PurpleConnectionErrorInfo *
2763 purple_account_get_current_error(PurpleAccount *account) 2780 purple_account_get_current_error(PurpleAccount *account)
2764 { 2781 {
2765 PurpleAccountPrivate *priv = PURPLE_ACCOUNT_GET_PRIVATE(account); 2782 return account->current_error;
2766 return priv->current_error;
2767 } 2783 }
2768 2784
2769 void 2785 void
2770 purple_account_clear_current_error(PurpleAccount *account) 2786 purple_account_clear_current_error(PurpleAccount *account)
2771 { 2787 {