/***************************************************************************
- * 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 *
_ircParser(new IrcParser(this)),
scriptEngine(new QScriptEngine(this)),
_processMessages(false),
- _ignoreListManager(this)
+ _ignoreListManager(this),
+ _highlightRuleManager(this)
{
SignalProxy *p = signalProxy();
p->setHeartBeatInterval(30);
p->synchronize(networkConfig());
p->synchronize(&_coreInfo);
p->synchronize(&_ignoreListManager);
+ p->synchronize(&_highlightRuleManager);
p->synchronize(transferManager());
// Restore session state
if (restoreState)
void CoreSession::addClient(RemotePeer *peer)
{
+ signalProxy()->setTargetPeer(peer);
+
peer->dispatch(sessionState());
signalProxy()->addPeer(peer);
+
+ signalProxy()->setTargetPeer(nullptr);
}
}
+QHash<QString, QByteArray> CoreSession::bufferCiphers(NetworkId id) const
+{
+ return Core::bufferCiphers(user(), id);
+}
+
+void CoreSession::setBufferCipher(NetworkId id, const QString &bufferName, const QByteArray &cipher) const
+{
+ Core::setBufferCipher(user(), id, bufferName, cipher);
+}
+
+
// FIXME switch to BufferId
void CoreSession::msgFromClient(BufferInfo bufinfo, QString msg)
{
if (_ignoreListManager.match(rawMsg, networkName) == IgnoreListManager::HardStrictness)
return;
+ if (_highlightRuleManager.match(rawMsg, currentNetwork->myNick(), currentNetwork->identityPtr()->nicks()))
+ rawMsg.flags |= Message::Flag::Highlight;
+
_messageQueue << rawMsg;
if (!_processMessages) {
_processMessages = true;
Q_ASSERT(!createBuffer);
bufferInfo = Core::bufferInfo(user(), rawMsg.networkId, BufferInfo::StatusBuffer, "");
}
- Message msg(bufferInfo, rawMsg.type, rawMsg.text, rawMsg.sender,
- senderPrefixes(rawMsg.sender, bufferInfo), rawMsg.flags);
+ Message msg(bufferInfo, rawMsg.type, rawMsg.text, rawMsg.sender, senderPrefixes(rawMsg.sender, bufferInfo),
+ realName(rawMsg.sender, rawMsg.networkId), avatarUrl(rawMsg.sender, rawMsg.networkId),
+ rawMsg.flags);
if(Core::storeMessage(msg))
emit displayMsg(msg);
}
}
bufferInfoCache[rawMsg.networkId][rawMsg.target] = bufferInfo;
}
- Message msg(bufferInfo, rawMsg.type, rawMsg.text, rawMsg.sender,
- senderPrefixes(rawMsg.sender, bufferInfo), rawMsg.flags);
+ Message msg(bufferInfo, rawMsg.type, rawMsg.text, rawMsg.sender, senderPrefixes(rawMsg.sender, bufferInfo),
+ realName(rawMsg.sender, rawMsg.networkId), avatarUrl(rawMsg.sender, rawMsg.networkId),
+ rawMsg.flags);
messages << msg;
}
// add the StatusBuffer to the Cache in case there are more Messages for the original target
bufferInfoCache[rawMsg.networkId][rawMsg.target] = bufferInfo;
}
- Message msg(bufferInfo, rawMsg.type, rawMsg.text, rawMsg.sender,
- senderPrefixes(rawMsg.sender, bufferInfo), rawMsg.flags);
+ Message msg(bufferInfo, rawMsg.type, rawMsg.text, rawMsg.sender, senderPrefixes(rawMsg.sender, bufferInfo),
+ realName(rawMsg.sender, rawMsg.networkId), avatarUrl(rawMsg.sender, rawMsg.networkId),
+ rawMsg.flags);
messages << msg;
}
return currentNetwork->modesToPrefixes(modes);
}
+QString CoreSession::realName(const QString &sender, NetworkId networkId) const
+{
+ CoreNetwork *currentNetwork = network(networkId);
+ if (!currentNetwork) {
+ return {};
+ }
+
+ IrcUser *currentUser = currentNetwork->ircUser(nickFromMask(sender));
+ if (!currentUser) {
+ return {};
+ }
+
+ return currentUser->realName();
+}
+
+QString CoreSession::avatarUrl(const QString &sender, NetworkId networkId) const
+{
+ Q_UNUSED(sender);
+ Q_UNUSED(networkId);
+ // Currently we do not have a way to retrieve this value yet.
+ //
+ // This likely will require implementing IRCv3's METADATA spec.
+ // See https://ircv3.net/irc/
+ // And https://blog.irccloud.com/avatars/
+ return "";
+}
+
Protocol::SessionState CoreSession::sessionState() const
{
QVariantList bufferInfos;
createIdentity(coreIdentity);
}
+const QString CoreSession::strictSysident() {
+ return Core::instance()->strictSysIdent(_user);
+}
void CoreSession::createIdentity(const CoreIdentity &identity)
{
}
}
-void CoreSession::changePassword(PeerPtr peer, const QString &userName, const QString &oldPassword, const QString &newPassword)
-{
+void CoreSession::changePassword(PeerPtr peer, const QString &userName, const QString &oldPassword, const QString &newPassword) {
+ Q_UNUSED(peer);
+
bool success = false;
UserId uid = Core::validateUser(userName, oldPassword);
if (uid.isValid() && uid == user())
success = Core::changeUserPassword(uid, newPassword);
- signalProxy()->restrictTargetPeers({signalProxy()->sourcePeer()}, [&]{
+ signalProxy()->restrictTargetPeers(signalProxy()->sourcePeer(), [&]{
emit passwordChanged(nullptr, success);
});
}
qWarning() << "Invalid peer Id: " << peerId;
return;
}
- signalProxy()->restrictTargetPeers({peer}, [&]{
+ signalProxy()->restrictTargetPeers(peer, [&]{
emit disconnectFromCore();
});
}