Changeset da44b08


Ignore:
Timestamp:
2011-09-30T04:32:32Z (13 years ago)
Author:
unknown <pesco@…>
Branches:
master
Children:
fb11647a
Parents:
f03a498
Message:

don't put color code before leading /me when coloring otr messages

File:
1 edited

Legend:

Unmodified
Added
Removed
  • otr.c

    rf03a498 rda44b08  
    365365        char *newmsg = NULL;
    366366        OtrlTLV *tlvs = NULL;
    367         char *colormsg;
    368367        irc_t *irc = iu->irc;
    369368        struct im_connection *ic = iu->bu->ic;
     
    385384        } else if(!newmsg) {
    386385                /* this was a non-OTR message */
    387                 return g_strdup(msg);
     386                return msg;
    388387        } else {
    389388                /* OTR has processed this message */
    390389                ConnContext *context = otrl_context_find(irc->otr->us, iu->bu->handle,
    391390                        ic->acc->user, ic->acc->prpl->name, 0, NULL, NULL, NULL);
     391
     392                /* we're done with the original msg, which will be caller-freed. */
     393                /* NB: must not change the newmsg pointer, since we free it. */
     394                msg = newmsg;
    392395
    393396                if(context && context->msgstate == OTRL_MSGSTATE_ENCRYPTED) {
     
    397400                           !(ic->flags & OPT_DOES_HTML) &&
    398401                           set_getbool(&ic->bee->set, "strip_html")) {
    399                                 strip_html(newmsg);
     402                                strip_html(msg);
    400403                        }
    401404
    402405                        /* coloring */
    403406                        if(set_getbool(&ic->bee->set, "otr_color_encrypted")) {
    404                                 /* color according to f'print trust */
    405                                 int color;
     407                                int color;                /* color according to f'print trust */
     408                                char *pre="", *sep="";    /* optional parts */
    406409                                const char *trust = context->active_fingerprint->trust;
     410
    407411                                if(trust && trust[0] != '\0')
    408412                                        color=3;   /* green */
     
    410414                                        color=5;   /* red */
    411415
    412                                 if(newmsg[0] == ',') {
    413                                         /* could be a problem with the color code */
    414                                         /* insert a space between color spec and message */
    415                                         colormsg = g_strdup_printf("\x03%.2d %s\x0F", color, newmsg);
    416                                 } else {
    417                                         colormsg = g_strdup_printf("\x03%.2d%s\x0F", color, newmsg);
     416                                /* keep "/me " uncolored at the beginning */
     417                                if (g_strncasecmp(msg, "/me ", 4) == 0) {
     418                                        msg += 4;  /* skip */
     419                                        pre = "/me ";
    418420                                }
     421
     422                                /* comma in first place could mess with the color code */
     423                                if (msg[0] == ',') {
     424                                    /* insert a space between color spec and message */
     425                                    sep = " ";
     426                                }
     427
     428                                msg = g_strdup_printf("%s\x03%.2d%s%s\x0F", pre,
     429                                        color, sep, msg);
    419430                        }
    420                 } else {
    421                         colormsg = g_strdup(newmsg);
    422                 }
    423 
     431                }
     432
     433                if(msg == newmsg) {
     434                        msg = g_strdup(newmsg);
     435                }
    424436                otrl_message_free(newmsg);
    425                 return colormsg;
     437                return msg;
    426438        }
    427439}
Note: See TracChangeset for help on using the changeset viewer.