Skip to content

Commit

Permalink
Moved recode functions to network layer.
Browse files Browse the repository at this point in the history
Bugfix with unicode locale nickname width calculation.
Bugfix with indent setting.
  • Loading branch information
m1el@ya.ru committed Mar 27, 2012
1 parent 48035ab commit 6f8f2b4
Show file tree
Hide file tree
Showing 12 changed files with 89 additions and 169 deletions.
Empty file modified src/core/misc.c
Whitespace-only changes.
1 change: 0 additions & 1 deletion src/core/settings.c
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,6 @@
#include "misc.h"

#include "lib-config/iconfig.h"
#include "recode.h"
#include "settings.h"
#include "default-config.h"

Expand Down
13 changes: 9 additions & 4 deletions src/fe-common/core/fe-channels.c
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@
#include "fe-channels.h"
#include "window-items.h"
#include "printtext.h"
#include <wchar.h>

static void signal_channel_created(CHANNEL_REC *channel, void *automatic)
{
Expand Down Expand Up @@ -322,7 +323,10 @@ static void cmd_channel_remove(const char *data)

static int get_nick_length(void *data)
{
return strlen(((NICK_REC *) data)->nick);
const size_t maxlen = 510;
wchar_t wnick[maxlen];
size_t len = mbstowcs(wnick, ((NICK_REC*)data)->nick, maxlen);
return wcswidth(wnick, len);
}

static void display_sorted_nicks(CHANNEL_REC *channel, GSList *nicklist)
Expand Down Expand Up @@ -393,7 +397,7 @@ static void display_sorted_nicks(CHANNEL_REC *channel, GSList *nicklist)
last_col_rows = rows;

str = g_string_new(prefix_format);
linebuf_size = max_width+1; linebuf = g_malloc(linebuf_size);
linebuf_size = max_width*4+1; linebuf = g_malloc(linebuf_size);

col = 0; row = 0;
for (tmp = nicklist; tmp != NULL; tmp = tmp->next) {
Expand All @@ -408,8 +412,9 @@ static void display_sorted_nicks(CHANNEL_REC *channel, GSList *nicklist)
linebuf_size = (columns[col]-item_extra+1)*2;
linebuf = g_realloc(linebuf, linebuf_size);
}
memset(linebuf, ' ', columns[col]-item_extra);
linebuf[columns[col]-item_extra] = '\0';
int byte_len = (columns[col] - item_extra) + strlen(rec->nick) - get_nick_length(rec);
memset(linebuf, ' ', byte_len);
linebuf[byte_len] = '\0';
memcpy(linebuf, rec->nick, strlen(rec->nick));

formatnum = rec->op ? TXT_NAMES_NICK_OP :
Expand Down
25 changes: 8 additions & 17 deletions src/fe-common/irc/fe-events-numeric.c
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,6 @@
#include "misc.h"
#include "settings.h"
#include "levels.h"
#include "recode.h"

#include "irc-servers.h"
#include "irc-channels.h"
Expand Down Expand Up @@ -106,7 +105,7 @@ static void event_end_of_names(IRC_SERVER_REC *server, const char *data,
static void event_who(IRC_SERVER_REC *server, const char *data)
{
char *params, *nick, *channel, *user, *host, *stat, *realname, *hops;
char *serv, *recoded;
char *serv;

g_return_if_fail(data != NULL);

Expand All @@ -119,12 +118,10 @@ static void event_who(IRC_SERVER_REC *server, const char *data)
if (*realname == ' ')
*realname++ = '\0';

recoded = recode_in(SERVER(server), realname, nick);
printformat(server, NULL, MSGLEVEL_CRAP, IRCTXT_WHO,
channel, nick, stat, hops, user, host, recoded, serv);
channel, nick, stat, hops, user, host, realname, serv);

g_free(params);
g_free(recoded);
}

static void event_end_of_who(IRC_SERVER_REC *server, const char *data)
Expand Down Expand Up @@ -249,17 +246,15 @@ static void event_nick_in_use(IRC_SERVER_REC *server, const char *data)
static void event_topic_get(IRC_SERVER_REC *server, const char *data)
{
const char *channel;
char *params, *topic, *recoded;
char *params, *topic;

g_return_if_fail(data != NULL);

params = event_get_params(data, 3, NULL, &channel, &topic);
recoded = recode_in(SERVER(server), topic, channel);
channel = get_visible_target(server, channel);
printformat(server, channel, MSGLEVEL_CRAP,
IRCTXT_TOPIC, channel, recoded);
IRCTXT_TOPIC, channel, topic);
g_free(params);
g_free(recoded);
}

static void event_topic_info(IRC_SERVER_REC *server, const char *data)
Expand Down Expand Up @@ -329,12 +324,11 @@ static void event_unaway(IRC_SERVER_REC *server, const char *data)

static void event_away(IRC_SERVER_REC *server, const char *data)
{
char *params, *nick, *awaymsg, *recoded;
char *params, *nick, *awaymsg;

g_return_if_fail(data != NULL);

params = event_get_params(data, 3, NULL, &nick, &awaymsg);
recoded = recode_in(SERVER(server), awaymsg, nick);
if (!settings_get_bool("show_away_once") ||
last_away_nick == NULL || g_strcasecmp(last_away_nick, nick) != 0 ||
last_away_msg == NULL || g_strcasecmp(last_away_msg, awaymsg) != 0) {
Expand All @@ -346,10 +340,9 @@ static void event_away(IRC_SERVER_REC *server, const char *data)
last_away_msg = g_strdup(awaymsg);

printformat(server, nick, MSGLEVEL_CRAP,
IRCTXT_NICK_AWAY, nick, recoded);
IRCTXT_NICK_AWAY, nick, awaymsg);
}
g_free(params);
g_free(recoded);
}

static void event_userhost(IRC_SERVER_REC *server, const char *data)
Expand Down Expand Up @@ -570,7 +563,7 @@ static void event_numeric(IRC_SERVER_REC *server, const char *data,
static void print_event_received(IRC_SERVER_REC *server, const char *data,
const char *nick, int target_param)
{
char *target, *args, *ptr, *ptr2, *recoded;
char *target, *args, *ptr, *ptr2;
int format;

g_return_if_fail(data != NULL);
Expand Down Expand Up @@ -601,14 +594,12 @@ static void print_event_received(IRC_SERVER_REC *server, const char *data,
g_memmove(ptr+1, ptr+2, strlen(ptr+1));
}

recoded = recode_in(SERVER(server), args, NULL);
format = nick == NULL || server->real_address == NULL ||
strcmp(nick, server->real_address) == 0 ?
IRCTXT_DEFAULT_EVENT : IRCTXT_DEFAULT_EVENT_SERVER;
printformat(server, target, MSGLEVEL_CRAP, format,
nick, recoded, current_server_event);
nick, args, current_server_event);

g_free(recoded);
g_free(args);
g_free(target);
}
Expand Down
44 changes: 13 additions & 31 deletions src/fe-common/irc/fe-events.c
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,6 @@
#include "servers-reconnect.h"
#include "queries.h"
#include "ignore.h"
#include "recode.h"

#include "irc-servers.h"
#include "irc-channels.h"
Expand All @@ -45,7 +44,7 @@
static void event_privmsg(IRC_SERVER_REC *server, const char *data,
const char *nick, const char *addr)
{
char *params, *target, *msg, *recoded;
char *params, *target, *msg;

g_return_if_fail(data != NULL);

Expand All @@ -54,55 +53,47 @@ static void event_privmsg(IRC_SERVER_REC *server, const char *data,
if (addr == NULL) addr = "";
if (*target == '@' && ischannel(target[1])) {
/* Hybrid 6 feature, send msg to all ops in channel */
recoded = recode_in(SERVER(server), msg, target+1);
signal_emit("message irc op_public", 5,
server, recoded, nick, addr,
server, msg, nick, addr,
get_visible_target(server, target+1));
} else {
recoded = recode_in(SERVER(server), msg, ischannel(*target) ? target : nick);
signal_emit(ischannel(*target) ?
"message public" : "message private", 5,
server, recoded, nick, addr,
server, msg, nick, addr,
get_visible_target(server, target));
}

g_free(params);
g_free(recoded);
}

static void ctcp_action(IRC_SERVER_REC *server, const char *data,
const char *nick, const char *addr,
const char *target)
{
char *recoded;

g_return_if_fail(data != NULL);
recoded = recode_in(SERVER(server), data, target);
signal_emit("message irc action", 5,
server, recoded, nick, addr,
server, data, nick, addr,
get_visible_target(server, target));
g_free(recoded);
}

static void event_notice(IRC_SERVER_REC *server, const char *data,
const char *nick, const char *addr)
{
char *params, *target, *msg, *recoded;
char *params, *target, *msg;

g_return_if_fail(data != NULL);

params = event_get_params(data, 2 | PARAM_FLAG_GETREST, &target, &msg);
recoded = recode_in(SERVER(server), msg, target);
if (nick == NULL) {
nick = server->real_address == NULL ?
server->connrec->address :
server->real_address;
}

signal_emit("message irc notice", 5, server, recoded, nick, addr,
signal_emit("message irc notice", 5, server, msg, nick, addr,
get_visible_target(server, target));
g_free(params);
g_free(recoded);
}

static void event_join(IRC_SERVER_REC *server, const char *data,
Expand All @@ -124,47 +115,40 @@ static void event_join(IRC_SERVER_REC *server, const char *data,
static void event_part(IRC_SERVER_REC *server, const char *data,
const char *nick, const char *addr)
{
char *params, *channel, *reason, *recoded;
char *params, *channel, *reason;

g_return_if_fail(data != NULL);

params = event_get_params(data, 2 | PARAM_FLAG_GETREST,
&channel, &reason);
recoded = recode_in(SERVER(server), reason, channel);
signal_emit("message part", 5, server,
get_visible_target(server, channel), nick, addr, recoded);
get_visible_target(server, channel), nick, addr, reason);
g_free(params);
g_free(recoded);
}

static void event_quit(IRC_SERVER_REC *server, const char *data,
const char *nick, const char *addr)
{
char *recoded;

g_return_if_fail(data != NULL);

if (*data == ':') data++; /* quit message */
recoded = recode_in(SERVER(server), data, nick);
signal_emit("message quit", 4, server, nick, addr, recoded);
g_free(recoded);
signal_emit("message quit", 4, server, nick, addr, data);
}

static void event_kick(IRC_SERVER_REC *server, const char *data,
const char *kicker, const char *addr)
{
char *params, *channel, *nick, *reason, *recoded;
char *params, *channel, *nick, *reason;

g_return_if_fail(data != NULL);

params = event_get_params(data, 3 | PARAM_FLAG_GETREST,
&channel, &nick, &reason);
recoded = recode_in(SERVER(server), reason, channel);
signal_emit("message kick", 6,
server, get_visible_target(server, channel),
nick, kicker, addr, recoded);
nick, kicker, addr, reason);
g_free(params);
g_free(recoded);
}

static void event_kill(IRC_SERVER_REC *server, const char *data,
Expand Down Expand Up @@ -260,17 +244,15 @@ static void event_invite(IRC_SERVER_REC *server, const char *data,
static void event_topic(IRC_SERVER_REC *server, const char *data,
const char *nick, const char *addr)
{
char *params, *channel, *topic, *recoded;
char *params, *channel, *topic;

g_return_if_fail(data != NULL);

params = event_get_params(data, 2 | PARAM_FLAG_GETREST,
&channel, &topic);
recoded = recode_in(SERVER(server), topic, channel);
signal_emit("message topic", 5, server,
get_visible_target(server, channel), recoded, nick, addr);
get_visible_target(server, channel), topic, nick, addr);
g_free(params);
g_free(recoded);
}

static void event_error(IRC_SERVER_REC *server, const char *data)
Expand Down
25 changes: 8 additions & 17 deletions src/fe-common/irc/fe-whois.c
Original file line number Diff line number Diff line change
Expand Up @@ -6,25 +6,22 @@
#include "levels.h"
#include "misc.h"
#include "settings.h"
#include "recode.h"

#include "irc-servers.h"

#include "printtext.h"

static void event_whois(IRC_SERVER_REC *server, const char *data)
{
char *params, *nick, *user, *host, *realname, *recoded;
char *params, *nick, *user, *host, *realname;

g_return_if_fail(data != NULL);

params = event_get_params(data, 6, NULL, &nick, &user,
&host, NULL, &realname);
recoded = recode_in(SERVER(server), realname, nick);
printformat(server, nick, MSGLEVEL_CRAP,
IRCTXT_WHOIS, nick, user, host, recoded);
IRCTXT_WHOIS, nick, user, host, realname);
g_free(params);
g_free(recoded);
}

static void event_whois_special(IRC_SERVER_REC *server, const char *data)
Expand Down Expand Up @@ -278,7 +275,7 @@ static void hide_safe_channel_id(IRC_SERVER_REC *server, char *chans)

static void event_whois_channels(IRC_SERVER_REC *server, const char *data)
{
char *params, *nick, *chans, *recoded;
char *params, *nick, *chans;

g_return_if_fail(data != NULL);

Expand All @@ -291,27 +288,23 @@ static void event_whois_channels(IRC_SERVER_REC *server, const char *data)
chans = show_lowascii(chans);
if (settings_get_bool("whois_hide_safe_channel_id"))
hide_safe_channel_id(server, chans);
recoded = recode_in(SERVER(server), chans, nick);
printformat(server, nick, MSGLEVEL_CRAP,
IRCTXT_WHOIS_CHANNELS, nick, recoded);
IRCTXT_WHOIS_CHANNELS, nick, chans);
g_free(chans);

g_free(params);
g_free(recoded);
}

static void event_whois_away(IRC_SERVER_REC *server, const char *data)
{
char *params, *nick, *awaymsg, *recoded;
char *params, *nick, *awaymsg;

g_return_if_fail(data != NULL);

params = event_get_params(data, 3, NULL, &nick, &awaymsg);
recoded = recode_in(SERVER(server), awaymsg, nick);
printformat(server, nick, MSGLEVEL_CRAP,
IRCTXT_WHOIS_AWAY, nick, recoded);
IRCTXT_WHOIS_AWAY, nick, awaymsg);
g_free(params);
g_free(recoded);
}

static void event_end_of_whois(IRC_SERVER_REC *server, const char *data)
Expand Down Expand Up @@ -342,17 +335,15 @@ static void event_whois_auth(IRC_SERVER_REC *server, const char *data)

static void event_whowas(IRC_SERVER_REC *server, const char *data)
{
char *params, *nick, *user, *host, *realname, *recoded;
char *params, *nick, *user, *host, *realname;

g_return_if_fail(data != NULL);

params = event_get_params(data, 6, NULL, &nick, &user,
&host, NULL, &realname);
recoded = recode_in(SERVER(server), realname, nick);
printformat(server, nick, MSGLEVEL_CRAP,
IRCTXT_WHOWAS, nick, user, host, recoded);
IRCTXT_WHOWAS, nick, user, host, realname);
g_free(params);
g_free(recoded);
}

static void event_end_of_whowas(IRC_SERVER_REC *server, const char *data)
Expand Down
Loading

0 comments on commit 6f8f2b4

Please sign in to comment.