On the core, detect when changes apply to our own nick and flag the
message as Self.
On the client, work around old nick change messages lacking the Self
flag. Working around the other messages would be more difficult.
This fixes nick change styling not correctly applying for
"sender=self" in themes.
if (net->isMe(ircuser)) {
net->setChannelJoined(channel);
if (net->isMe(ircuser)) {
net->setChannelJoined(channel);
+ // Mark the message as Self
+ e->setFlag(EventManager::Self);
// FIXME use event
net->putRawLine(net->serverEncode("MODE " + channel)); // we want to know the modes of the channel we just joined, so we ask politely
}
// FIXME use event
net->putRawLine(net->serverEncode("MODE " + channel)); // we want to know the modes of the channel we just joined, so we ask politely
}
ircUser->removeUserModes(removeModes);
if (e->network()->isMe(ircUser)) {
ircUser->removeUserModes(removeModes);
if (e->network()->isMe(ircUser)) {
+ // Mark the message as Self
+ e->setFlag(EventManager::Self);
coreNetwork(e)->updatePersistentModes(addModes, removeModes);
}
}
}
coreNetwork(e)->updatePersistentModes(addModes, removeModes);
}
}
}
+void CoreSessionEventProcessor::processIrcEventNick(IrcEvent *e)
+{
+ if (checkParamCount(e, 1)) {
+ IrcUser *ircuser = e->network()->updateNickFromMask(e->prefix());
+ if (!ircuser) {
+ qWarning() << Q_FUNC_INFO << "Unknown IrcUser!";
+ return;
+ }
+
+ if (e->network()->isMe(ircuser)) {
+ // Mark the message as Self
+ e->setFlag(EventManager::Self);
+ }
+
+ // Actual processing is handled in lateProcessIrcEventNick(), this just sets the event flag
+ }
+}
+
+
void CoreSessionEventProcessor::lateProcessIrcEventNick(IrcEvent *e)
{
if (checkParamCount(e, 1)) {
void CoreSessionEventProcessor::lateProcessIrcEventNick(IrcEvent *e)
{
if (checkParamCount(e, 1)) {
+void CoreSessionEventProcessor::processIrcEventPart(IrcEvent *e)
+{
+ if (checkParamCount(e, 1)) {
+ IrcUser *ircuser = e->network()->updateNickFromMask(e->prefix());
+ if (!ircuser) {
+ qWarning() << Q_FUNC_INFO<< "Unknown IrcUser!";
+ return;
+ }
+
+ if (e->network()->isMe(ircuser)) {
+ // Mark the message as Self
+ e->setFlag(EventManager::Self);
+ }
+
+ // Actual processing is handled in lateProcessIrcEventNick(), this just sets the event flag
+ }
+}
+
+
void CoreSessionEventProcessor::lateProcessIrcEventPart(IrcEvent *e)
{
if (checkParamCount(e, 1)) {
void CoreSessionEventProcessor::lateProcessIrcEventPart(IrcEvent *e)
{
if (checkParamCount(e, 1)) {
}
QString channel = e->params().at(0);
ircuser->partChannel(channel);
}
QString channel = e->params().at(0);
ircuser->partChannel(channel);
- if (e->network()->isMe(ircuser))
+ if (e->network()->isMe(ircuser)) {
qobject_cast<CoreNetwork *>(e->network())->setChannelParted(channel);
qobject_cast<CoreNetwork *>(e->network())->setChannelParted(channel);
+ if (e->network()->isMe(ircuser)) {
+ // Mark the message as Self
+ e->setFlag(EventManager::Self);
+ }
+
QString msg;
if (e->params().count() > 0)
msg = e->params()[0];
QString msg;
if (e->params().count() > 0)
msg = e->params()[0];
void CoreSessionEventProcessor::processIrcEventTopic(IrcEvent *e)
{
if (checkParamCount(e, 2)) {
void CoreSessionEventProcessor::processIrcEventTopic(IrcEvent *e)
{
if (checkParamCount(e, 2)) {
- e->network()->updateNickFromMask(e->prefix());
+ IrcUser *ircuser = e->network()->updateNickFromMask(e->prefix());
+
+ if (e->network()->isMe(ircuser)) {
+ // Mark the message as Self
+ e->setFlag(EventManager::Self);
+ }
+
IrcChannel *channel = e->network()->ircChannel(e->params().at(0));
if (channel)
channel->setTopic(e->params().at(1));
IrcChannel *channel = e->network()->ircChannel(e->params().at(0));
if (channel)
channel->setTopic(e->params().at(1));
Q_INVOKABLE void processIrcEventJoin(IrcEvent *event);
Q_INVOKABLE void lateProcessIrcEventKick(IrcEvent *event);
Q_INVOKABLE void processIrcEventMode(IrcEvent *event);
Q_INVOKABLE void processIrcEventJoin(IrcEvent *event);
Q_INVOKABLE void lateProcessIrcEventKick(IrcEvent *event);
Q_INVOKABLE void processIrcEventMode(IrcEvent *event);
+ Q_INVOKABLE void processIrcEventNick(IrcEvent *event); /// Nickname changes
Q_INVOKABLE void lateProcessIrcEventNick(IrcEvent *event);
Q_INVOKABLE void lateProcessIrcEventNick(IrcEvent *event);
+ Q_INVOKABLE void processIrcEventPart(IrcEvent *event); /// Leaving a channel
Q_INVOKABLE void lateProcessIrcEventPart(IrcEvent *event);
Q_INVOKABLE void processIrcEventPing(IrcEvent *event);
Q_INVOKABLE void processIrcEventPong(IrcEvent *event);
Q_INVOKABLE void lateProcessIrcEventPart(IrcEvent *event);
Q_INVOKABLE void processIrcEventPing(IrcEvent *event);
Q_INVOKABLE void processIrcEventPong(IrcEvent *event);
// FIXME make this a proper event
coreNetwork()->coreSession()->ctcpParser()->query(coreNetwork(), nick, ctcpTag, message);
// FIXME make this a proper event
coreNetwork()->coreSession()->ctcpParser()->query(coreNetwork(), nick, ctcpTag, message);
- emit displayMsg(Message::Action, BufferInfo::StatusBuffer, "", verboseMessage, network()->myNick());
+ emit displayMsg(Message::Action, BufferInfo::StatusBuffer, "", verboseMessage,
+ network()->myNick(), Message::Flag::Self);
if (e->testFlag(EventManager::Netsplit))
return;
if (e->testFlag(EventManager::Netsplit))
return;
- displayMsg(e, Message::Join, e->params()[0], e->prefix(), e->params()[0]);
+ Message::Flag msgFlags = Message::Flag::None;
+ if (e->testFlag(EventManager::Self)) {
+ // Mark the message as Self
+ msgFlags = Message::Self;
+ }
+
+ displayMsg(e, Message::Join, e->params()[0], e->prefix(), e->params()[0], msgFlags);
if (e->params().count() > 2)
msg += " " + e->params().at(2);
if (e->params().count() > 2)
msg += " " + e->params().at(2);
- displayMsg(e, Message::Kick, msg, e->prefix(), channel);
+ Message::Flag msgFlags = Message::Flag::None;
+ if (e->testFlag(EventManager::Self)) {
+ // Mark the message as Self
+ msgFlags = Message::Self;
+ }
+
+ displayMsg(e, Message::Kick, msg, e->prefix(), channel, msgFlags);
else {
// User Modes
// FIXME: redirect
else {
// User Modes
// FIXME: redirect
- displayMsg(e, Message::Mode, e->params().join(" "), e->prefix());
+
+ Message::Flag msgFlags = Message::Flag::None;
+ if (e->testFlag(EventManager::Self)) {
+ // Mark the message as Self
+ msgFlags = Message::Self;
+ }
+ displayMsg(e, Message::Mode, e->params().join(" "), e->prefix(), QString(), msgFlags);
}
QString newnick = e->params().at(0);
}
QString newnick = e->params().at(0);
- QString oldnick = ircuser->nick();
- QString sender = e->network()->isMyNick(oldnick) ? newnick : e->prefix();
- foreach(const QString &channel, ircuser->channels())
- displayMsg(e, Message::Nick, newnick, sender, channel);
+ QString sender;
+ Message::Flag msgFlags = Message::Flag::None;
+ if (e->testFlag(EventManager::Self)) {
+ // Treat the sender as the new nickname, mark the message as Self
+ sender = newnick;
+ msgFlags = Message::Self;
+ } else {
+ // Take the sender from the event prefix, don't mark the message
+ sender = e->prefix();
+ }
+
+ // Announce to all channels the IrcUser is in
+ foreach(const QString &channel, ircuser->channels()) {
+ displayMsg(e, Message::Nick, newnick, sender, channel, msgFlags);
+ }
QString channel = e->params().at(0);
QString msg = e->params().count() > 1 ? e->params().at(1) : QString();
QString channel = e->params().at(0);
QString msg = e->params().count() > 1 ? e->params().at(1) : QString();
- displayMsg(e, Message::Part, msg, e->prefix(), channel);
+
+ Message::Flag msgFlags = Message::Flag::None;
+ if (e->testFlag(EventManager::Self)) {
+ // Mark the message as Self
+ msgFlags = Message::Self;
+ }
+
+ displayMsg(e, Message::Part, msg, e->prefix(), channel, msgFlags);
- foreach(const QString &channel, ircuser->channels())
- displayMsg(e, Message::Quit, e->params().count() ? e->params().first() : QString(), e->prefix(), channel);
+
+ Message::Flag msgFlags = Message::Flag::None;
+ if (e->testFlag(EventManager::Self)) {
+ // Mark the message as Self
+ msgFlags = Message::Self;
+ }
+
+ // Announce to all channels the IrcUser is in
+ foreach(const QString &channel, ircuser->channels()) {
+ displayMsg(e, Message::Quit, e->params().count() ? e->params().first() : QString(),
+ e->prefix(), channel, msgFlags);
+ }
}
void EventStringifier::processIrcEventTopic(IrcEvent *e)
{
}
void EventStringifier::processIrcEventTopic(IrcEvent *e)
{
+ Message::Flag msgFlags = Message::Flag::None;
+ if (e->testFlag(EventManager::Self)) {
+ // Mark the message as Self
+ msgFlags = Message::Self;
+ }
+
displayMsg(e, Message::Topic, tr("%1 has changed topic for %2 to: \"%3\"")
displayMsg(e, Message::Topic, tr("%1 has changed topic for %2 to: \"%3\"")
- .arg(e->nick(), e->params().at(0), e->params().at(1)), QString(), e->params().at(0));
+ .arg(e->nick(), e->params().at(0), e->params().at(1)), QString(), e->params().at(0),
+ msgFlags);
}
void EventStringifier::processIrcEventError(IrcEvent *e)
}
void EventStringifier::processIrcEventError(IrcEvent *e)
return;
if (e->testFlag(EventManager::Self)) {
return;
if (e->testFlag(EventManager::Self)) {
- displayMsg(e, Message::Action, tr("sending CTCP-%1 request to %2").arg(e->ctcpCmd(), e->target()), e->network()->myNick());
+ displayMsg(e, Message::Action,
+ tr("sending CTCP-%1 request to %2").arg(e->ctcpCmd(), e->target()),
+ e->network()->myNick(), QString(), Message::Flag::Self);
{
if (!msg.sender().contains('!'))
_styledMsg.setFlags(msg.flags() |= Message::ServerMsg);
{
if (!msg.sender().contains('!'))
_styledMsg.setFlags(msg.flags() |= Message::ServerMsg);
+
+ if (_styledMsg.type() == Message::Nick) {
+ // HACK: Work around nick changes on Quassel core not properly being set as Self
+ // While this is fixed in the core, old cores and past history will still show incorrectly.
+ if (nickFromMask(_styledMsg.sender()) == stripFormatCodes(_styledMsg.contents()).toLower()) {
+ _styledMsg.setFlags(msg.flags() |= Message::Self);
+ }
+ }
+ // Unfortunately, the missing Self flag for other message types can't easily be worked around.