| 126 { |
107 { |
| 127 PurpleCallback cb; |
108 PurpleCallback cb; |
| 128 gpointer data; |
109 gpointer data; |
| 129 } PurpleCallbackBundle; |
110 } PurpleCallbackBundle; |
| 130 |
111 |
| |
112 static GObjectClass *parent_class = NULL; |
| |
113 |
| |
114 /* GObject Property enums */ |
| |
115 enum |
| |
116 { |
| |
117 PROP_0, |
| |
118 PROP_USERNAME, |
| |
119 PROP_PASSWORD, |
| |
120 PROP_PRIVATE_ALIAS, |
| |
121 PROP_PUBLIC_ALIAS, |
| |
122 PROP_ENABLED, |
| |
123 PROP_CONNECTION, |
| |
124 PROP_PROTOCOL_ID, |
| |
125 PROP_USER_INFO, |
| |
126 PROP_BUDDY_ICON_PATH, |
| |
127 PROP_REMEMBER_PASSWORD, |
| |
128 PROP_CHECK_MAIL, |
| |
129 PROP_LAST |
| |
130 }; |
| |
131 |
| |
132 |
| 131 static void set_current_error(PurpleAccount *account, |
133 static void set_current_error(PurpleAccount *account, |
| 132 PurpleConnectionErrorInfo *new_err); |
134 PurpleConnectionErrorInfo *new_err); |
| 133 |
135 |
| 134 |
136 |
| 135 PurpleAccount * |
|
| 136 purple_account_new(const char *username, const char *protocol_id) |
|
| 137 { |
|
| 138 PurpleAccount *account = NULL; |
|
| 139 PurplePlugin *prpl = NULL; |
|
| 140 PurplePluginProtocolInfo *prpl_info = NULL; |
|
| 141 PurpleStatusType *status_type; |
|
| 142 |
|
| 143 g_return_val_if_fail(username != NULL, NULL); |
|
| 144 g_return_val_if_fail(protocol_id != NULL, NULL); |
|
| 145 |
|
| 146 account = purple_accounts_find(username, protocol_id); |
|
| 147 |
|
| 148 if (account != NULL) |
|
| 149 return account; |
|
| 150 |
|
| 151 account = g_new0(PurpleAccount, 1); |
|
| 152 PURPLE_DBUS_REGISTER_POINTER(account, PurpleAccount); |
|
| 153 |
|
| 154 purple_account_set_username(account, username); |
|
| 155 |
|
| 156 purple_account_set_protocol_id(account, protocol_id); |
|
| 157 |
|
| 158 account->settings = g_hash_table_new_full(g_str_hash, g_str_equal, |
|
| 159 g_free, delete_setting); |
|
| 160 account->ui_settings = g_hash_table_new_full(g_str_hash, g_str_equal, |
|
| 161 g_free, (GDestroyNotify)g_hash_table_destroy); |
|
| 162 account->system_log = NULL; |
|
| 163 /* 0 is not a valid privacy setting */ |
|
| 164 account->perm_deny = PURPLE_PRIVACY_ALLOW_ALL; |
|
| 165 |
|
| 166 purple_signal_emit(purple_accounts_get_handle(), "account-created", account); |
|
| 167 |
|
| 168 prpl = purple_find_prpl(protocol_id); |
|
| 169 |
|
| 170 if (prpl == NULL) |
|
| 171 return account; |
|
| 172 |
|
| 173 prpl_info = PURPLE_PLUGIN_PROTOCOL_INFO(prpl); |
|
| 174 if (prpl_info != NULL && prpl_info->status_types != NULL) |
|
| 175 purple_account_set_status_types(account, prpl_info->status_types(account)); |
|
| 176 |
|
| 177 account->presence = purple_presence_new_for_account(account); |
|
| 178 |
|
| 179 status_type = purple_account_get_status_type_with_primitive(account, PURPLE_STATUS_AVAILABLE); |
|
| 180 if (status_type != NULL) |
|
| 181 purple_presence_set_status_active(account->presence, |
|
| 182 purple_status_type_get_id(status_type), |
|
| 183 TRUE); |
|
| 184 else |
|
| 185 purple_presence_set_status_active(account->presence, |
|
| 186 "offline", |
|
| 187 TRUE); |
|
| 188 |
|
| 189 return account; |
|
| 190 } |
|
| 191 |
|
| 192 void |
|
| 193 purple_account_destroy(PurpleAccount *account) |
|
| 194 { |
|
| 195 GList *l; |
|
| 196 |
|
| 197 g_return_if_fail(account != NULL); |
|
| 198 |
|
| 199 purple_debug_info("account", "Destroying account %p\n", account); |
|
| 200 purple_signal_emit(purple_accounts_get_handle(), "account-destroying", account); |
|
| 201 |
|
| 202 for (l = purple_get_conversations(); l != NULL; l = l->next) |
|
| 203 { |
|
| 204 PurpleConversation *conv = (PurpleConversation *)l->data; |
|
| 205 |
|
| 206 if (purple_conversation_get_account(conv) == account) |
|
| 207 purple_conversation_set_account(conv, NULL); |
|
| 208 } |
|
| 209 |
|
| 210 g_free(account->username); |
|
| 211 g_free(account->alias); |
|
| 212 purple_str_wipe(account->password); |
|
| 213 g_free(account->user_info); |
|
| 214 g_free(account->buddy_icon_path); |
|
| 215 g_free(account->protocol_id); |
|
| 216 |
|
| 217 g_hash_table_destroy(account->settings); |
|
| 218 g_hash_table_destroy(account->ui_settings); |
|
| 219 |
|
| 220 if (account->proxy_info) |
|
| 221 purple_proxy_info_destroy(account->proxy_info); |
|
| 222 |
|
| 223 purple_account_set_status_types(account, NULL); |
|
| 224 |
|
| 225 if (account->presence) |
|
| 226 purple_presence_destroy(account->presence); |
|
| 227 |
|
| 228 if(account->system_log) |
|
| 229 purple_log_free(account->system_log); |
|
| 230 |
|
| 231 while (account->deny) { |
|
| 232 g_free(account->deny->data); |
|
| 233 account->deny = g_slist_delete_link(account->deny, account->deny); |
|
| 234 } |
|
| 235 |
|
| 236 while (account->permit) { |
|
| 237 g_free(account->permit->data); |
|
| 238 account->permit = g_slist_delete_link(account->permit, account->permit); |
|
| 239 } |
|
| 240 |
|
| 241 PURPLE_DBUS_UNREGISTER_POINTER(account->current_error); |
|
| 242 if (account->current_error) { |
|
| 243 g_free(account->current_error->description); |
|
| 244 g_free(account->current_error); |
|
| 245 } |
|
| 246 |
|
| 247 PURPLE_DBUS_UNREGISTER_POINTER(account); |
|
| 248 g_free(account); |
|
| 249 } |
|
| 250 |
|
| 251 void |
137 void |
| 252 purple_account_set_register_callback(PurpleAccount *account, PurpleAccountRegistrationCb cb, void *user_data) |
138 purple_account_set_register_callback(PurpleAccount *account, PurpleAccountRegistrationCb cb, void *user_data) |
| 253 { |
139 { |
| 254 g_return_if_fail(account != NULL); |
140 PurpleAccountPrivate *priv; |
| 255 |
141 |
| 256 account->registration_cb = cb; |
142 g_return_if_fail(account != NULL); |
| 257 account->registration_cb_user_data = user_data; |
143 |
| |
144 priv = PURPLE_ACCOUNT_GET_PRIVATE(account); |
| |
145 |
| |
146 priv->registration_cb = cb; |
| |
147 priv->registration_cb_user_data = user_data; |
| 258 } |
148 } |
| 259 |
149 |
| 260 static void |
150 static void |
| 261 purple_account_register_got_password_cb(PurpleAccount *account, |
151 purple_account_register_got_password_cb(PurpleAccount *account, |
| 262 const gchar *password, GError *error, gpointer data) |
152 const gchar *password, GError *error, gpointer data) |
| 430 purple_notify_error(account, _("Connection Error"), message, NULL); |
325 purple_notify_error(account, _("Connection Error"), message, NULL); |
| 431 g_free(message); |
326 g_free(message); |
| 432 return; |
327 return; |
| 433 } |
328 } |
| 434 |
329 |
| |
330 priv = PURPLE_ACCOUNT_GET_PRIVATE(account); |
| |
331 |
| 435 purple_debug_info("account", "Connecting to account %s.\n", username); |
332 purple_debug_info("account", "Connecting to account %s.\n", username); |
| 436 |
333 |
| 437 prpl_info = PURPLE_PLUGIN_PROTOCOL_INFO(prpl); |
334 prpl_info = PURPLE_PLUGIN_PROTOCOL_INFO(prpl); |
| 438 if (account->password != NULL) { |
335 if (priv->password != NULL) { |
| 439 purple_account_connect_got_password_cb(account, |
336 purple_account_connect_got_password_cb(account, |
| 440 account->password, NULL, prpl_info); |
337 priv->password, NULL, prpl_info); |
| 441 } else { |
338 } else { |
| 442 purple_keyring_get_password(account, |
339 purple_keyring_get_password(account, |
| 443 purple_account_connect_got_password_cb, prpl_info); |
340 purple_account_connect_got_password_cb, prpl_info); |
| 444 } |
341 } |
| 445 } |
342 } |
| 446 |
343 |
| 447 void |
344 void |
| 448 purple_account_disconnect(PurpleAccount *account) |
345 purple_account_disconnect(PurpleAccount *account) |
| 449 { |
346 { |
| 450 PurpleConnection *gc; |
347 PurpleConnection *gc; |
| |
348 PurpleAccountPrivate *priv; |
| 451 const char *username; |
349 const char *username; |
| 452 |
350 |
| 453 g_return_if_fail(account != NULL); |
351 g_return_if_fail(account != NULL); |
| 454 g_return_if_fail(!purple_account_is_disconnected(account)); |
352 g_return_if_fail(!purple_account_is_disconnected(account)); |
| |
353 |
| |
354 priv = PURPLE_ACCOUNT_GET_PRIVATE(account); |
| 455 |
355 |
| 456 username = purple_account_get_username(account); |
356 username = purple_account_get_username(account); |
| 457 purple_debug_info("account", "Disconnecting account %s (%p)\n", |
357 purple_debug_info("account", "Disconnecting account %s (%p)\n", |
| 458 username ? username : "(null)", account); |
358 username ? username : "(null)", account); |
| 459 |
359 |
| 460 account->disconnecting = TRUE; |
360 priv->disconnecting = TRUE; |
| 461 |
361 |
| 462 gc = purple_account_get_connection(account); |
362 gc = purple_account_get_connection(account); |
| 463 _purple_connection_destroy(gc); |
363 _purple_connection_destroy(gc); |
| 464 purple_account_set_connection(account, NULL); |
364 purple_account_set_connection(account, NULL); |
| 465 |
365 |
| 466 account->disconnecting = FALSE; |
366 priv->disconnecting = FALSE; |
| 467 } |
367 } |
| 468 |
368 |
| 469 gboolean |
369 gboolean |
| 470 purple_account_is_disconnecting(const PurpleAccount *account) |
370 purple_account_is_disconnecting(const PurpleAccount *account) |
| 471 { |
371 { |
| |
372 PurpleAccountPrivate *priv; |
| |
373 |
| 472 g_return_val_if_fail(account != NULL, TRUE); |
374 g_return_val_if_fail(account != NULL, TRUE); |
| 473 |
375 |
| 474 return account->disconnecting; |
376 priv = PURPLE_ACCOUNT_GET_PRIVATE(account); |
| |
377 return priv->disconnecting; |
| 475 } |
378 } |
| 476 |
379 |
| 477 void |
380 void |
| 478 purple_account_notify_added(PurpleAccount *account, const char *remote_user, |
381 purple_account_notify_added(PurpleAccount *account, const char *remote_user, |
| 479 const char *id, const char *alias, |
382 const char *id, const char *alias, |
| 868 } |
782 } |
| 869 |
783 |
| 870 void |
784 void |
| 871 purple_account_set_user_info(PurpleAccount *account, const char *user_info) |
785 purple_account_set_user_info(PurpleAccount *account, const char *user_info) |
| 872 { |
786 { |
| 873 g_return_if_fail(account != NULL); |
787 PurpleAccountPrivate *priv; |
| 874 |
788 |
| 875 g_free(account->user_info); |
789 g_return_if_fail(account != NULL); |
| 876 account->user_info = g_strdup(user_info); |
790 |
| |
791 priv = PURPLE_ACCOUNT_GET_PRIVATE(account); |
| |
792 |
| |
793 g_free(priv->user_info); |
| |
794 priv->user_info = g_strdup(user_info); |
| 877 |
795 |
| 878 schedule_accounts_save(); |
796 schedule_accounts_save(); |
| 879 } |
797 } |
| 880 |
798 |
| 881 void purple_account_set_buddy_icon_path(PurpleAccount *account, const char *path) |
799 void purple_account_set_buddy_icon_path(PurpleAccount *account, const char *path) |
| 882 { |
800 { |
| 883 g_return_if_fail(account != NULL); |
801 PurpleAccountPrivate *priv; |
| 884 |
802 |
| 885 g_free(account->buddy_icon_path); |
803 g_return_if_fail(account != NULL); |
| 886 account->buddy_icon_path = g_strdup(path); |
804 |
| |
805 priv = PURPLE_ACCOUNT_GET_PRIVATE(account); |
| |
806 |
| |
807 g_free(priv->buddy_icon_path); |
| |
808 priv->buddy_icon_path = g_strdup(path); |
| 887 |
809 |
| 888 schedule_accounts_save(); |
810 schedule_accounts_save(); |
| 889 } |
811 } |
| 890 |
812 |
| 891 void |
813 void |
| 892 purple_account_set_protocol_id(PurpleAccount *account, const char *protocol_id) |
814 purple_account_set_protocol_id(PurpleAccount *account, const char *protocol_id) |
| 893 { |
815 { |
| |
816 PurpleAccountPrivate *priv; |
| |
817 |
| 894 g_return_if_fail(account != NULL); |
818 g_return_if_fail(account != NULL); |
| 895 g_return_if_fail(protocol_id != NULL); |
819 g_return_if_fail(protocol_id != NULL); |
| 896 |
820 |
| 897 g_free(account->protocol_id); |
821 priv = PURPLE_ACCOUNT_GET_PRIVATE(account); |
| 898 account->protocol_id = g_strdup(protocol_id); |
822 |
| |
823 g_free(priv->protocol_id); |
| |
824 priv->protocol_id = g_strdup(protocol_id); |
| 899 |
825 |
| 900 schedule_accounts_save(); |
826 schedule_accounts_save(); |
| 901 } |
827 } |
| 902 |
828 |
| 903 void |
829 void |
| 904 purple_account_set_connection(PurpleAccount *account, PurpleConnection *gc) |
830 purple_account_set_connection(PurpleAccount *account, PurpleConnection *gc) |
| 905 { |
831 { |
| 906 g_return_if_fail(account != NULL); |
832 PurpleAccountPrivate *priv; |
| 907 |
833 |
| 908 account->gc = gc; |
834 g_return_if_fail(account != NULL); |
| |
835 |
| |
836 priv = PURPLE_ACCOUNT_GET_PRIVATE(account); |
| |
837 priv->gc = gc; |
| 909 } |
838 } |
| 910 |
839 |
| 911 void |
840 void |
| 912 purple_account_set_remember_password(PurpleAccount *account, gboolean value) |
841 purple_account_set_remember_password(PurpleAccount *account, gboolean value) |
| 913 { |
842 { |
| 914 g_return_if_fail(account != NULL); |
843 PurpleAccountPrivate *priv; |
| 915 |
844 |
| 916 account->remember_pass = value; |
845 g_return_if_fail(account != NULL); |
| |
846 |
| |
847 priv = PURPLE_ACCOUNT_GET_PRIVATE(account); |
| |
848 priv->remember_pass = value; |
| 917 |
849 |
| 918 schedule_accounts_save(); |
850 schedule_accounts_save(); |
| 919 } |
851 } |
| 920 |
852 |
| 921 void |
853 void |
| 947 purple_signal_emit(purple_accounts_get_handle(), "account-enabled", account); |
880 purple_signal_emit(purple_accounts_get_handle(), "account-enabled", account); |
| 948 |
881 |
| 949 if ((gc != NULL) && (gc->wants_to_die == TRUE)) |
882 if ((gc != NULL) && (gc->wants_to_die == TRUE)) |
| 950 return; |
883 return; |
| 951 |
884 |
| 952 if (value && purple_presence_is_online(account->presence)) |
885 priv = PURPLE_ACCOUNT_GET_PRIVATE(account); |
| |
886 |
| |
887 if (value && purple_presence_is_online(priv->presence)) |
| 953 purple_account_connect(account); |
888 purple_account_connect(account); |
| 954 else if (!value && !purple_account_is_disconnected(account)) |
889 else if (!value && !purple_account_is_disconnected(account)) |
| 955 purple_account_disconnect(account); |
890 purple_account_disconnect(account); |
| 956 } |
891 } |
| 957 |
892 |
| 958 void |
893 void |
| 959 purple_account_set_proxy_info(PurpleAccount *account, PurpleProxyInfo *info) |
894 purple_account_set_proxy_info(PurpleAccount *account, PurpleProxyInfo *info) |
| 960 { |
895 { |
| 961 g_return_if_fail(account != NULL); |
896 PurpleAccountPrivate *priv; |
| 962 |
897 |
| 963 if (account->proxy_info != NULL) |
898 g_return_if_fail(account != NULL); |
| 964 purple_proxy_info_destroy(account->proxy_info); |
899 |
| 965 |
900 priv = PURPLE_ACCOUNT_GET_PRIVATE(account); |
| 966 account->proxy_info = info; |
901 |
| |
902 if (priv->proxy_info != NULL) |
| |
903 purple_proxy_info_destroy(priv->proxy_info); |
| |
904 |
| |
905 priv->proxy_info = info; |
| 967 |
906 |
| 968 schedule_accounts_save(); |
907 schedule_accounts_save(); |
| 969 } |
908 } |
| 970 |
909 |
| 971 void |
910 void |
| 972 purple_account_set_privacy_type(PurpleAccount *account, PurpleAccountPrivacyType privacy_type) |
911 purple_account_set_privacy_type(PurpleAccount *account, PurpleAccountPrivacyType privacy_type) |
| 973 { |
912 { |
| 974 g_return_if_fail(account != NULL); |
913 PurpleAccountPrivate *priv; |
| 975 |
914 |
| 976 account->perm_deny = privacy_type; |
915 g_return_if_fail(account != NULL); |
| |
916 |
| |
917 priv = PURPLE_ACCOUNT_GET_PRIVATE(account); |
| |
918 priv->perm_deny = privacy_type; |
| 977 } |
919 } |
| 978 |
920 |
| 979 void |
921 void |
| 980 purple_account_set_status_types(PurpleAccount *account, GList *status_types) |
922 purple_account_set_status_types(PurpleAccount *account, GList *status_types) |
| 981 { |
923 { |
| 982 g_return_if_fail(account != NULL); |
924 PurpleAccountPrivate *priv; |
| |
925 |
| |
926 g_return_if_fail(account != NULL); |
| |
927 |
| |
928 priv = PURPLE_ACCOUNT_GET_PRIVATE(account); |
| 983 |
929 |
| 984 /* Out with the old... */ |
930 /* Out with the old... */ |
| 985 if (account->status_types != NULL) |
931 if (priv->status_types != NULL) |
| 986 { |
932 { |
| 987 g_list_foreach(account->status_types, (GFunc)purple_status_type_destroy, NULL); |
933 g_list_foreach(priv->status_types, (GFunc)purple_status_type_destroy, NULL); |
| 988 g_list_free(account->status_types); |
934 g_list_free(priv->status_types); |
| 989 } |
935 } |
| 990 |
936 |
| 991 /* In with the new... */ |
937 /* In with the new... */ |
| 992 account->status_types = status_types; |
938 priv->status_types = status_types; |
| 993 } |
939 } |
| 994 |
940 |
| 995 void |
941 void |
| 996 purple_account_set_status(PurpleAccount *account, const char *status_id, |
942 purple_account_set_status(PurpleAccount *account, const char *status_id, |
| 997 gboolean active, ...) |
943 gboolean active, ...) |
| 1143 } |
1089 } |
| 1144 |
1090 |
| 1145 void |
1091 void |
| 1146 purple_account_clear_settings(PurpleAccount *account) |
1092 purple_account_clear_settings(PurpleAccount *account) |
| 1147 { |
1093 { |
| 1148 g_return_if_fail(account != NULL); |
1094 PurpleAccountPrivate *priv; |
| 1149 |
1095 |
| 1150 g_hash_table_destroy(account->settings); |
1096 g_return_if_fail(account != NULL); |
| 1151 |
1097 |
| 1152 account->settings = g_hash_table_new_full(g_str_hash, g_str_equal, |
1098 priv = PURPLE_ACCOUNT_GET_PRIVATE(account); |
| |
1099 g_hash_table_destroy(priv->settings); |
| |
1100 |
| |
1101 priv->settings = g_hash_table_new_full(g_str_hash, g_str_equal, |
| 1153 g_free, delete_setting); |
1102 g_free, delete_setting); |
| 1154 } |
1103 } |
| 1155 |
1104 |
| 1156 void |
1105 void |
| 1157 purple_account_remove_setting(PurpleAccount *account, const char *setting) |
1106 purple_account_remove_setting(PurpleAccount *account, const char *setting) |
| 1158 { |
1107 { |
| |
1108 PurpleAccountPrivate *priv; |
| |
1109 |
| 1159 g_return_if_fail(account != NULL); |
1110 g_return_if_fail(account != NULL); |
| 1160 g_return_if_fail(setting != NULL); |
1111 g_return_if_fail(setting != NULL); |
| 1161 |
1112 |
| 1162 g_hash_table_remove(account->settings, setting); |
1113 priv = PURPLE_ACCOUNT_GET_PRIVATE(account); |
| |
1114 |
| |
1115 g_hash_table_remove(priv->settings, setting); |
| 1163 } |
1116 } |
| 1164 |
1117 |
| 1165 void |
1118 void |
| 1166 purple_account_set_int(PurpleAccount *account, const char *name, int value) |
1119 purple_account_set_int(PurpleAccount *account, const char *name, int value) |
| 1167 { |
1120 { |
| 1168 PurpleAccountSetting *setting; |
1121 GValue *setting; |
| |
1122 PurpleAccountPrivate *priv; |
| 1169 |
1123 |
| 1170 g_return_if_fail(account != NULL); |
1124 g_return_if_fail(account != NULL); |
| 1171 g_return_if_fail(name != NULL); |
1125 g_return_if_fail(name != NULL); |
| 1172 |
1126 |
| 1173 setting = g_new0(PurpleAccountSetting, 1); |
1127 priv = PURPLE_ACCOUNT_GET_PRIVATE(account); |
| |
1128 |
| |
1129 setting = g_new0(GValue, 1); |
| 1174 |
1130 |
| 1175 setting->type = PURPLE_PREF_INT; |
1131 setting->type = PURPLE_PREF_INT; |
| 1176 setting->value.integer = value; |
1132 setting->value.integer = value; |
| 1177 |
1133 |
| 1178 g_hash_table_insert(account->settings, g_strdup(name), setting); |
1134 g_hash_table_insert(priv->settings, g_strdup(name), setting); |
| 1179 |
1135 |
| 1180 schedule_accounts_save(); |
1136 schedule_accounts_save(); |
| 1181 } |
1137 } |
| 1182 |
1138 |
| 1183 void |
1139 void |
| 1184 purple_account_set_string(PurpleAccount *account, const char *name, |
1140 purple_account_set_string(PurpleAccount *account, const char *name, |
| 1185 const char *value) |
1141 const char *value) |
| 1186 { |
1142 { |
| 1187 PurpleAccountSetting *setting; |
1143 GValue *setting; |
| |
1144 PurpleAccountPrivate *priv; |
| 1188 |
1145 |
| 1189 g_return_if_fail(account != NULL); |
1146 g_return_if_fail(account != NULL); |
| 1190 g_return_if_fail(name != NULL); |
1147 g_return_if_fail(name != NULL); |
| 1191 |
1148 |
| 1192 setting = g_new0(PurpleAccountSetting, 1); |
1149 priv = PURPLE_ACCOUNT_GET_PRIVATE(account); |
| |
1150 |
| |
1151 setting = g_new0(GValue, 1); |
| 1193 |
1152 |
| 1194 setting->type = PURPLE_PREF_STRING; |
1153 setting->type = PURPLE_PREF_STRING; |
| 1195 setting->value.string = g_strdup(value); |
1154 setting->value.string = g_strdup(value); |
| 1196 |
1155 |
| 1197 g_hash_table_insert(account->settings, g_strdup(name), setting); |
1156 g_hash_table_insert(priv->settings, g_strdup(name), setting); |
| 1198 |
1157 |
| 1199 schedule_accounts_save(); |
1158 schedule_accounts_save(); |
| 1200 } |
1159 } |
| 1201 |
1160 |
| 1202 void |
1161 void |
| 1203 purple_account_set_bool(PurpleAccount *account, const char *name, gboolean value) |
1162 purple_account_set_bool(PurpleAccount *account, const char *name, gboolean value) |
| 1204 { |
1163 { |
| 1205 PurpleAccountSetting *setting; |
1164 GValue *setting; |
| |
1165 PurpleAccountPrivate *priv; |
| 1206 |
1166 |
| 1207 g_return_if_fail(account != NULL); |
1167 g_return_if_fail(account != NULL); |
| 1208 g_return_if_fail(name != NULL); |
1168 g_return_if_fail(name != NULL); |
| 1209 |
1169 |
| 1210 setting = g_new0(PurpleAccountSetting, 1); |
1170 priv = PURPLE_ACCOUNT_GET_PRIVATE(account); |
| |
1171 |
| |
1172 setting = g_new0(GValue, 1); |
| 1211 |
1173 |
| 1212 setting->type = PURPLE_PREF_BOOLEAN; |
1174 setting->type = PURPLE_PREF_BOOLEAN; |
| 1213 setting->value.boolean = value; |
1175 setting->value.boolean = value; |
| 1214 |
1176 |
| 1215 g_hash_table_insert(account->settings, g_strdup(name), setting); |
1177 g_hash_table_insert(priv->settings, g_strdup(name), setting); |
| 1216 |
1178 |
| 1217 schedule_accounts_save(); |
1179 schedule_accounts_save(); |
| 1218 } |
1180 } |
| 1219 |
1181 |
| 1220 static GHashTable * |
1182 static GHashTable * |
| 1221 get_ui_settings_table(PurpleAccount *account, const char *ui) |
1183 get_ui_settings_table(PurpleAccount *account, const char *ui) |
| 1222 { |
1184 { |
| 1223 GHashTable *table; |
1185 GHashTable *table; |
| 1224 |
1186 PurpleAccountPrivate *priv = PURPLE_ACCOUNT_GET_PRIVATE(account); |
| 1225 table = g_hash_table_lookup(account->ui_settings, ui); |
1187 |
| |
1188 table = g_hash_table_lookup(priv->ui_settings, ui); |
| 1226 |
1189 |
| 1227 if (table == NULL) { |
1190 if (table == NULL) { |
| 1228 table = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, |
1191 table = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, |
| 1229 delete_setting); |
1192 delete_setting); |
| 1230 g_hash_table_insert(account->ui_settings, g_strdup(ui), table); |
1193 g_hash_table_insert(priv->ui_settings, g_strdup(ui), table); |
| 1231 } |
1194 } |
| 1232 |
1195 |
| 1233 return table; |
1196 return table; |
| 1234 } |
1197 } |
| 1235 |
1198 |
| 1236 void |
1199 void |
| 1237 purple_account_set_ui_int(PurpleAccount *account, const char *ui, |
1200 purple_account_set_ui_int(PurpleAccount *account, const char *ui, |
| 1238 const char *name, int value) |
1201 const char *name, int value) |
| 1239 { |
1202 { |
| 1240 PurpleAccountSetting *setting; |
1203 GValue *setting; |
| 1241 GHashTable *table; |
1204 GHashTable *table; |
| 1242 |
1205 |
| 1243 g_return_if_fail(account != NULL); |
1206 g_return_if_fail(account != NULL); |
| 1244 g_return_if_fail(ui != NULL); |
1207 g_return_if_fail(ui != NULL); |
| 1245 g_return_if_fail(name != NULL); |
1208 g_return_if_fail(name != NULL); |
| 1246 |
1209 |
| 1247 setting = g_new0(PurpleAccountSetting, 1); |
1210 setting = g_new0(GValue, 1); |
| 1248 |
1211 |
| 1249 setting->type = PURPLE_PREF_INT; |
1212 setting->type = PURPLE_PREF_INT; |
| 1250 setting->ui = g_strdup(ui); |
1213 setting->ui = g_strdup(ui); |
| 1251 setting->value.integer = value; |
1214 setting->value.integer = value; |
| 1252 |
1215 |
| 1941 } |
1960 } |
| 1942 |
1961 |
| 1943 PurplePresence * |
1962 PurplePresence * |
| 1944 purple_account_get_presence(const PurpleAccount *account) |
1963 purple_account_get_presence(const PurpleAccount *account) |
| 1945 { |
1964 { |
| |
1965 PurpleAccountPrivate *priv; |
| |
1966 |
| 1946 g_return_val_if_fail(account != NULL, NULL); |
1967 g_return_val_if_fail(account != NULL, NULL); |
| 1947 |
1968 |
| 1948 return account->presence; |
1969 priv = PURPLE_ACCOUNT_GET_PRIVATE(account); |
| |
1970 return priv->presence; |
| 1949 } |
1971 } |
| 1950 |
1972 |
| 1951 gboolean |
1973 gboolean |
| 1952 purple_account_is_status_active(const PurpleAccount *account, |
1974 purple_account_is_status_active(const PurpleAccount *account, |
| 1953 const char *status_id) |
1975 const char *status_id) |
| 1954 { |
1976 { |
| |
1977 PurpleAccountPrivate *priv; |
| |
1978 |
| 1955 g_return_val_if_fail(account != NULL, FALSE); |
1979 g_return_val_if_fail(account != NULL, FALSE); |
| 1956 g_return_val_if_fail(status_id != NULL, FALSE); |
1980 g_return_val_if_fail(status_id != NULL, FALSE); |
| 1957 |
1981 |
| 1958 return purple_presence_is_status_active(account->presence, status_id); |
1982 priv = PURPLE_ACCOUNT_GET_PRIVATE(account); |
| |
1983 |
| |
1984 return purple_presence_is_status_active(priv->presence, status_id); |
| 1959 } |
1985 } |
| 1960 |
1986 |
| 1961 GList * |
1987 GList * |
| 1962 purple_account_get_status_types(const PurpleAccount *account) |
1988 purple_account_get_status_types(const PurpleAccount *account) |
| 1963 { |
1989 { |
| |
1990 PurpleAccountPrivate *priv; |
| |
1991 |
| 1964 g_return_val_if_fail(account != NULL, NULL); |
1992 g_return_val_if_fail(account != NULL, NULL); |
| 1965 |
1993 |
| 1966 return account->status_types; |
1994 priv = PURPLE_ACCOUNT_GET_PRIVATE(account); |
| |
1995 return priv->status_types; |
| 1967 } |
1996 } |
| 1968 |
1997 |
| 1969 int |
1998 int |
| 1970 purple_account_get_int(const PurpleAccount *account, const char *name, |
1999 purple_account_get_int(const PurpleAccount *account, const char *name, |
| 1971 int default_value) |
2000 int default_value) |
| 1972 { |
2001 { |
| 1973 PurpleAccountSetting *setting; |
2002 GValue *setting; |
| |
2003 PurpleAccountPrivate *priv; |
| 1974 |
2004 |
| 1975 g_return_val_if_fail(account != NULL, default_value); |
2005 g_return_val_if_fail(account != NULL, default_value); |
| 1976 g_return_val_if_fail(name != NULL, default_value); |
2006 g_return_val_if_fail(name != NULL, default_value); |
| 1977 |
2007 |
| 1978 setting = g_hash_table_lookup(account->settings, name); |
2008 priv = PURPLE_ACCOUNT_GET_PRIVATE(account); |
| |
2009 setting = g_hash_table_lookup(priv->settings, name); |
| 1979 |
2010 |
| 1980 if (setting == NULL) |
2011 if (setting == NULL) |
| 1981 return default_value; |
2012 return default_value; |
| 1982 |
2013 |
| 1983 g_return_val_if_fail(setting->type == PURPLE_PREF_INT, default_value); |
2014 g_return_val_if_fail(setting->type == PURPLE_PREF_INT, default_value); |
| 2090 } |
2134 } |
| 2091 |
2135 |
| 2092 gpointer |
2136 gpointer |
| 2093 purple_account_get_ui_data(const PurpleAccount *account) |
2137 purple_account_get_ui_data(const PurpleAccount *account) |
| 2094 { |
2138 { |
| 2095 g_return_val_if_fail(account != NULL, NULL); |
2139 PurpleAccountPrivate *priv; |
| 2096 |
2140 |
| 2097 return account->ui_data; |
2141 g_return_val_if_fail(account != NULL, NULL); |
| |
2142 |
| |
2143 priv = PURPLE_ACCOUNT_GET_PRIVATE(account); |
| |
2144 return priv->ui_data; |
| 2098 } |
2145 } |
| 2099 |
2146 |
| 2100 void |
2147 void |
| 2101 purple_account_set_ui_data(PurpleAccount *account, |
2148 purple_account_set_ui_data(PurpleAccount *account, |
| 2102 gpointer ui_data) |
2149 gpointer ui_data) |
| 2103 { |
2150 { |
| 2104 g_return_if_fail(account != NULL); |
2151 PurpleAccountPrivate *priv; |
| 2105 |
2152 |
| 2106 account->ui_data = ui_data; |
2153 g_return_if_fail(account != NULL); |
| |
2154 |
| |
2155 priv = PURPLE_ACCOUNT_GET_PRIVATE(account); |
| |
2156 priv->ui_data = ui_data; |
| 2107 } |
2157 } |
| 2108 |
2158 |
| 2109 |
2159 |
| 2110 PurpleLog * |
2160 PurpleLog * |
| 2111 purple_account_get_log(PurpleAccount *account, gboolean create) |
2161 purple_account_get_log(PurpleAccount *account, gboolean create) |
| 2112 { |
2162 { |
| |
2163 PurpleAccountPrivate *priv; |
| |
2164 |
| 2113 g_return_val_if_fail(account != NULL, NULL); |
2165 g_return_val_if_fail(account != NULL, NULL); |
| 2114 |
2166 |
| 2115 if(!account->system_log && create){ |
2167 priv = PURPLE_ACCOUNT_GET_PRIVATE(account); |
| |
2168 |
| |
2169 if(!priv->system_log && create){ |
| 2116 PurplePresence *presence; |
2170 PurplePresence *presence; |
| 2117 int login_time; |
2171 int login_time; |
| 2118 |
2172 |
| 2119 presence = purple_account_get_presence(account); |
2173 presence = purple_account_get_presence(account); |
| 2120 login_time = purple_presence_get_login_time(presence); |
2174 login_time = purple_presence_get_login_time(presence); |
| 2121 |
2175 |
| 2122 account->system_log = purple_log_new(PURPLE_LOG_SYSTEM, |
2176 priv->system_log = purple_log_new(PURPLE_LOG_SYSTEM, |
| 2123 purple_account_get_username(account), account, NULL, |
2177 purple_account_get_username(account), account, NULL, |
| 2124 (login_time != 0) ? login_time : time(NULL), NULL); |
2178 (login_time != 0) ? login_time : time(NULL), NULL); |
| 2125 } |
2179 } |
| 2126 |
2180 |
| 2127 return account->system_log; |
2181 return priv->system_log; |
| 2128 } |
2182 } |
| 2129 |
2183 |
| 2130 void |
2184 void |
| 2131 purple_account_destroy_log(PurpleAccount *account) |
2185 purple_account_destroy_log(PurpleAccount *account) |
| 2132 { |
2186 { |
| 2133 g_return_if_fail(account != NULL); |
2187 PurpleAccountPrivate *priv; |
| 2134 |
2188 |
| 2135 if(account->system_log){ |
2189 g_return_if_fail(account != NULL); |
| 2136 purple_log_free(account->system_log); |
2190 |
| 2137 account->system_log = NULL; |
2191 priv = PURPLE_ACCOUNT_GET_PRIVATE(account); |
| |
2192 |
| |
2193 if(priv->system_log){ |
| |
2194 purple_log_free(priv->system_log); |
| |
2195 priv->system_log = NULL; |
| 2138 } |
2196 } |
| 2139 } |
2197 } |
| 2140 |
2198 |
| 2141 void |
2199 void |
| 2142 purple_account_add_buddy(PurpleAccount *account, PurpleBuddy *buddy, const char *message) |
2200 purple_account_add_buddy(PurpleAccount *account, PurpleBuddy *buddy, const char *message) |
| 2386 } |
2446 } |
| 2387 |
2447 |
| 2388 const PurpleConnectionErrorInfo * |
2448 const PurpleConnectionErrorInfo * |
| 2389 purple_account_get_current_error(PurpleAccount *account) |
2449 purple_account_get_current_error(PurpleAccount *account) |
| 2390 { |
2450 { |
| 2391 return account->current_error; |
2451 PurpleAccountPrivate *priv = PURPLE_ACCOUNT_GET_PRIVATE(account); |
| |
2452 |
| |
2453 return priv->current_error; |
| 2392 } |
2454 } |
| 2393 |
2455 |
| 2394 void |
2456 void |
| 2395 purple_account_clear_current_error(PurpleAccount *account) |
2457 purple_account_clear_current_error(PurpleAccount *account) |
| 2396 { |
2458 { |
| 2397 set_current_error(account, NULL); |
2459 set_current_error(account, NULL); |
| |
2460 } |
| |
2461 |
| |
2462 /**************** |
| |
2463 * GObject Code * |
| |
2464 ****************/ |
| |
2465 |
| |
2466 /* GObject Property names */ |
| |
2467 #define PROP_USERNAME_S "username" |
| |
2468 #define PROP_PASSWORD_S "password" |
| |
2469 #define PROP_PRIVATE_ALIAS_S "private-alias" |
| |
2470 #define PROP_PUBLIC_ALIAS_S "public-alias" |
| |
2471 #define PROP_ENABLED_S "enabled" |
| |
2472 #define PROP_CONNECTION_S "connection" |
| |
2473 #define PROP_PROTOCOL_ID_S "protocol-id" |
| |
2474 #define PROP_USER_INFO_S "userinfo" |
| |
2475 #define PROP_BUDDY_ICON_PATH_S "buddy-icon-path" |
| |
2476 #define PROP_REMEMBER_PASSWORD_S "remember-password" |
| |
2477 #define PROP_CHECK_MAIL_S "check-mail" |
| |
2478 |
| |
2479 /* Set method for GObject properties */ |
| |
2480 static void |
| |
2481 purple_account_set_property(GObject *obj, guint param_id, const GValue *value, |
| |
2482 GParamSpec *pspec) |
| |
2483 { |
| |
2484 PurpleAccount *account = PURPLE_ACCOUNT(obj); |
| |
2485 |
| |
2486 switch (param_id) { |
| |
2487 case PROP_USERNAME: |
| |
2488 purple_account_set_username(account, g_value_get_string(value)); |
| |
2489 break; |
| |
2490 case PROP_PASSWORD: |
| |
2491 purple_account_set_password(account, g_value_get_string(value)); |
| |
2492 break; |
| |
2493 case PROP_PRIVATE_ALIAS: |
| |
2494 purple_account_set_alias(account, g_value_get_string(value)); |
| |
2495 break; |
| |
2496 case PROP_PUBLIC_ALIAS: |
| |
2497 purple_account_set_public_alias(account, g_value_get_string(value)); |
| |
2498 break; |
| |
2499 case PROP_ENABLED: |
| |
2500 purple_account_set_enabled(account, g_value_get_boolean(value)); |
| |
2501 break; |
| |
2502 case PROP_CONNECTION: |
| |
2503 purple_account_set_connection(account, |
| |
2504 PURPLE_CONNECTION(g_value_get_object(value))); |
| |
2505 break; |
| |
2506 case PROP_PROTOCOL_ID: |
| |
2507 purple_account_set_protocol_id(account, g_value_get_string(value)); |
| |
2508 break; |
| |
2509 case PROP_USER_INFO: |
| |
2510 purple_account_set_user_info(account, g_value_get_string(value)); |
| |
2511 break; |
| |
2512 case PROP_BUDDY_ICON_PATH: |
| |
2513 purple_account_set_buddy_icon_path(account, |
| |
2514 g_value_get_string(value)); |
| |
2515 break; |
| |
2516 case PROP_REMEMBER_PASSWORD: |
| |
2517 purple_account_set_remember_password(account, |
| |
2518 g_value_get_boolean(value)); |
| |
2519 break; |
| |
2520 case PROP_CHECK_MAIL: |
| |
2521 purple_account_set_check_mail(account, g_value_get_boolean(value)); |
| |
2522 break; |
| |
2523 default: |
| |
2524 G_OBJECT_WARN_INVALID_PROPERTY_ID(obj, param_id, pspec); |
| |
2525 break; |
| |
2526 } |
| |
2527 } |
| |
2528 |
| |
2529 /* Get method for GObject properties */ |
| |
2530 static void |
| |
2531 purple_account_get_property(GObject *obj, guint param_id, GValue *value, |
| |
2532 GParamSpec *pspec) |
| |
2533 { |
| |
2534 PurpleAccount *account = PURPLE_ACCOUNT(obj); |
| |
2535 |
| |
2536 switch (param_id) { |
| |
2537 case PROP_USERNAME: |
| |
2538 g_value_set_string(value, purple_account_get_username(account)); |
| |
2539 break; |
| |
2540 case PROP_PASSWORD: |
| |
2541 g_value_set_string(value, purple_account_get_password(account)); |
| |
2542 break; |
| |
2543 case PROP_PRIVATE_ALIAS: |
| |
2544 g_value_set_string(value, purple_account_get_alias(account)); |
| |
2545 break; |
| |
2546 case PROP_PUBLIC_ALIAS: |
| |
2547 g_value_set_string(value, purple_account_get_public_alias(account)); |
| |
2548 break; |
| |
2549 case PROP_ENABLED: |
| |
2550 g_value_set_boolean(value, |
| |
2551 purple_account_get_enabled(account)); |
| |
2552 break; |
| |
2553 case PROP_CONNECTION: |
| |
2554 g_value_set_object(value, |
| |
2555 purple_account_get_connection(account)); |
| |
2556 break; |
| |
2557 case PROP_PROTOCOL_ID: |
| |
2558 g_value_set_string(value, purple_account_get_protocol_id(account)); |
| |
2559 break; |
| |
2560 case PROP_USER_INFO: |
| |
2561 g_value_set_string(value, purple_account_get_user_info(account)); |
| |
2562 break; |
| |
2563 case PROP_BUDDY_ICON_PATH: |
| |
2564 g_value_set_string(value, purple_account_get_buddy_icon_path(account)); |
| |
2565 break; |
| |
2566 case PROP_REMEMBER_PASSWORD: |
| |
2567 g_value_set_boolean(value, purple_account_get_remember_password(account)); |
| |
2568 break; |
| |
2569 case PROP_CHECK_MAIL: |
| |
2570 g_value_set_boolean(value, purple_account_get_check_mail(account)); |
| |
2571 break; |
| |
2572 default: |
| |
2573 G_OBJECT_WARN_INVALID_PROPERTY_ID(obj, param_id, pspec); |
| |
2574 break; |
| |
2575 } |
| |
2576 } |
| |
2577 |
| |
2578 /* GObject initialization function */ |
| |
2579 static void purple_account_init(GTypeInstance *instance, gpointer klass) |
| |
2580 { |
| |
2581 PurpleAccount *account = PURPLE_ACCOUNT(instance); |
| |
2582 PurpleAccountPrivate *priv = PURPLE_ACCOUNT_GET_PRIVATE(account); |
| |
2583 |
| |
2584 priv->settings = g_hash_table_new_full(g_str_hash, g_str_equal, |
| |
2585 g_free, delete_setting); |
| |
2586 priv->ui_settings = g_hash_table_new_full(g_str_hash, g_str_equal, |
| |
2587 g_free, (GDestroyNotify)g_hash_table_destroy); |
| |
2588 priv->system_log = NULL; |
| |
2589 |
| |
2590 account->perm_deny = PURPLE_PRIVACY_ALLOW_ALL; |
| |
2591 } |
| |
2592 |
| |
2593 /* GObject dispose function */ |
| |
2594 static void |
| |
2595 purple_account_dispose(GObject *object) |
| |
2596 { |
| |
2597 GList *l; |
| |
2598 PurpleAccount *account = PURPLE_ACCOUNT(object); |
| |
2599 PurpleAccountPrivate *priv = PURPLE_ACCOUNT_GET_PRIVATE(account); |
| |
2600 |
| |
2601 purple_debug_info("account", "Destroying account %p\n", account); |
| |
2602 purple_signal_emit(purple_accounts_get_handle(), "account-destroying", account); |
| |
2603 |
| |
2604 for (l = purple_get_conversations(); l != NULL; l = l->next) |
| |
2605 { |
| |
2606 PurpleConversation *conv = (PurpleConversation *)l->data; |
| |
2607 |
| |
2608 if (purple_conversation_get_account(conv) == account) |
| |
2609 purple_conversation_set_account(conv, NULL); |
| |
2610 } |
| |
2611 |
| |
2612 purple_account_set_status_types(account, NULL); |
| |
2613 |
| |
2614 if (priv->proxy_info) |
| |
2615 purple_proxy_info_destroy(priv->proxy_info); |
| |
2616 |
| |
2617 if (priv->presence) |
| |
2618 purple_presence_destroy(priv->presence); |
| |
2619 |
| |
2620 if(priv->system_log) |
| |
2621 purple_log_free(priv->system_log); |
| |
2622 |
| |
2623 if (priv->current_error) { |
| |
2624 g_free(priv->current_error->description); |
| |
2625 g_free(priv->current_error); |
| |
2626 } |
| |
2627 |
| |
2628 PURPLE_DBUS_UNREGISTER_POINTER(priv->current_error); |
| |
2629 PURPLE_DBUS_UNREGISTER_POINTER(account); |
| |
2630 |
| |
2631 parent_class->dispose(object); |
| |
2632 } |
| |
2633 |
| |
2634 /* GObject finalize function */ |
| |
2635 static void |
| |
2636 purple_account_finalize(GObject *object) |
| |
2637 { |
| |
2638 PurpleAccount *account = PURPLE_ACCOUNT(object); |
| |
2639 PurpleAccountPrivate *priv = PURPLE_ACCOUNT_GET_PRIVATE(account); |
| |
2640 |
| |
2641 g_free(priv->username); |
| |
2642 g_free(priv->alias); |
| |
2643 purple_str_wipe(priv->password); |
| |
2644 g_free(priv->user_info); |
| |
2645 g_free(priv->buddy_icon_path); |
| |
2646 g_free(priv->protocol_id); |
| |
2647 |
| |
2648 g_hash_table_destroy(priv->settings); |
| |
2649 g_hash_table_destroy(priv->ui_settings); |
| |
2650 |
| |
2651 while (priv->deny) { |
| |
2652 g_free(priv->deny->data); |
| |
2653 priv->deny = g_slist_delete_link(priv->deny, priv->deny); |
| |
2654 } |
| |
2655 |
| |
2656 while (priv->permit) { |
| |
2657 g_free(priv->permit->data); |
| |
2658 priv->permit = g_slist_delete_link(priv->permit, priv->permit); |
| |
2659 } |
| |
2660 |
| |
2661 parent_class->finalize(object); |
| |
2662 } |
| |
2663 |
| |
2664 /* Class initializer function */ |
| |
2665 static void purple_account_class_init(PurpleAccountClass *klass) |
| |
2666 { |
| |
2667 GObjectClass *obj_class = G_OBJECT_CLASS(klass); |
| |
2668 |
| |
2669 parent_class = g_type_class_peek_parent(klass); |
| |
2670 |
| |
2671 obj_class->dispose = purple_account_dispose; |
| |
2672 obj_class->finalize = purple_account_finalize; |
| |
2673 |
| |
2674 /* Setup properties */ |
| |
2675 obj_class->get_property = purple_account_get_property; |
| |
2676 obj_class->set_property = purple_account_set_property; |
| |
2677 |
| |
2678 g_object_class_install_property(obj_class, PROP_USERNAME, |
| |
2679 g_param_spec_string(PROP_USERNAME_S, _("Username"), |
| |
2680 _("The username for the account."), NULL, |
| |
2681 G_PARAM_READWRITE | G_PARAM_CONSTRUCT) |
| |
2682 ); |
| |
2683 |
| |
2684 g_object_class_install_property(obj_class, PROP_PASSWORD, |
| |
2685 g_param_spec_string(PROP_PASSWORD_S, _("Password"), |
| |
2686 _("The password for the account."), NULL, |
| |
2687 G_PARAM_READWRITE) |
| |
2688 ); |
| |
2689 |
| |
2690 g_object_class_install_property(obj_class, PROP_PRIVATE_ALIAS, |
| |
2691 g_param_spec_string(PROP_PRIVATE_ALIAS_S, _("Private Alias"), |
| |
2692 _("The private alias for the account."), NULL, |
| |
2693 G_PARAM_READWRITE) |
| |
2694 ); |
| |
2695 |
| |
2696 g_object_class_install_property(obj_class, PROP_PUBLIC_ALIAS, |
| |
2697 g_param_spec_string(PROP_PUBLIC_ALIAS_S, _("Public Alias"), |
| |
2698 _("The public alias for the account."), NULL, |
| |
2699 G_PARAM_READWRITE) |
| |
2700 ); |
| |
2701 |
| |
2702 g_object_class_install_property(obj_class, PROP_USER_INFO, |
| |
2703 g_param_spec_string(PROP_USER_INFO_S, _("User information"), |
| |
2704 _("Detailed user information for the account."), NULL, |
| |
2705 G_PARAM_READWRITE) |
| |
2706 ); |
| |
2707 |
| |
2708 g_object_class_install_property(obj_class, PROP_BUDDY_ICON_PATH, |
| |
2709 g_param_spec_string(PROP_BUDDY_ICON_PATH_S, _("Buddy icon path"), |
| |
2710 _("Path to the buddyicon for the account."), NULL, |
| |
2711 G_PARAM_READWRITE) |
| |
2712 ); |
| |
2713 |
| |
2714 g_object_class_install_property(obj_class, PROP_ENABLED, |
| |
2715 g_param_spec_boolean(PROP_ENABLED_S, _("Enabled"), |
| |
2716 _("Whether the account is enabled or not."), FALSE, |
| |
2717 G_PARAM_READWRITE | G_PARAM_CONSTRUCT) |
| |
2718 ); |
| |
2719 |
| |
2720 g_object_class_install_property(obj_class, PROP_REMEMBER_PASSWORD, |
| |
2721 g_param_spec_boolean(PROP_REMEMBER_PASSWORD_S, _("Remember password"), |
| |
2722 _("Whether to remember and store the password for this account."), FALSE, |
| |
2723 G_PARAM_READWRITE | G_PARAM_CONSTRUCT) |
| |
2724 ); |
| |
2725 |
| |
2726 g_object_class_install_property(obj_class, PROP_CHECK_MAIL, |
| |
2727 g_param_spec_boolean(PROP_CHECK_MAIL_S, _("Check mail"), |
| |
2728 _("Whether to check mails for this account."), FALSE, |
| |
2729 G_PARAM_READWRITE | G_PARAM_CONSTRUCT) |
| |
2730 ); |
| |
2731 |
| |
2732 g_object_class_install_property(obj_class, PROP_CONNECTION, |
| |
2733 g_param_spec_object(PROP_CONNECTION_S, _("Connection"), |
| |
2734 _("The PurpleConnection object for the account."), |
| |
2735 PURPLE_TYPE_CONNECTION, |
| |
2736 G_PARAM_READWRITE) |
| |
2737 ); |
| |
2738 |
| |
2739 g_object_class_install_property(obj_class, PROP_PROTOCOL_ID, |
| |
2740 g_param_spec_string(PROP_PROTOCOL_ID_S, _("Protocol ID"), |
| |
2741 _("ID of the protocol that is responsible for the account."), NULL, |
| |
2742 G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY) |
| |
2743 ); |
| |
2744 |
| |
2745 g_type_class_add_private(klass, sizeof(PurpleAccountPrivate)); |
| 2398 } |
2746 } |
| 2399 |
2747 |
| 2400 GType |
2748 GType |
| 2401 purple_account_get_type(void) |
2749 purple_account_get_type(void) |
| 2402 { |
2750 { |
| 2405 if(type == 0) { |
2753 if(type == 0) { |
| 2406 static const GTypeInfo info = { |
2754 static const GTypeInfo info = { |
| 2407 sizeof(PurpleAccountClass), |
2755 sizeof(PurpleAccountClass), |
| 2408 NULL, |
2756 NULL, |
| 2409 NULL, |
2757 NULL, |
| 2410 NULL, /*TODO: (GClassInitFunc)purple_account_class_init,*/ |
2758 (GClassInitFunc)purple_account_class_init, |
| 2411 NULL, |
2759 NULL, |
| 2412 NULL, |
2760 NULL, |
| 2413 sizeof(PurpleAccount), |
2761 sizeof(PurpleAccount), |
| 2414 0, |
2762 0, |
| 2415 NULL, /*TODO: (GInstanceInitFunc)purple_account_init,*/ |
2763 (GInstanceInitFunc)purple_account_init, |
| 2416 NULL, |
2764 NULL, |
| 2417 }; |
2765 }; |
| 2418 |
2766 |
| 2419 type = g_type_register_static(G_TYPE_OBJECT, |
2767 type = g_type_register_static(G_TYPE_OBJECT, |
| 2420 "PurpleAccount", |
2768 "PurpleAccount", |
| 2421 &info, 0); |
2769 &info, 0); |
| 2422 } |
2770 } |
| 2423 |
2771 |
| 2424 return type; |
2772 return type; |
| 2425 } |
2773 } |
| |
2774 |
| |
2775 PurpleAccount * |
| |
2776 purple_account_new(const char *username, const char *protocol_id) |
| |
2777 { |
| |
2778 PurpleAccount *account = NULL; |
| |
2779 PurplePlugin *prpl = NULL; |
| |
2780 PurplePluginProtocolInfo *prpl_info = NULL; |
| |
2781 PurpleStatusType *status_type; |
| |
2782 PurpleAccountPrivate *priv; |
| |
2783 |
| |
2784 g_return_val_if_fail(username != NULL, NULL); |
| |
2785 g_return_val_if_fail(protocol_id != NULL, NULL); |
| |
2786 |
| |
2787 account = purple_accounts_find(username, protocol_id); |
| |
2788 |
| |
2789 if (account != NULL) |
| |
2790 return account; |
| |
2791 |
| |
2792 account = g_object_new(PURPLE_TYPE_ACCOUNT, |
| |
2793 PROP_USERNAME_S, username, |
| |
2794 PROP_PROTOCOL_ID_S, protocol_id, |
| |
2795 NULL); |
| |
2796 PURPLE_DBUS_REGISTER_POINTER(account, PurpleAccount); |
| |
2797 |
| |
2798 purple_signal_emit(purple_accounts_get_handle(), "account-created", account); |
| |
2799 |
| |
2800 prpl = purple_find_prpl(protocol_id); |
| |
2801 if (prpl == NULL) |
| |
2802 return account; |
| |
2803 |
| |
2804 prpl_info = PURPLE_PLUGIN_PROTOCOL_INFO(prpl); |
| |
2805 if (prpl_info != NULL && prpl_info->status_types != NULL) |
| |
2806 purple_account_set_status_types(account, prpl_info->status_types(account)); |
| |
2807 |
| |
2808 priv = PURPLE_ACCOUNT_GET_PRIVATE(account); |
| |
2809 |
| |
2810 priv->presence = purple_presence_new_for_account(account); |
| |
2811 |
| |
2812 status_type = purple_account_get_status_type_with_primitive(account, PURPLE_STATUS_AVAILABLE); |
| |
2813 if (status_type != NULL) |
| |
2814 purple_presence_set_status_active(priv->presence, |
| |
2815 purple_status_type_get_id(status_type), |
| |
2816 TRUE); |
| |
2817 else |
| |
2818 purple_presence_set_status_active(priv->presence, |
| |
2819 "offline", |
| |
2820 TRUE); |
| |
2821 |
| |
2822 return account; |
| |
2823 } |