| 50 g_list_free(jm->etc); |
50 g_list_free(jm->etc); |
| 51 |
51 |
| 52 g_free(jm); |
52 g_free(jm); |
| 53 } |
53 } |
| 54 |
54 |
| 55 static GaimConversation * |
|
| 56 find_unnormalized_im(const char *name, GaimAccount *account) |
|
| 57 { |
|
| 58 GaimConversation *c = NULL; |
|
| 59 GList *cnv; |
|
| 60 |
|
| 61 g_return_val_if_fail(name != NULL, NULL); |
|
| 62 |
|
| 63 for(cnv = gaim_get_conversations(); cnv; cnv = cnv->next) { |
|
| 64 c = (GaimConversation*)cnv->data; |
|
| 65 if(gaim_conversation_get_type(c) == GAIM_CONV_IM && |
|
| 66 !gaim_utf8_strcasecmp(name, gaim_conversation_get_name(c)) && |
|
| 67 account == gaim_conversation_get_account(c)) |
|
| 68 return c; |
|
| 69 } |
|
| 70 |
|
| 71 return NULL; |
|
| 72 } |
|
| 73 |
|
| 74 static void handle_chat(JabberMessage *jm) |
55 static void handle_chat(JabberMessage *jm) |
| 75 { |
56 { |
| 76 JabberID *jid = jabber_id_new(jm->from); |
57 JabberID *jid = jabber_id_new(jm->from); |
| 77 char *from; |
58 char *from; |
| 78 |
59 |
| 83 return; |
64 return; |
| 84 |
65 |
| 85 jb = jabber_buddy_find(jm->js, jm->from, TRUE); |
66 jb = jabber_buddy_find(jm->js, jm->from, TRUE); |
| 86 jbr = jabber_buddy_find_resource(jb, jid->resource); |
67 jbr = jabber_buddy_find_resource(jb, jid->resource); |
| 87 |
68 |
| 88 if(find_unnormalized_im(jm->from, jm->js->gc->account)) { |
69 if(jabber_find_unnormalized_conv(jm->from, jm->js->gc->account)) { |
| 89 from = g_strdup(jm->from); |
70 from = g_strdup(jm->from); |
| 90 } else if(jid->node) { |
71 } else if(jid->node) { |
| 91 GaimConversation *conv; |
72 GaimConversation *conv; |
| 92 |
73 |
| 93 from = g_strdup_printf("%s@%s", jid->node, jid->domain); |
74 from = g_strdup_printf("%s@%s", jid->node, jid->domain); |
| 94 conv = find_unnormalized_im(from, jm->js->gc->account); |
75 conv = jabber_find_unnormalized_conv(from, jm->js->gc->account); |
| 95 if(conv) |
76 if(conv) |
| 96 gaim_conversation_set_name(conv, jm->from); |
77 gaim_conversation_set_name(conv, jm->from); |
| 97 g_free(from); |
78 g_free(from); |
| 98 from = g_strdup(jm->from); |
79 from = g_strdup(jm->from); |
| 99 } else { |
80 } else { |
| 489 return 0; |
470 return 0; |
| 490 |
471 |
| 491 js = gc->proto_data; |
472 js = gc->proto_data; |
| 492 chat = jabber_chat_find_by_id(js, id); |
473 chat = jabber_chat_find_by_id(js, id); |
| 493 |
474 |
| |
475 if(!chat) |
| |
476 return 0; |
| |
477 |
| 494 if(!strcmp(msg, "/configure") || !strcmp(msg, "/config")) { |
478 if(!strcmp(msg, "/configure") || !strcmp(msg, "/config")) { |
| 495 jabber_chat_request_room_configure(chat); |
479 jabber_chat_request_room_configure(chat); |
| 496 return 1; |
480 return 1; |
| 497 } else if(!strcmp(msg, "/register")) { |
481 } else if(!strcmp(msg, "/register")) { |
| 498 jabber_chat_register(chat); |
482 jabber_chat_register(chat); |
| 505 jabber_chat_change_nick(chat, msg+6); |
489 jabber_chat_change_nick(chat, msg+6); |
| 506 return 1; |
490 return 1; |
| 507 } else if(!strncmp(msg, "/part", 5)) { |
491 } else if(!strncmp(msg, "/part", 5)) { |
| 508 jabber_chat_part(chat, strlen(msg) > 6 ? msg+6 : NULL); |
492 jabber_chat_part(chat, strlen(msg) > 6 ? msg+6 : NULL); |
| 509 return 1; |
493 return 1; |
| 510 } else if(!strncmp(msg, "/ban", 4)) { |
|
| 511 } else if(!strncmp(msg, "/kick", 5)) { |
|
| 512 } |
494 } |
| 513 |
495 |
| 514 jm = g_new0(JabberMessage, 1); |
496 jm = g_new0(JabberMessage, 1); |
| 515 jm->js = gc->proto_data; |
497 jm->js = gc->proto_data; |
| 516 jm->type = JABBER_MESSAGE_GROUPCHAT; |
498 jm->type = JABBER_MESSAGE_GROUPCHAT; |