diff options
| author | Wilmer van der Gaast <wilmer@gaast.net> | 2009-10-11 13:57:29 +0100 | 
|---|---|---|
| committer | Wilmer van der Gaast <wilmer@gaast.net> | 2009-10-11 13:57:29 +0100 | 
| commit | 0f7ee7e53f6bcb2d1d262a94c278440413c0103a (patch) | |
| tree | c1cef2714322015afe4c7ac9b2f57dd626a907b8 | |
| parent | db4cd40374ade33ccb1feae113f12a1dd0b6bf37 (diff) | |
Copy all the string/bool/int account settings with their defaults to
"account set".  They can be changed, but changes don't yet have any effect.
| -rw-r--r-- | protocols/purple/purple.c | 58 | ||||
| -rw-r--r-- | set.c | 2 | ||||
| -rw-r--r-- | set.h | 2 | 
3 files changed, 45 insertions, 17 deletions
| diff --git a/protocols/purple/purple.c b/protocols/purple/purple.c index c9de15cd..f3d8f0f4 100644 --- a/protocols/purple/purple.c +++ b/protocols/purple/purple.c @@ -46,16 +46,56 @@ static struct im_connection *purple_ic_by_gc( PurpleConnection *gc )  static void purple_init( account_t *acc )  { -	/* TODO: Figure out variables to export via set. */ +	PurplePlugin *prpl = purple_plugins_find_with_id( acc->prpl->name ); +	PurplePluginProtocolInfo *pi = prpl->info->extra_info; +	GList *i; +	for( i = pi->protocol_options; i; i = i->next ) +	{ +		PurpleAccountOption *o = i->data; +		const char *name; +		char *def = NULL; +		set_eval eval = NULL; +		set_t *s; +		 +		name = purple_account_option_get_setting( o ); +		 +		switch( purple_account_option_get_type( o ) ) +		{ +		case PURPLE_PREF_STRING: +			def = g_strdup( purple_account_option_get_default_string( o ) ); +			break; +		 +		case PURPLE_PREF_INT: +			def = g_strdup_printf( "%d", purple_account_option_get_default_int( o ) ); +			eval = set_eval_int; +			break; +		 +		case PURPLE_PREF_BOOLEAN: +			if( purple_account_option_get_default_bool( o ) ) +				def = g_strdup( "true" ); +			else +				def = g_strdup( "false" ); +			eval = set_eval_bool; +			break; +		 +		default: +			fprintf( stderr, "Setting with unknown type: %s (%d)\n", name, purple_account_option_get_type( o ) ); +		} +		 +		if( def != NULL ) +		{ +			s = set_add( &acc->set, name, def, eval, acc ); +			s->flags |= ACC_SET_OFFLINE_ONLY; +			g_free( def ); +		} +	}  }  static void purple_login( account_t *acc )  {  	struct im_connection *ic = imcb_new( acc );  	PurpleAccount *pa; -	//PurpleSavedStatus *ps; -	//GList *i;  	/* For now this is needed in the _connected() handlers if using  	   GLib event handling, to make sure we're not handling events @@ -68,18 +108,6 @@ static void purple_login( account_t *acc )  	ic->proto_data = pa;  	purple_account_set_enabled( pa, "BitlBee", TRUE ); -	 -	/* -	for( i = ((PurplePluginProtocolInfo *)pa->gc->prpl->info->extra_info)->protocol_options; i; i = i->next ) -	{ -		PurpleAccountOption *o = i->data; -		 -		printf( "%s\n", o->pref_name ); -	} -	*/ -	 -	//ps = purple_savedstatus_new( NULL, PURPLE_STATUS_AVAILABLE ); -	//purple_savedstatus_activate_for_account( ps, pa );  }  static void purple_logout( struct im_connection *ic ) @@ -28,7 +28,7 @@  /* Used to use NULL for this, but NULL is actually a "valid" value. */  char *SET_INVALID = "nee"; -set_t *set_add( set_t **head, char *key, char *def, set_eval eval, void *data ) +set_t *set_add( set_t **head, const char *key, const char *def, set_eval eval, void *data )  {  	set_t *s = set_find( head, key ); @@ -72,7 +72,7 @@ typedef struct set  } set_t;  /* Should be pretty clear. */ -set_t *set_add( set_t **head, char *key, char *def, set_eval eval, void *data ); +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 ); | 
