diff options
| author | Wilmer van der Gaast <wilmer@gaast.net> | 2009-10-11 22:08:26 +0100 | 
|---|---|---|
| committer | Wilmer van der Gaast <wilmer@gaast.net> | 2009-10-11 22:08:26 +0100 | 
| commit | b74b287af7ee980b01b89e911e21ec8f163d24b3 (patch) | |
| tree | 44ea65719a488595b8ad8a69ec491476dc75b14a /protocols | |
| parent | 0f7ee7e53f6bcb2d1d262a94c278440413c0103a (diff) | |
Fixed account cleanup (use remove, not destroy) and now using user's account
settings.
Diffstat (limited to 'protocols')
| -rw-r--r-- | protocols/purple/purple.c | 46 | 
1 files changed, 42 insertions, 4 deletions
| diff --git a/protocols/purple/purple.c b/protocols/purple/purple.c index f3d8f0f4..82978dc4 100644 --- a/protocols/purple/purple.c +++ b/protocols/purple/purple.c @@ -92,6 +92,43 @@ static void purple_init( account_t *acc )  	}  } +static void purple_sync_settings( account_t *acc, PurpleAccount *pa ) +{ +	PurplePlugin *prpl = purple_plugins_find_with_id( pa->protocol_id ); +	PurplePluginProtocolInfo *pi = prpl->info->extra_info; +	GList *i; +	 +	for( i = pi->protocol_options; i; i = i->next ) +	{ +		PurpleAccountOption *o = i->data; +		const char *name; +		set_t *s; +		 +		name = purple_account_option_get_setting( o ); +		s = set_find( &acc->set, name ); +		if( s->value == NULL ) +			continue; +		 +		switch( purple_account_option_get_type( o ) ) +		{ +		case PURPLE_PREF_STRING: +			purple_account_set_string( pa, name, set_getstr( &acc->set, name ) ); +			break; +		 +		case PURPLE_PREF_INT: +			purple_account_set_int( pa, name, set_getint( &acc->set, name ) ); +			break; +		 +		case PURPLE_PREF_BOOLEAN: +			purple_account_set_bool( pa, name, set_getbool( &acc->set, name ) ); +			break; +		 +		default: +			break; +		} +	} +} +  static void purple_login( account_t *acc )  {  	struct im_connection *ic = imcb_new( acc ); @@ -102,10 +139,9 @@ static void purple_login( account_t *acc )  	   on dead connections. */  	purple_connections = g_slist_prepend( purple_connections, ic ); -	pa = purple_account_new( acc->user, acc->prpl->name ); +	ic->proto_data = pa = purple_account_new( acc->user, acc->prpl->name );  	purple_account_set_password( pa, acc->pass ); -	 -	ic->proto_data = pa; +	purple_sync_settings( acc, pa );  	purple_account_set_enabled( pa, "BitlBee", TRUE );  } @@ -116,7 +152,7 @@ static void purple_logout( struct im_connection *ic )  	purple_account_set_enabled( pa, "BitlBee", FALSE );  	purple_connections = g_slist_remove( purple_connections, ic ); -	purple_account_destroy( pa ); +	purple_accounts_remove( pa );  }  static int purple_buddy_msg( struct im_connection *ic, char *who, char *message, int flags ) @@ -193,7 +229,9 @@ static void prplcb_conn_disconnected( PurpleConnection *gc )  	struct im_connection *ic = purple_ic_by_gc( gc );  	if( ic != NULL ) +	{  		imc_logout( ic, TRUE ); +	}  }  static void prplcb_conn_notice( PurpleConnection *gc, const char *text ) | 
