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 | |
| parent | 0f7ee7e53f6bcb2d1d262a94c278440413c0103a (diff) | |
Fixed account cleanup (use remove, not destroy) and now using user's account
settings.
| -rw-r--r-- | protocols/purple/purple.c | 46 | ||||
| -rw-r--r-- | set.c | 16 | ||||
| -rw-r--r-- | set.h | 16 | 
3 files changed, 58 insertions, 20 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 ) @@ -62,7 +62,7 @@ set_t *set_add( set_t **head, const char *key, const char *def, set_eval eval, v  	return s;  } -set_t *set_find( set_t **head, char *key ) +set_t *set_find( set_t **head, const char *key )  {  	set_t *s = *head; @@ -76,7 +76,7 @@ set_t *set_find( set_t **head, char *key )  	return s;  } -char *set_getstr( set_t **head, char *key ) +char *set_getstr( set_t **head, const char *key )  {  	set_t *s = set_find( head, key ); @@ -86,7 +86,7 @@ char *set_getstr( set_t **head, char *key )  	return s->value ? s->value : s->def;  } -int set_getint( set_t **head, char *key ) +int set_getint( set_t **head, const char *key )  {  	char *s = set_getstr( head, key );  	int i = 0; @@ -100,7 +100,7 @@ int set_getint( set_t **head, char *key )  	return i;  } -int set_getbool( set_t **head, char *key ) +int set_getbool( set_t **head, const char *key )  {  	char *s = set_getstr( head, key ); @@ -110,7 +110,7 @@ int set_getbool( set_t **head, char *key )  	return bool2int( s );  } -int set_setstr( set_t **head, char *key, char *value ) +int set_setstr( set_t **head, const char *key, char *value )  {  	set_t *s = set_find( head, key );  	char *nv = value; @@ -149,7 +149,7 @@ int set_setstr( set_t **head, char *key, char *value )  	return 1;  } -int set_setint( set_t **head, char *key, int value ) +int set_setint( set_t **head, const char *key, int value )  {  	char s[24];	/* Not quite 128-bit clean eh? ;-) */ @@ -157,7 +157,7 @@ int set_setint( set_t **head, char *key, int value )  	return set_setstr( head, key, s );  } -void set_del( set_t **head, char *key ) +void set_del( set_t **head, const char *key )  {  	set_t *s = *head, *t = NULL; @@ -181,7 +181,7 @@ void set_del( set_t **head, char *key )  	}  } -int set_reset( set_t **head, char *key ) +int set_reset( set_t **head, const char *key )  {  	set_t *s; @@ -75,23 +75,23 @@ typedef struct set  set_t *set_add( set_t **head, const char *key, const char *def, set_eval eval, void *data );  /* Returns the raw set_t. Might be useful sometimes. */ -set_t *set_find( set_t **head, char *key ); +set_t *set_find( set_t **head, const char *key );  /* Returns a pointer to the string value of this setting. Don't modify the     returned string, and don't free() it! */ -G_MODULE_EXPORT char *set_getstr( set_t **head, char *key ); +G_MODULE_EXPORT char *set_getstr( set_t **head, const char *key );  /* Get an integer. In previous versions set_getint() was also used to read     boolean values, but this SHOULD be done with set_getbool() now! */ -G_MODULE_EXPORT int set_getint( set_t **head, char *key ); -G_MODULE_EXPORT int set_getbool( set_t **head, char *key ); +G_MODULE_EXPORT int set_getint( set_t **head, const char *key ); +G_MODULE_EXPORT int set_getbool( set_t **head, const char *key );  /* set_setstr() strdup()s the given value, so after using this function     you can free() it, if you want. */ -int set_setstr( set_t **head, char *key, char *value ); -int set_setint( set_t **head, char *key, int value ); -void set_del( set_t **head, char *key ); -int set_reset( set_t **head, char *key ); +int set_setstr( set_t **head, const char *key, char *value ); +int set_setint( set_t **head, const char *key, int value ); +void set_del( set_t **head, const char *key ); +int set_reset( set_t **head, const char *key );  /* Two very useful generic evaluators. */  char *set_eval_int( set_t *set, char *value ); | 
