/***************************************************************************
- * Copyright (C) 2005-2015 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 *
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. *
***************************************************************************/
-#ifndef CORESESSION_H
-#define CORESESSION_H
+#pragma once
+#include <QHash>
+#include <QSet>
#include <QString>
#include <QVariant>
+#include <utility>
-#include "corecoreinfo.h"
+#include "coreinfo.h"
#include "corealiasmanager.h"
+#include "corehighlightrulemanager.h"
#include "coreignorelistmanager.h"
#include "peer.h"
#include "protocol.h"
class CoreBacklogManager;
class CoreBufferSyncer;
class CoreBufferViewManager;
+class CoreDccConfig;
class CoreIdentity;
class CoreIrcListHelper;
class CoreNetwork;
Q_OBJECT
public:
- CoreSession(UserId, bool restoreState, QObject *parent = 0);
- ~CoreSession();
+ CoreSession(UserId, bool restoreState, bool strictIdentEnabled, QObject *parent = nullptr);
QList<BufferInfo> buffers() const;
inline UserId user() const { return _user; }
CoreNetwork *network(NetworkId) const;
CoreIdentity *identity(IdentityId) const;
+
+ /**
+ * Returns the optionally strict-compliant ident for the given user identity
+ *
+ * If strict mode is enabled, this will return the user's Quassel username for any identity,
+ * otherwise this will return the given identity's ident, whatever it may be.
+ *
+ * @return The user's ident, compliant with strict mode (when enabled)
+ */
+ const QString strictCompliantIdent(const CoreIdentity *identity);
+
inline CoreNetworkConfig *networkConfig() const { return _networkConfig; }
NetworkConnection *networkConnection(NetworkId) const;
inline CoreIrcListHelper *ircListHelper() const { return _ircListHelper; }
inline CoreIgnoreListManager *ignoreListManager() { return &_ignoreListManager; }
+ inline HighlightRuleManager *highlightRuleManager() { return &_highlightRuleManager; }
inline CoreTransferManager *transferManager() const { return _transferManager; }
+ inline CoreDccConfig *dccConfig() const { return _dccConfig; }
// void attachNetworkConnection(NetworkConnection *conn);
void addClient(RemotePeer *peer);
void addClient(InternalPeer *peer);
+ /**
+ * Shuts down the session and deletes itself afterwards.
+ */
+ void shutdown();
+
void msgFromClient(BufferInfo, QString message);
//! Create an identity and propagate the changes to the clients.
void changePassword(PeerPtr peer, const QString &userName, const QString &oldPassword, const QString &newPassword);
+ void kickClient(int peerId);
+
QHash<QString, QString> persistentChannels(NetworkId) const;
- //! Marks us away (or unaway) on all networks
- void globalAway(const QString &msg = QString());
+ QHash<QString, QByteArray> bufferCiphers(NetworkId id) const;
+ void setBufferCipher(NetworkId id, const QString &bufferName, const QByteArray &cipher) const;
+
+ /**
+ * Marks us away (or unaway) on all networks
+ *
+ * @param[in] msg Away message, or blank to set unaway
+ * @param[in] skipFormatting If true, skip timestamp formatting codes (e.g. if already done)
+ */
+ void globalAway(const QString &msg = QString(), const bool skipFormatting = false);
signals:
void initialized();
- void sessionState(const Protocol::SessionState &sessionState);
+ void sessionStateReceived(const Protocol::SessionState &sessionState);
//void msgFromGui(uint netid, QString buf, QString message);
void displayMsg(Message message);
void passwordChanged(PeerPtr peer, bool success);
+ void disconnectFromCore();
+
protected:
- virtual void customEvent(QEvent *event);
+ void customEvent(QEvent *event) override;
private slots:
void removeClient(Peer *peer);
void saveSessionState() const;
+ void onNetworkDisconnected(NetworkId networkId);
+
private:
void processMessages();
UserId _user;
+ /// Whether or not strict ident mode is enabled, locking users' idents to Quassel username
+ bool _strictIdentEnabled;
+
SignalProxy *_signalProxy;
CoreAliasManager _aliasManager;
- // QHash<NetworkId, NetworkConnection *> _connections;
- QHash<NetworkId, CoreNetwork *> _networks;
- // QHash<NetworkId, CoreNetwork *> _networksToRemove;
+
QHash<IdentityId, CoreIdentity *> _identities;
+ QHash<NetworkId, CoreNetwork *> _networks;
+ QSet<NetworkId> _networksPendingDisconnect;
CoreBufferSyncer *_bufferSyncer;
CoreBacklogManager *_backlogManager;
CoreBufferViewManager *_bufferViewManager;
+ CoreDccConfig *_dccConfig;
CoreIrcListHelper *_ircListHelper;
CoreNetworkConfig *_networkConfig;
- CoreCoreInfo _coreInfo;
+ CoreInfo *_coreInfo;
CoreTransferManager *_transferManager;
EventManager *_eventManager;
QScriptEngine *scriptEngine;
+ /**
+ * This method obtains the prefixes of the message's sender within a channel, by looking up their channelmodes, and
+ * processing them to prefixes based on the network's settings.
+ * @param sender The hostmask of the sender
+ * @param bufferInfo The BufferInfo object of the buffer
+ */
+ QString senderPrefixes(const QString &sender, const BufferInfo &bufferInfo) const;
+
+ /**
+ * This method obtains the realname of the message's sender.
+ * @param sender The hostmask of the sender
+ * @param networkId The network the user is on
+ */
+ QString realName(const QString &sender, NetworkId networkId) const;
+
+ /**
+ * This method obtains the avatar of the message's sender.
+ * @param sender The hostmask of the sender
+ * @param networkId The network the user is on
+ */
+ QString avatarUrl(const QString &sender, NetworkId networkId) const;
QList<RawMessage> _messageQueue;
bool _processMessages;
CoreIgnoreListManager _ignoreListManager;
+ CoreHighlightRuleManager _highlightRuleManager;
};
QString text;
QString sender;
Message::Flags flags;
- RawMessage(NetworkId networkId, Message::Type type, BufferInfo::Type bufferType, const QString &target, const QString &text, const QString &sender, Message::Flags flags)
- : networkId(networkId), type(type), bufferType(bufferType), target(target), text(text), sender(sender), flags(flags) {}
+ RawMessage(NetworkId networkId, Message::Type type, BufferInfo::Type bufferType, QString target, QString text, QString sender, Message::Flags flags)
+ : networkId(networkId), type(type), bufferType(bufferType), target(std::move(target)), text(std::move(text)), sender(std::move(sender)), flags(flags) {}
};
-
-#endif