diff options
author | dequis <dx@dxzone.com.ar> | 2015-11-15 19:10:19 -0300 |
---|---|---|
committer | dequis <dx@dxzone.com.ar> | 2015-11-15 20:19:13 -0300 |
commit | 0d8a9bb00abe74164cd643e003f4285a299d62a5 (patch) | |
tree | cb31aa8567d2cb191067c8590cb4c27913b8caa1 | |
parent | d6e2aa8220ae87c58c10ff54b2de80e32b51ac08 (diff) |
irc_send_whois: Refactor out a get_status_message() function
Because i'm going to use it elsewhere.
-rw-r--r-- | irc_send.c | 45 |
1 files changed, 35 insertions, 10 deletions
@@ -247,6 +247,32 @@ void irc_send_topic(irc_channel_t *ic, gboolean topic_change) } } +/* msg1 and msg2 are output parameters. If msg2 is non-null, msg1 is guaranteed to be non-null too. + The idea is to defer the formatting of "$msg1 ($msg2)" to later calls to avoid a g_strdup_printf() here. */ +static void get_status_message(bee_user_t *bu, char **msg1, char **msg2) +{ + *msg1 = NULL; + *msg2 = NULL; + + if (!(bu->flags & BEE_USER_ONLINE)) { + *msg1 = "User is offline"; + + } else if ((bu->status && *bu->status) || + (bu->status_msg && *bu->status_msg)) { + + if (bu->status && bu->status_msg) { + *msg1 = bu->status; + *msg2 = bu->status_msg; + } else { + *msg1 = bu->status ? : bu->status_msg; + } + } + + if (*msg1 && !**msg1) { + *msg1 = (bu->flags & BEE_USER_AWAY) ? "Away" : NULL; + } +} + void irc_send_whois(irc_user_t *iu) { irc_t *irc = iu->irc; @@ -256,22 +282,21 @@ void irc_send_whois(irc_user_t *iu) if (iu->bu) { bee_user_t *bu = iu->bu; + char *msg1, *msg2; + int num; irc_send_num(irc, 312, "%s %s.%s :%s network", iu->nick, bu->ic->acc->user, bu->ic->acc->server && *bu->ic->acc->server ? bu->ic->acc->server : "", bu->ic->acc->prpl->name); - if ((bu->status && *bu->status) || - (bu->status_msg && *bu->status_msg)) { - int num = bu->flags & BEE_USER_AWAY ? 301 : 320; + num = (bu->flags & BEE_USER_AWAY || !(bu->flags & BEE_USER_ONLINE)) ? 301 : 320; - if (bu->status && bu->status_msg) { - irc_send_num(irc, num, "%s :%s (%s)", iu->nick, bu->status, bu->status_msg); - } else { - irc_send_num(irc, num, "%s :%s", iu->nick, bu->status ? : bu->status_msg); - } - } else if (!(bu->flags & BEE_USER_ONLINE)) { - irc_send_num(irc, 301, "%s :%s", iu->nick, "User is offline"); + get_status_message(bu, &msg1, &msg2); + + if (msg1 && msg2) { + irc_send_num(irc, num, "%s :%s (%s)", iu->nick, msg1, msg2); + } else if (msg1) { + irc_send_num(irc, num, "%s :%s", iu->nick, msg1); } if (bu->idle_time || bu->login_time) { |