aboutsummaryrefslogtreecommitdiffstats
path: root/skype/skype.c
diff options
context:
space:
mode:
Diffstat (limited to 'skype/skype.c')
-rw-r--r--skype/skype.c47
1 files changed, 27 insertions, 20 deletions
diff --git a/skype/skype.c b/skype/skype.c
index 4ad6cdb8..33f591ad 100644
--- a/skype/skype.c
+++ b/skype/skype.c
@@ -64,7 +64,8 @@ struct skype_data
* the chatname. Store the properties here so that we can use
* imcb_buddy_msg() when we got the chatname. */
char *handle;
- char *body;
+ /* List, because of multiline messages. */
+ GList *body;
char *type;
/* This is necessary because we send a notification when we get the
* handle. So we store the state here and then we can send a
@@ -313,8 +314,7 @@ static gboolean skype_read_callback( gpointer data, gint fd, b_input_condition c
else if(!strncmp(info, "BODY ", 5))
{
info += 5;
- g_free(sd->body);
- sd->body = g_strdup(info);
+ sd->body = g_list_append(sd->body, g_strdup(info));
}
else if(!strncmp(info, "TYPE ", 5))
{
@@ -328,25 +328,32 @@ static gboolean skype_read_callback( gpointer data, gint fd, b_input_condition c
if(sd->handle && sd->body && sd->type)
{
struct groupchat *gc = skype_chat_by_name(ic, info);
- if(!strcmp(sd->type, "SAID"))
- {
- if(!gc)
- /* Private message */
- imcb_buddy_msg(ic, sd->handle, sd->body, 0, 0);
- else
- /* Groupchat message */
- imcb_chat_msg(gc, sd->handle, sd->body, 0, 0);
- }
- else if(!strcmp(sd->type, "SETTOPIC"))
- {
- if(gc)
- imcb_chat_topic(gc, sd->handle, sd->body);
- }
- else if(!strcmp(sd->type, "LEFT"))
+ int i;
+ for(i=0;i<g_list_length(sd->body);i++)
{
- if(gc)
- imcb_chat_remove_buddy(gc, sd->handle, NULL);
+ char *body = g_list_nth_data(sd->body, i);
+ if(!strcmp(sd->type, "SAID"))
+ {
+ if(!gc)
+ /* Private message */
+ imcb_buddy_msg(ic, sd->handle, body, 0, 0);
+ else
+ /* Groupchat message */
+ imcb_chat_msg(gc, sd->handle, body, 0, 0);
+ }
+ else if(!strcmp(sd->type, "SETTOPIC"))
+ {
+ if(gc)
+ imcb_chat_topic(gc, sd->handle, body);
+ }
+ else if(!strcmp(sd->type, "LEFT"))
+ {
+ if(gc)
+ imcb_chat_remove_buddy(gc, sd->handle, NULL);
+ }
}
+ g_list_free(sd->body);
+ sd->body = NULL;
}
}
}