diff options
author | William Pettersson <william.pettersson@gmail.com> | 2015-01-11 15:08:37 +1000 |
---|---|---|
committer | dequis <dx@dxzone.com.ar> | 2015-01-26 04:50:54 -0300 |
commit | ce402b20d82ec323e6bd5e306de934773590742d (patch) | |
tree | 10e545944b9602a53300e97354f011395d2b0afd | |
parent | dfaa46d37c5a71e7d8c413c7c9714db854b8b559 (diff) |
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
-rw-r--r-- | doc/user-guide/commands.xml | 62 | ||||
-rw-r--r-- | protocols/twitter/twitter.c | 4 | ||||
-rw-r--r-- | protocols/twitter/twitter_lib.c | 63 |
3 files changed, 114 insertions, 15 deletions
diff --git a/doc/user-guide/commands.xml b/doc/user-guide/commands.xml index 6ce19774..b840350c 100644 --- a/doc/user-guide/commands.xml +++ b/doc/user-guide/commands.xml @@ -1090,6 +1090,68 @@ </bitlbee-setting> + <bitlbee-setting name="format_string" type="string" scope="account"> + <default>^B[^B%i^B]^B %c</default> + + <description> + <para> + This setting controls how tweets are displayed. Below are listed the two replacement attributes you may use in the string. If you wish to use a percent symbol in your string, ensure you escape it with a second percent symbol (i.e. "%%"). + </para> + + <para> + The default setting contains ^B as a control code for toggling of the bold property. Other similar properties (including color codes) are also functional in this setting. See the documentation for your IRC client for details on such control codes. + </para> + + <variablelist> + <varlistentry><term>%i</term><listitem><para>The ID of the tweet</para></listitem></varlistentry> + <varlistentry><term>%c</term><listitem><para>The text of the tweet</para></listitem></varlistentry> + </variablelist> + </description> + + </bitlbee-setting> + + <bitlbee-setting name="reply_format_string" type="string" scope="account"> + <default>^B[^B%i->%t^B]^B %c</default> + + <description> + <para> + This setting controls how replies to tweets are displayed. Below are listed the three replacement attributes you may use in the string. If you wish to use a percent symbol in your string, ensure you escape it with a second percent symbol (i.e. "%%"). + </para> + + <para> + The default setting contains ^B as a control code for toggling of the bold property. Other similar properties (including color codes) are also functional in this setting. See the documentation for your IRC client for details on such control codes. + </para> + + <variablelist> + <varlistentry><term>%i</term><listitem><para>The ID of this tweet</para></listitem></varlistentry> + <varlistentry><term>%r</term><listitem><para>The ID of the tweet being replied to</para></listitem></varlistentry> + <varlistentry><term>%c</term><listitem><para>The text of the tweet</para></listitem></varlistentry> + </variablelist> + </description> + + </bitlbee-setting> + + <bitlbee-setting name="retweet_format_string" type="string" scope="account"> + <default>^B[^B%i^B]^B RT @%a: %c</default> + + <description> + <para> + This setting controls how retweets are displayed. Below are listed the three replacement attributes you may use in the string. If you wish to use a percent symbol in your string, ensure you escape it with a second percent symbol (i.e. "%%"). + </para> + + <para> + The default setting contains ^B as a control code for toggling of the bold property. Other similar properties (including color codes) are also functional in this setting. See the documentation for your IRC client for details on such control codes. + </para> + + <variablelist> + <varlistentry><term>%i</term><listitem><para>The ID of the tweet</para></listitem></varlistentry> + <varlistentry><term>%a</term><listitem><para>The author of the original tweet</para></listitem></varlistentry> + <varlistentry><term>%c</term><listitem><para>The text of the tweet</para></listitem></varlistentry> + </variablelist> + </description> + + </bitlbee-setting> + <bitlbee-setting name="mobile_is_away" type="boolean" scope="global"> <default>false</default> diff --git a/protocols/twitter/twitter.c b/protocols/twitter/twitter.c index eb30187f..8f5dc168 100644 --- a/protocols/twitter/twitter.c +++ b/protocols/twitter/twitter.c @@ -538,6 +538,10 @@ static void twitter_init(account_t * acc) s = set_add(&acc->set, "show_old_mentions", "0", set_eval_int, acc); s = set_add(&acc->set, "strip_newlines", "false", set_eval_bool, acc); + + s = set_add(&acc->set, "format_string", "\002[\002%i\002]\002 %c", NULL, acc); + s = set_add(&acc->set, "retweet_format_string", "\002[\002%i\002]\002 RT @%a: %c", NULL, acc); + s = set_add(&acc->set, "reply_format_string", "\002[\002%i->%r\002]\002 %c", NULL, acc); s = set_add(&acc->set, "_last_tweet", "0", NULL, acc); s->flags |= SET_HIDDEN | SET_NOSAVE; diff --git a/protocols/twitter/twitter_lib.c b/protocols/twitter/twitter_lib.c index c8956606..b827a139 100644 --- a/protocols/twitter/twitter_lib.c +++ b/protocols/twitter/twitter_lib.c @@ -62,6 +62,7 @@ struct twitter_xml_status { guint64 id, rt_id; /* Usually equal, with RTs id == *original* id */ guint64 reply_to; gboolean from_filter; + struct twitter_xml_status *rt; }; /** @@ -87,6 +88,7 @@ static void txs_free(struct twitter_xml_status *txs) g_free(txs->text); txu_free(txs->user); + txs_free(txs->rt); g_free(txs); } @@ -488,9 +490,9 @@ static struct twitter_xml_status *twitter_xt_get_status(const json_value *node) struct twitter_xml_status *rtxs = twitter_xt_get_status(rt); if (rtxs) { g_free(txs->text); - txs->text = g_strdup_printf("RT @%s: %s", rtxs->user->screen_name, rtxs->text); + txs->text = g_strdup(rtxs->text); txs->id = rtxs->id; - txs_free(rtxs); + txs->rt = rtxs; } } else if (entities) { txs->text = expand_entities(txs->text, entities); @@ -608,6 +610,49 @@ static gboolean twitter_xt_get_status_list(struct im_connection *ic, const json_ return TRUE; } +/** + * Function to properly format a tweet as per the users configuration. + */ +static char *twitter_msg_get_text(struct im_connection *ic, int log_id, int reply_to, + struct twitter_xml_status *txs, const char *prefix) { + gchar * format = set_getstr(&ic->acc->set, "format_string"); + GString * text = g_string_new(NULL); + + gchar *c; + if (reply_to != -1) + format = set_getstr(&ic->acc->set, "reply_format_string"); + if (txs->rt) + format = set_getstr(&ic->acc->set, "retweet_format_string"); + + for (c = format; *c ; c++) { + if (!(*c == '%' && *(c+1))) { + text = g_string_append_c(text, *c); + continue; + } + c++; // Move past the % + switch (*c) { + case 'i': + g_string_append_printf(text, "%02x", log_id); + break; + case 'r': + if (reply_to != -1) // In case someone does put %r in the wrong format_string + g_string_append_printf(text, "%02x", reply_to); + break; + case 'a': + if (txs->rt) // In case someone does put %a in the wrong format_string + text = g_string_append(text, txs->rt->user->screen_name); + break; + case 'c': + text = g_string_append(text, txs->text); + break; + default: + text = g_string_append_c(text, *c); + } + } + text = g_string_prepend(text, prefix); + return g_string_free(text, FALSE); +} + /* Will log messages either way. Need to keep track of IDs for stream deduping. Plus, show_ids is on by default and I don't see why anyone would disable it. */ static char *twitter_msg_add_id(struct im_connection *ic, @@ -646,19 +691,7 @@ static char *twitter_msg_add_id(struct im_connection *ic, if (g_strcasecmp(txs->user->screen_name, td->user) == 0) td->log[td->log_id].id = txs->rt_id; - if (set_getbool(&ic->acc->set, "show_ids")) { - if (reply_to != -1) - return g_strdup_printf("\002[\002%02x->%02x\002]\002 %s%s", - td->log_id, reply_to, prefix, txs->text); - else - return g_strdup_printf("\002[\002%02x\002]\002 %s%s", - td->log_id, prefix, txs->text); - } else { - if (*prefix) - return g_strconcat(prefix, txs->text, NULL); - else - return NULL; - } + return twitter_msg_get_text(ic, td->log_id, reply_to, txs, prefix); } /** |