Changes in / [8fdeaa5:29ff5c2]
- Files:
-
- 7 edited
Legend:
- Unmodified
- Added
- Removed
-
irc.h
r8fdeaa5 r29ff5c2 157 157 IRC_CHANNEL_TEMP = 2, /* Erase the channel when the user leaves, 158 158 and don't save it. */ 159 160 /* Show a placeholder of the channel in listings, but don't save it */ 161 IRC_CHANNEL_KEEP_PLACEHOLDER = 4, 159 162 160 163 /* Hack: Set this flag right before jumping into IM when we expect -
irc_channel.c
r8fdeaa5 r29ff5c2 276 276 if (ic->irc->status & USTATUS_SHUTDOWN) { 277 277 /* Don't do anything fancy when we're shutting down anyway. */ 278 } else if (ic->flags & IRC_CHANNEL_TEMP ) {278 } else if (ic->flags & IRC_CHANNEL_TEMP && !(ic->flags & IRC_CHANNEL_KEEP_PLACEHOLDER)) { 279 279 irc_channel_free_soon(ic); 280 280 } else { -
irc_im.c
r8fdeaa5 r29ff5c2 620 620 ic->data = c; 621 621 622 topic = g_strdup_printf( 623 "BitlBee groupchat: \"%s\". Please keep in mind that root-commands won't work here. Have fun!", 624 c->title); 625 irc_channel_set_topic(ic, topic, irc->root); 626 g_free(topic); 622 if (ic->topic == NULL) { 623 /* New channel with no preset topic - make up a generic one */ 624 topic = g_strdup_printf( 625 "BitlBee groupchat: \"%s\". Please keep in mind that root-commands won't work here. Have fun!", 626 c->title); 627 irc_channel_set_topic(ic, topic, irc->root); 628 } else { 629 /* Preset topic from the channel we picked */ 630 topic = g_strdup(ic->topic); 631 } 632 633 g_free(c->topic); 634 c->topic = topic; /* Let groupchat borrow this pointer */ 627 635 628 636 return TRUE; … … 644 652 c->ui_data = NULL; 645 653 irc_channel_del_user(ic, ic->irc->user, IRC_CDU_KICK, "Chatroom closed by server"); 654 655 return TRUE; 656 } 657 658 static gboolean bee_irc_chat_placeholder_new(bee_t *bee, struct im_connection *ic, const char *handle, 659 const char *name, const char *topic) 660 { 661 irc_t *irc = bee->ui_data; 662 irc_channel_t *ircc; 663 char *full_name = irc_channel_name_gen(irc, name); 664 665 ircc = irc_channel_new(irc, full_name); 666 667 set_setstr(&ircc->set, "type", "chat"); 668 set_setstr(&ircc->set, "chat_type", "placeholder"); 669 set_setstr(&ircc->set, "account", ic->acc->tag); 670 set_setstr(&ircc->set, "room", (char *) handle); 671 672 irc_channel_set_topic(ircc, topic, NULL); 673 674 g_free(full_name); 646 675 647 676 return TRUE; … … 870 899 static gboolean bee_irc_channel_chat_join(irc_channel_t *ic) 871 900 { 872 char *acc_s, *room ;901 char *acc_s, *room, *chat_type; 873 902 account_t *acc; 874 903 875 if (strcmp(set_getstr(&ic->set, "chat_type"), "room") != 0) { 904 chat_type = set_getstr(&ic->set, "chat_type"); 905 906 if (strcmp(chat_type, "room") != 0 && strcmp(chat_type, "placeholder") != 0) { 876 907 return TRUE; 877 908 } … … 1033 1064 struct irc_channel *ic = set->data; 1034 1065 1066 ic->flags &= ~(IRC_CHANNEL_TEMP | IRC_CHANNEL_KEEP_PLACEHOLDER); 1067 1035 1068 if (strcmp(value, "groupchat") == 0) { 1036 1069 ic->flags |= IRC_CHANNEL_TEMP; 1037 1070 } else if (strcmp(value, "room") == 0) { 1038 ic->flags &= ~IRC_CHANNEL_TEMP; 1071 // beep boop 1072 } else if (strcmp(value, "placeholder") == 0) { 1073 ic->flags |= IRC_CHANNEL_TEMP | IRC_CHANNEL_KEEP_PLACEHOLDER; 1039 1074 } else { 1040 1075 return NULL; … … 1120 1155 bee_irc_chat_new, 1121 1156 bee_irc_chat_free, 1157 bee_irc_chat_placeholder_new, 1122 1158 bee_irc_chat_log, 1123 1159 bee_irc_chat_msg, -
protocols/bee.h
r8fdeaa5 r29ff5c2 116 116 gboolean (*chat_new)(bee_t *bee, struct groupchat *c); 117 117 gboolean (*chat_free)(bee_t *bee, struct groupchat *c); 118 gboolean (*chat_placeholder_new)(bee_t *bee, struct im_connection *ic, const char *handle, 119 const char *name, const char *topic); 118 120 /* System messages of any kind. */ 119 121 gboolean (*chat_log)(bee_t *bee, struct groupchat *c, const char *text); … … 167 169 * user, too. */ 168 170 G_MODULE_EXPORT struct groupchat *imcb_chat_new(struct im_connection *ic, const char *handle); 171 G_MODULE_EXPORT void imcb_chat_placeholder_new(struct im_connection *ic, const char *handle, const char *name, 172 const char *topic); 169 173 G_MODULE_EXPORT void imcb_chat_name_hint(struct groupchat *c, const char *name); 170 174 G_MODULE_EXPORT void imcb_chat_free(struct groupchat *c); -
protocols/bee_chat.c
r8fdeaa5 r29ff5c2 54 54 } 55 55 56 void imcb_chat_placeholder_new(struct im_connection *ic, const char *handle, const char *name, const char *topic) 57 { 58 bee_t *bee = ic->bee; 59 60 if (bee->ui->chat_placeholder_new) { 61 bee->ui->chat_placeholder_new(bee, ic, handle, name, topic); 62 } 63 } 64 56 65 void imcb_chat_name_hint(struct groupchat *c, const char *name) 57 66 { -
protocols/jabber/hipchat.c
r8fdeaa5 r29ff5c2 27 27 { 28 28 struct jabber_data *jd = ic->proto_data; 29 char *sep, *jid ;29 char *sep, *jid, *muc_host; 30 30 31 31 jid = xt_find_attr(node, "jid"); 32 muc_host = xt_find_attr(node, "muc_host"); 32 33 33 34 sep = strchr(jid, '/'); … … 48 49 if (!jabber_get_roster(ic) || 49 50 !jabber_iq_disco_server(ic) || 50 !jabber_get_hipchat_profile(ic)) { 51 !jabber_get_hipchat_profile(ic) || 52 !jabber_iq_disco_muc(ic, muc_host)) { 51 53 return XT_ABORT; 52 54 } … … 92 94 93 95 } 96 97 int jabber_iq_disco_muc(struct im_connection *ic, char *muc_server) 98 { 99 struct xt_node *node; 100 int st; 101 102 imcb_log(ic, "Fetching MUC list"); 103 104 node = xt_new_node("query", NULL, NULL); 105 xt_add_attr(node, "xmlns", XMLNS_DISCO_ITEMS); 106 node = jabber_make_packet("iq", "get", muc_server, node); 107 108 jabber_cache_add(ic, node, jabber_parse_muc_list); 109 st = jabber_write_packet(ic, node); 110 111 return st; 112 } 113 114 xt_status jabber_parse_muc_list(struct im_connection *ic, struct xt_node *node, struct xt_node *orig) 115 { 116 struct xt_node *query, *c; 117 118 if (!(query = xt_find_node(node->children, "query"))) { 119 imcb_log(ic, "Warning: Received NULL MUC list packet"); 120 return XT_HANDLED; 121 } 122 123 c = query->children; 124 while ((c = xt_find_node(c, "item"))) { 125 struct xt_node *c2; 126 char *topic = NULL; 127 char *jid = xt_find_attr(c, "jid"); 128 char *name = xt_find_attr(c, "name"); 129 130 imcb_log(ic, "Debug: adding MUC to channel list: %s - '%s'", jid, name); 131 132 if ((c2 = xt_find_node_by_attr(c->children, "x", "xmlns", XMLNS_HIPCHAT_MUC)) && 133 (c2 = xt_find_node(c2->children, "topic"))) { 134 topic = c2->text; 135 } 136 137 imcb_chat_placeholder_new(ic, jid, name, topic); 138 c = c->next; 139 } 140 return XT_HANDLED; 141 142 } -
protocols/jabber/jabber.h
r8fdeaa5 r29ff5c2 243 243 #define XMLNS_HIPCHAT "http://hipchat.com" 244 244 #define XMLNS_HIPCHAT_PROFILE "http://hipchat.com/protocol/profile" 245 #define XMLNS_HIPCHAT_MUC "http://hipchat.com/protocol/muc#room" 245 246 246 247 /* jabber.c */ … … 253 254 int jabber_get_roster(struct im_connection *ic); 254 255 int jabber_get_vcard(struct im_connection *ic, char *bare_jid); 256 int jabber_iq_disco_muc(struct im_connection *ic, char *muc_server); 255 257 int jabber_add_to_roster(struct im_connection *ic, const char *handle, const char *name, const char *group); 256 258 int jabber_remove_from_roster(struct im_connection *ic, char *handle); … … 356 358 xt_status jabber_parse_hipchat_profile(struct im_connection *ic, struct xt_node *node, struct xt_node *orig); 357 359 xt_status hipchat_handle_success(struct im_connection *ic, struct xt_node *node); 360 xt_status jabber_parse_muc_list(struct im_connection *ic, struct xt_node *node, struct xt_node *orig); 358 361 359 362 #endif
Note: See TracChangeset
for help on using the changeset viewer.