X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=src%2Fcore%2Fcoresession.h;h=ed9b5fea781f389e6396baefd5235d9dd7ae280f;hp=fdb952f73d581ec0937dd36fd87746fe94226496;hb=3a3e844f9fcfd12235a0086af75ecd503b621ef4;hpb=bae8c28f27159ec803daff083da125b313c128d1 diff --git a/src/core/coresession.h b/src/core/coresession.h index fdb952f7..ed9b5fea 100644 --- a/src/core/coresession.h +++ b/src/core/coresession.h @@ -1,5 +1,5 @@ /*************************************************************************** - * Copyright (C) 2005-2013 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 * @@ -18,27 +18,33 @@ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * ***************************************************************************/ -#ifndef CORESESSION_H -#define CORESESSION_H +#pragma once +#include +#include #include #include +#include -#include "corecoreinfo.h" +#include "coreinfo.h" #include "corealiasmanager.h" +#include "corehighlightrulemanager.h" #include "coreignorelistmanager.h" +#include "peer.h" +#include "protocol.h" #include "message.h" -#include "signalproxy.h" #include "storage.h" class CoreBacklogManager; class CoreBufferSyncer; class CoreBufferViewManager; +class CoreDccConfig; class CoreIdentity; class CoreIrcListHelper; class CoreNetwork; class CoreNetworkConfig; class CoreSessionEventProcessor; +class CoreTransferManager; class CtcpParser; class EventManager; class EventStringifier; @@ -47,6 +53,7 @@ class IrcParser; class MessageEvent; class NetworkConnection; class RemotePeer; +class SignalProxy; struct NetworkInfo; @@ -57,17 +64,27 @@ class CoreSession : public QObject Q_OBJECT public: - CoreSession(UserId, bool restoreState, QObject *parent = 0); - ~CoreSession(); + CoreSession(UserId, bool restoreState, bool strictIdentEnabled, QObject *parent = nullptr); QList 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; - QVariant sessionState(); + Protocol::SessionState sessionState() const; inline SignalProxy *signalProxy() const { return _signalProxy; } @@ -83,6 +100,10 @@ public: 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); //! Return necessary data for restoring the session after restarting the core @@ -92,6 +113,11 @@ public slots: 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. @@ -122,14 +148,26 @@ public slots: */ void renameBuffer(const NetworkId &networkId, const QString &newName, const QString &oldName); + void changePassword(PeerPtr peer, const QString &userName, const QString &oldPassword, const QString &newPassword); + + void kickClient(int peerId); + QHash persistentChannels(NetworkId) const; - //! Marks us away (or unaway) on all networks - void globalAway(const QString &msg = QString()); + QHash 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 QVariant &); + void sessionState(const Protocol::SessionState &sessionState); //void msgFromGui(uint netid, QString buf, QString message); void displayMsg(Message message); @@ -153,11 +191,15 @@ signals: void networkRemoved(NetworkId); void networkDisconnected(NetworkId); + void passwordChanged(PeerPtr peer, bool success); + + void disconnectFromCore(); + protected: - virtual void customEvent(QEvent *event); + void customEvent(QEvent *event) override; private slots: - void removeClient(SignalProxy::AbstractPeer *peer); + void removeClient(Peer *peer); void recvStatusMsgFromServer(QString msg); void recvMessageFromServer(NetworkId networkId, Message::Type, BufferInfo::Type, const QString &target, const QString &text, const QString &sender = "", Message::Flags flags = Message::None); @@ -173,6 +215,8 @@ private slots: void saveSessionState() const; + void onNetworkDisconnected(NetworkId networkId); + private: void processMessages(); @@ -184,19 +228,24 @@ private: UserId _user; + /// Whether or not strict ident mode is enabled, locking users' idents to Quassel username + bool _strictIdentEnabled; + SignalProxy *_signalProxy; CoreAliasManager _aliasManager; - // QHash _connections; - QHash _networks; - // QHash _networksToRemove; + QHash _identities; + QHash _networks; + QSet _networksPendingDisconnect; CoreBufferSyncer *_bufferSyncer; CoreBacklogManager *_backlogManager; CoreBufferViewManager *_bufferViewManager; + CoreDccConfig *_dccConfig; CoreIrcListHelper *_ircListHelper; CoreNetworkConfig *_networkConfig; - CoreCoreInfo _coreInfo; + CoreInfo *_coreInfo; + CoreTransferManager *_transferManager; EventManager *_eventManager; EventStringifier *_eventStringifier; // should eventually move into client @@ -206,9 +255,31 @@ private: 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 _messageQueue; bool _processMessages; CoreIgnoreListManager _ignoreListManager; + CoreHighlightRuleManager _highlightRuleManager; }; @@ -220,8 +291,6 @@ struct RawMessage { 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