/***************************************************************************
- * Copyright (C) 2005-2016 by the Quassel Project *
+ * Copyright (C) 2005-2018 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
// ====================
// Public Slots
// ====================
-void CoreUserInputHandler::handleAway(const BufferInfo &bufferInfo, const QString &msg)
+void CoreUserInputHandler::handleAway(const BufferInfo &bufferInfo, const QString &msg,
+ const bool skipFormatting)
{
Q_UNUSED(bufferInfo)
if (msg.startsWith("-all")) {
if (msg.length() == 4) {
- coreSession()->globalAway();
+ coreSession()->globalAway(QString(), skipFormatting);
return;
}
Q_ASSERT(msg.length() > 4);
if (msg[4] == ' ') {
- coreSession()->globalAway(msg.mid(5));
+ coreSession()->globalAway(msg.mid(5), skipFormatting);
return;
}
}
- issueAway(msg);
+ issueAway(msg, true /* force away */, skipFormatting);
}
-void CoreUserInputHandler::issueAway(const QString &msg, bool autoCheck)
+void CoreUserInputHandler::issueAway(const QString &msg, bool autoCheck, const bool skipFormatting)
{
QString awayMsg = msg;
IrcUser *me = network()->me();
+ // Only apply timestamp formatting when requested
+ // This avoids re-processing any existing away message when the core restarts, so chained escape
+ // percent signs won't get down-processed.
+ if (!skipFormatting) {
+ // Apply the timestamp formatting to the away message (if empty, nothing will happen)
+ awayMsg = formatCurrentDateTimeInString(awayMsg);
+ }
+
// if there is no message supplied we have to check if we are already away or not
if (autoCheck && msg.isEmpty()) {
if (me && !me->isAway()) {
Identity *identity = network()->identityPtr();
if (identity) {
- awayMsg = identity->awayReason();
+ awayMsg = formatCurrentDateTimeInString(identity->awayReason());
}
if (awayMsg.isEmpty()) {
awayMsg = tr("away");
QStringList messages = msg.split(QCharLF);
foreach (auto message, messages) {
- // Handle each separated message independently, ignoring any carriage returns
- message = message.trimmed();
+ // Handle each separated message independently
coreNetwork()->coreSession()->ctcpParser()->query(coreNetwork(), bufferInfo.bufferName(),
"ACTION", message);
emit displayMsg(Message::Action, bufferInfo.type(), bufferInfo.bufferName(), message,
Q_UNUSED(bufferInfo)
QStringList params = msg.split(' ', QString::SkipEmptyParts);
- // if the first argument is neither a channel nor us (user modes are only to oneself) the current buffer is assumed to be the target
if (!params.isEmpty()) {
- if (!network()->isChannelName(params[0]) && !network()->isMyNick(params[0]))
- params.prepend(bufferInfo.bufferName());
- if (network()->isMyNick(params[0]) && params.count() == 2)
- network()->updateIssuedModes(params[1]);
if (params[0] == "-reset" && params.count() == 1) {
- // FIXME: give feedback to the user (I don't want to add new strings right now)
network()->resetPersistentModes();
+ emit displayMsg(Message::Info, BufferInfo::StatusBuffer, "",
+ tr("Your persistent modes have been reset."));
return;
}
+ if (!network()->isChannelName(params[0]) && !network()->isMyNick(params[0]))
+ // If the first argument is neither a channel nor us (user modes are only to oneself)
+ // the current buffer is assumed to be the target.
+ // If the current buffer returns no name (e.g. status buffer), assume target is us.
+ params.prepend(!bufferInfo.bufferName().isEmpty() ?
+ bufferInfo.bufferName() : network()->myNick());
+ if (network()->isMyNick(params[0]) && params.count() == 2)
+ network()->updateIssuedModes(params[1]);
}
// TODO handle correct encoding for buffer modes (channelEncode())
QStringList messages = msg.section(' ', 1).split(QCharLF);
foreach (auto message, messages) {
- // Handle each separated message independently, ignoring any carriage returns
- message = message.trimmed();
+ // Handle each separated message independently
params.clear();
params << serverEncode(bufferName) << channelEncode(bufferInfo.bufferName(), message);
emit putCmd("NOTICE", params);
QStringList messages = msg.section(' ', 1).split(QCharLF);
foreach (auto message, messages) {
- // Handle each separated message independently, ignoring any carriage returns
- message = message.trimmed();
+ // Handle each separated message independently
if (message.isEmpty()) {
emit displayMsg(Message::Server, BufferInfo::QueryBuffer, target,
tr("Starting query with %1").arg(target), network()->myNick(),
// Split apart messages at line feeds. The IRC protocol uses those to separate commands, so
// they need to be split into multiple messages.
- QStringList messages = msg.split(QCharLF);
+ QStringList messages = msg.split(QCharLF, QString::SkipEmptyParts);
foreach (auto message, messages) {
- // Handle each separated message independently, ignoring any carriage returns
- message = message.trimmed();
+ // Handle each separated message independently
#ifdef HAVE_QCA2
putPrivmsg(bufferInfo.bufferName(), message, encodeFunc,
network()->cipher(bufferInfo.bufferName()));