diff options
| -rw-r--r-- | skype/skype.c | 66 | 
1 files changed, 60 insertions, 6 deletions
| diff --git a/skype/skype.c b/skype/skype.c index 7ac0e9b1..36c68d49 100644 --- a/skype/skype.c +++ b/skype/skype.c @@ -294,6 +294,19 @@ static char *skype_group_by_username(struct im_connection *ic, char *username)  	return NULL;  } +static struct skype_group *skype_group_by_name(struct im_connection *ic, char *name) +{ +	struct skype_data *sd = ic->proto_data; +	int i; + +	for (i = 0; i < g_list_length(sd->groups); i++) { +		struct skype_group *sg = g_list_nth_data(sd->groups, i); +		if (!strcmp(sg->name, name)) +			return sg; +	} +	return NULL; +} +  static void skype_parse_users(struct im_connection *ic, char *line)  {  	char **i, **nicks; @@ -997,6 +1010,35 @@ static void skype_parse_groups(struct im_connection *ic, char *line)  	g_strfreev(groups);  } +static void skype_parse_alter_group(struct im_connection *ic, char *line) +{ +	char *id = line + strlen("ALTER GROUP"); + +	if (!++id) +		return; + +	char *info = strchr(id, ' '); + +	if (!info) +		return; +	*info = '\0'; +	info++; + +	if (!strncmp(info, "ADDUSER ", 8)) { +		struct skype_group *sg = skype_group_by_id(ic, atoi(id)); + +		info += 8; +		if (sg) { +			char *buf = g_strdup_printf("%s@skype.com", info); +			sg->users = g_list_append(sg->users, g_strdup(info)); +			imcb_add_buddy(ic, buf, sg->name); +			g_free(buf); +		} else +			log_message(LOGLVL_ERROR, +				"No skype group with id %s. That's probably a bug.", id); +	} +} +  typedef void (*skype_parser)(struct im_connection *ic, char *line);  static gboolean skype_read_callback(gpointer data, gint fd, @@ -1023,6 +1065,7 @@ static gboolean skype_read_callback(gpointer data, gint fd,  		{ "PING", skype_parse_ping },  		{ "CHATS ", skype_parse_chats },  		{ "GROUPS ", skype_parse_groups }, +		{ "ALTER GROUP ", skype_parse_alter_group },  	};  	/* Unused parameters */ @@ -1269,16 +1312,27 @@ static void skype_add_buddy(struct im_connection *ic, char *who, char *group)  {  	char *nick, *ptr; -	/* Unused parameter */ -	group = group; -  	nick = g_strdup(who);  	ptr = strchr(nick, '@');  	if (ptr)  		*ptr = '\0'; -	skype_printf(ic, "SET USER %s BUDDYSTATUS 2 Please authorize me\n", -		nick); -	g_free(nick); + +	if (!group) { +		skype_printf(ic, "SET USER %s BUDDYSTATUS 2 Please authorize me\n", +				nick); +		g_free(nick); +	} else { +		struct skype_group *sg = skype_group_by_name(ic, group); + +		if (!sg) { +			// TODO +			/* No such group, we need to create it, then have to +			 * add the user once it's created. */ +			//skype_printf(ic, "CREATE GROUP %s", group); +		} else { +			skype_printf(ic, "ALTER GROUP %d ADDUSER %s", sg->id, nick); +		} +	}  }  static void skype_remove_buddy(struct im_connection *ic, char *who, char *group) | 
