Changeset ce402b2 for protocols


Ignore:
Timestamp:
2015-01-26T07:50:54Z (5 years ago)
Author:
dequis <dx@…>
Branches:
master
Children:
12fe5ea
Parents:
dfaa46d
git-author:
William Pettersson <william.pettersson@…> (11-01-15 05:08:37)
git-committer:
dequis <dx@…> (26-01-15 07:50:54)
Message:

Twitter format strings

Allow users to specify how tweets should be displayed

3 new settings are available to set how tweets are displayed:

  • twitter_format_string for normal tweets
  • retweet_format_string for retweets
  • reply_format_string for replies

For full documentation see the help files

Location:
protocols/twitter
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • protocols/twitter/twitter.c

    rdfaa46d rce402b2  
    539539
    540540        s = set_add(&acc->set, "strip_newlines", "false", set_eval_bool, acc);
     541
     542        s = set_add(&acc->set, "format_string", "\002[\002%i\002]\002 %c", NULL, acc);
     543        s = set_add(&acc->set, "retweet_format_string", "\002[\002%i\002]\002 RT @%a: %c", NULL, acc);
     544        s = set_add(&acc->set, "reply_format_string", "\002[\002%i->%r\002]\002 %c", NULL, acc);
    541545       
    542546        s = set_add(&acc->set, "_last_tweet", "0", NULL, acc);
  • protocols/twitter/twitter_lib.c

    rdfaa46d rce402b2  
    6363        guint64 reply_to;
    6464        gboolean from_filter;
     65        struct twitter_xml_status *rt;
    6566};
    6667
     
    8889        g_free(txs->text);
    8990        txu_free(txs->user);
     91        txs_free(txs->rt);
    9092        g_free(txs);
    9193}
     
    489491                if (rtxs) {
    490492                        g_free(txs->text);
    491                         txs->text = g_strdup_printf("RT @%s: %s", rtxs->user->screen_name, rtxs->text);
     493                        txs->text = g_strdup(rtxs->text);
    492494                        txs->id = rtxs->id;
    493                         txs_free(rtxs);
     495                        txs->rt = rtxs;
    494496                }
    495497        } else if (entities) {
     
    609611}
    610612
     613/**
     614 * Function to properly format a tweet as per the users configuration.
     615 */
     616static char *twitter_msg_get_text(struct im_connection *ic, int log_id, int reply_to,
     617                                struct twitter_xml_status *txs, const char *prefix) {
     618        gchar * format = set_getstr(&ic->acc->set, "format_string");
     619        GString * text = g_string_new(NULL);
     620
     621        gchar *c;
     622        if (reply_to != -1)
     623                format = set_getstr(&ic->acc->set, "reply_format_string");
     624        if (txs->rt)
     625                format = set_getstr(&ic->acc->set, "retweet_format_string");
     626
     627        for (c = format; *c ; c++) {
     628                if (!(*c == '%' && *(c+1))) {
     629                        text = g_string_append_c(text, *c);
     630                        continue;
     631                }
     632                c++; // Move past the %
     633                switch (*c) {
     634                        case 'i':
     635                                g_string_append_printf(text, "%02x", log_id);
     636                                break;
     637                        case 'r':
     638                                if (reply_to != -1) // In case someone does put %r in the wrong format_string
     639                                g_string_append_printf(text, "%02x", reply_to);
     640                                break;
     641                        case 'a':
     642                                if (txs->rt) // In case someone does put %a in the wrong format_string
     643                                        text = g_string_append(text, txs->rt->user->screen_name);
     644                                break;
     645                        case 'c':
     646                                text = g_string_append(text, txs->text);
     647                                break;
     648                        default:
     649                                text = g_string_append_c(text, *c);
     650                }
     651        }
     652        text = g_string_prepend(text, prefix);
     653        return g_string_free(text, FALSE);
     654}
     655
    611656/* Will log messages either way. Need to keep track of IDs for stream deduping.
    612657   Plus, show_ids is on by default and I don't see why anyone would disable it. */
     
    647692                td->log[td->log_id].id = txs->rt_id;
    648693       
    649         if (set_getbool(&ic->acc->set, "show_ids")) {
    650                 if (reply_to != -1)
    651                         return g_strdup_printf("\002[\002%02x->%02x\002]\002 %s%s",
    652                                                td->log_id, reply_to, prefix, txs->text);
    653                 else
    654                         return g_strdup_printf("\002[\002%02x\002]\002 %s%s",
    655                                                td->log_id, prefix, txs->text);
    656         } else {
    657                 if (*prefix)
    658                         return g_strconcat(prefix, txs->text, NULL);
    659                 else
    660                         return NULL;
    661         }
     694        return twitter_msg_get_text(ic, td->log_id, reply_to, txs, prefix);
    662695}
    663696
Note: See TracChangeset for help on using the changeset viewer.