summaryrefslogtreecommitdiff
path: root/src/bridge/bridge.cpp
diff options
context:
space:
mode:
authorFlorent Le Coz <louiz@louiz.org>2013-11-22 21:00:32 +0100
committerFlorent Le Coz <louiz@louiz.org>2013-11-28 01:18:26 +0100
commite6f20d3c0fd4ba8696a4410a366741c9b9f3562d (patch)
tree0b34e42163fcb2b869e74fa11c4fb18cf5226b89 /src/bridge/bridge.cpp
parent31e18e49b699f606a8aeb1f529642a004781e704 (diff)
downloadbiboumi-e6f20d3c0fd4ba8696a4410a366741c9b9f3562d.tar.gz
biboumi-e6f20d3c0fd4ba8696a4410a366741c9b9f3562d.tar.bz2
biboumi-e6f20d3c0fd4ba8696a4410a366741c9b9f3562d.tar.xz
biboumi-e6f20d3c0fd4ba8696a4410a366741c9b9f3562d.zip
Implement IRC format to xhtml-im conversion
The generated XML is very verbose because each IRC formatting tag makes us close a <span/> element and reopen it with the new style applied. However, this works quite well and is easy to implement.
Diffstat (limited to 'src/bridge/bridge.cpp')
-rw-r--r--src/bridge/bridge.cpp26
1 files changed, 11 insertions, 15 deletions
diff --git a/src/bridge/bridge.cpp b/src/bridge/bridge.cpp
index e08e2a4..7e6f801 100644
--- a/src/bridge/bridge.cpp
+++ b/src/bridge/bridge.cpp
@@ -21,14 +21,14 @@ Bridge::~Bridge()
{
}
-std::string Bridge::sanitize_for_xmpp(const std::string& str)
+Xmpp::body Bridge::make_xmpp_body(const std::string& str)
{
std::string res;
if (utils::is_valid_utf8(str.c_str()))
res = str;
else
res = utils::convert_to_utf8(str, "ISO-8859-1");
- return res;
+ return irc_format_to_xhtmlim(res);
}
IrcClient* Bridge::get_irc_client(const std::string& hostname, const std::string& username)
@@ -102,7 +102,8 @@ void Bridge::send_channel_message(const Iid& iid, const std::string& body)
irc->send_channel_message(iid.chan, *it);
// We do not need to convert body to utf-8: it comes from our XMPP server,
// so it's ok to send it back
- this->xmpp->send_muc_message(iid.chan + "%" + iid.server, irc->get_own_nick(), body, this->user_jid);
+ this->xmpp->send_muc_message(iid.chan + "%" + iid.server, irc->get_own_nick(),
+ this->make_xmpp_body(body), this->user_jid);
}
void Bridge::send_private_message(const Iid& iid, const std::string& body)
@@ -137,22 +138,17 @@ void Bridge::send_irc_kick(const Iid& iid, const std::string& target, const std:
void Bridge::send_message(const Iid& iid, const std::string& nick, const std::string& body, const bool muc)
{
- std::string utf8_body = this->sanitize_for_xmpp(body);
- if (utf8_body.substr(0, action_prefix_len) == action_prefix)
- { // Special case for ACTION (/me) messages:
- // "\01ACTION goes out\01" == "/me goes out"
- utf8_body = std::string("/me ") +
- utf8_body.substr(action_prefix_len, utf8_body.size() - action_prefix_len - 1);
- }
if (muc)
- this->xmpp->send_muc_message(iid.chan + "%" + iid.server, nick, utf8_body, this->user_jid);
+ this->xmpp->send_muc_message(iid.chan + "%" + iid.server, nick,
+ this->make_xmpp_body(body), this->user_jid);
else
- this->xmpp->send_message(iid.chan + "%" + iid.server, utf8_body, this->user_jid);
+ this->xmpp->send_message(iid.chan + "%" + iid.server,
+ this->make_xmpp_body(body), this->user_jid);
}
void Bridge::send_muc_leave(Iid&& iid, std::string&& nick, const std::string& message, const bool self)
{
- this->xmpp->send_muc_leave(std::move(iid.chan) + "%" + std::move(iid.server), std::move(nick), this->sanitize_for_xmpp(message), this->user_jid, self);
+ this->xmpp->send_muc_leave(std::move(iid.chan) + "%" + std::move(iid.server), std::move(nick), this->make_xmpp_body(message), this->user_jid, self);
}
void Bridge::send_nick_change(Iid&& iid, const std::string& old_nick, const std::string& new_nick, const bool self)
@@ -168,7 +164,7 @@ void Bridge::send_xmpp_message(const std::string& from, const std::string& autho
body = std::string("[") + author + std::string("] ") + msg;
else
body = msg;
- this->xmpp->send_message(from, this->sanitize_for_xmpp(body), this->user_jid);
+ this->xmpp->send_message(from, this->make_xmpp_body(body), this->user_jid);
}
void Bridge::send_user_join(const std::string& hostname, const std::string& chan_name, const std::string nick)
@@ -183,7 +179,7 @@ void Bridge::send_self_join(const std::string& hostname, const std::string& chan
void Bridge::send_topic(const std::string& hostname, const std::string& chan_name, const std::string topic)
{
- this->xmpp->send_topic(chan_name + "%" + hostname, this->sanitize_for_xmpp(topic), this->user_jid);
+ this->xmpp->send_topic(chan_name + "%" + hostname, this->make_xmpp_body(topic), this->user_jid);
}
std::string Bridge::get_own_nick(const Iid& iid)