Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • irc_im.c

    re3e2059 r1aacef41  
    576576        ic->data = c;
    577577
    578         topic = g_strdup_printf(
    579                 "BitlBee groupchat: \"%s\". Please keep in mind that root-commands won't work here. Have fun!",
    580                 c->title);
    581         irc_channel_set_topic(ic, topic, irc->root);
    582         g_free(topic);
     578        if (ic->topic == NULL) {
     579                /* New channel with no preset topic - make up a generic one */
     580                topic = g_strdup_printf(
     581                        "BitlBee groupchat: \"%s\". Please keep in mind that root-commands won't work here. Have fun!",
     582                        c->title);
     583                irc_channel_set_topic(ic, topic, irc->root);
     584        } else {
     585                /* Preset topic from the channel we picked */
     586                topic = g_strdup(ic->topic);
     587        }
     588
     589        g_free(c->topic);
     590        c->topic = topic;         /* Let groupchat borrow this pointer */
    583591
    584592        return TRUE;
     
    600608        c->ui_data = NULL;
    601609        irc_channel_del_user(ic, ic->irc->user, IRC_CDU_KICK, "Chatroom closed by server");
     610
     611        return TRUE;
     612}
     613
     614static gboolean bee_irc_chat_placeholder_new(bee_t *bee, struct im_connection *ic, const char *handle,
     615                                             const char *name, const char *topic)
     616{
     617        irc_t *irc = bee->ui_data;
     618        irc_channel_t *ircc;
     619        char *full_name = irc_channel_name_gen(irc, name);
     620
     621        ircc = irc_channel_new(irc, full_name);
     622
     623        set_setstr(&ircc->set, "type", "chat");
     624        set_setstr(&ircc->set, "chat_type", "placeholder");
     625        set_setstr(&ircc->set, "account", ic->acc->tag);
     626        set_setstr(&ircc->set, "room", (char *) handle);
     627
     628        irc_channel_set_topic(ircc, topic, NULL);
     629
     630        g_free(full_name);
    602631
    603632        return TRUE;
     
    824853static gboolean bee_irc_channel_chat_join(irc_channel_t *ic)
    825854{
    826         char *acc_s, *room;
     855        char *acc_s, *room, *chat_type;
    827856        account_t *acc;
    828857
    829         if (strcmp(set_getstr(&ic->set, "chat_type"), "room") != 0) {
     858        chat_type = set_getstr(&ic->set, "chat_type");
     859
     860        if (strcmp(chat_type, "room") != 0 && strcmp(chat_type, "placeholder") != 0) {
    830861                return TRUE;
    831862        }
     
    9831014        struct irc_channel *ic = set->data;
    9841015
     1016        ic->flags &= ~(IRC_CHANNEL_TEMP | IRC_CHANNEL_KEEP_PLACEHOLDER);
     1017
    9851018        if (strcmp(value, "groupchat") == 0) {
    9861019                ic->flags |= IRC_CHANNEL_TEMP;
    9871020        } else if (strcmp(value, "room") == 0) {
    988                 ic->flags &= ~IRC_CHANNEL_TEMP;
     1021                // beep boop
     1022        } else if (strcmp(value, "placeholder") == 0) {
     1023                ic->flags |= IRC_CHANNEL_TEMP | IRC_CHANNEL_KEEP_PLACEHOLDER;
    9891024        } else {
    9901025                return NULL;
     
    10701105        bee_irc_chat_new,
    10711106        bee_irc_chat_free,
     1107        bee_irc_chat_placeholder_new,
    10721108        bee_irc_chat_log,
    10731109        bee_irc_chat_msg,
Note: See TracChangeset for help on using the changeset viewer.