X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=src%2Fcommon%2Fircuser.h;fp=src%2Fcommon%2Fircuser.h;h=b217688276acab62ce9c3b2a3c4f21a429bb2ad7;hp=9d203e58c9e6e808ab1ba2d327e2c32605b375c1;hb=f12d6496251729f7d21f4fbcb0814dec7fba4b75;hpb=41a136e99bffde8e203fb1abff7c9affbbb16a8b diff --git a/src/common/ircuser.h b/src/common/ircuser.h index 9d203e58..b2176882 100644 --- a/src/common/ircuser.h +++ b/src/common/ircuser.h @@ -106,6 +106,31 @@ public : inline QDateTime lastSpokenTo(BufferId id) const { return _lastSpokenTo.value(id); } void setLastSpokenTo(BufferId id, const QDateTime &time); + /** + * Gets whether or not the away state has changed since it was last acknowledged + * + * Away state is marked as changed by any modification to away status (away/here, message) + * + * NOTE: On servers lacking support for IRCv3 away-notify, this won't update until an autoWHO- + * run for away/here changes, or until sending a message to the user for away message changes. + * + * @see IrcUser::acknowledgeAwayChanged() + * + * @return True if current away state is unchanged from last acknowledgement, otherwise false + */ + inline bool hasAwayChanged() const { return _awayChanged; } + + /** + * Sets the last away state change as acknowledged + * + * @see IrcUser::hasAwayChanged() + */ + inline void acknowledgeAwayChanged() + { + // Don't sync this as individual clients may suppress different kinds of behaviors + _awayChanged = false; + } + public slots: void setUser(const QString &user); void setHost(const QString &host); @@ -191,6 +216,15 @@ private: return (_nick.toLower() == nickname.toLower()); } + /** + * Sets the last away state change as unacknowledged + * + * @see IrcUser::hasAwayChanged() + */ + inline void markAwayChanged() + { + _awayChanged = true; + } bool _initialized; @@ -222,6 +256,10 @@ private: QHash _lastActivity; QHash _lastSpokenTo; + + // Given it's never been acknowledged, assume changes exist on IrcUser creation + /// Tracks if changes in away state (away/here, message) have yet to be acknowledged + bool _awayChanged = true; };