Mercurial > pidgin.yaz
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 { |