diff options
| author | 2023-08-04 13:09:06 +0100 | |
|---|---|---|
| committer | 2023-08-04 13:14:49 +0100 | |
| commit | 635feb1a9a3ece8f06e1ad620b7b5a1eb21f8a44 (patch) | |
| tree | ad84709d188e70bf3e8aab74d85c59e40a711e12 /src/modules/m_spanningtree | |
| parent | Fix an inverted condition in the DNSBL module. (diff) | |
Rework how away state is stored internally.
This will be necessary for implementing pre-away as well as some
changes for WATCH compatibility with Unreal.
Diffstat (limited to 'src/modules/m_spanningtree')
| -rw-r--r-- | src/modules/m_spanningtree/away.cpp | 21 | ||||
| -rw-r--r-- | src/modules/m_spanningtree/main.cpp | 6 | ||||
| -rw-r--r-- | src/modules/m_spanningtree/main.h | 4 |
3 files changed, 13 insertions, 18 deletions
diff --git a/src/modules/m_spanningtree/away.cpp b/src/modules/m_spanningtree/away.cpp index edb59b21d..ec9f05041 100644 --- a/src/modules/m_spanningtree/away.cpp +++ b/src/modules/m_spanningtree/away.cpp @@ -30,22 +30,17 @@ CmdResult CommandAway::HandleRemote(::RemoteUser* u, Params& params) { + const auto prevstate = u->away; if (!params.empty()) { - if (params.size() > 1) - u->awaytime = ServerCommand::ExtractTS(params[0]); - else - u->awaytime = ServerInstance->Time(); - - u->awaymsg = params.back(); - awayevprov.Call(&Away::EventListener::OnUserAway, u); + time_t awaytime = params.size() > 1 ? ServerCommand::ExtractTS(params[0]) : 0; + u->away.emplace(params.back(), awaytime); + awayevprov.Call(&Away::EventListener::OnUserAway, u, prevstate); } else { - const std::string awaymsg = u->awaymsg; - u->awaytime = 0; - u->awaymsg.clear(); - awayevprov.Call(&Away::EventListener::OnUserBack, u, awaymsg); + u->away.reset(); + awayevprov.Call(&Away::EventListener::OnUserBack, u, prevstate); } return CmdResult::SUCCESS; } @@ -53,6 +48,6 @@ CmdResult CommandAway::HandleRemote(::RemoteUser* u, Params& params) CommandAway::Builder::Builder(User* user) : CmdBuilder(user, "AWAY") { - if (!user->awaymsg.empty()) - push_int(user->awaytime).push_last(user->awaymsg); + if (user->IsAway()) + push_int(user->away->time).push_last(user->away->message); } diff --git a/src/modules/m_spanningtree/main.cpp b/src/modules/m_spanningtree/main.cpp index 704d23ac6..999effda6 100644 --- a/src/modules/m_spanningtree/main.cpp +++ b/src/modules/m_spanningtree/main.cpp @@ -828,15 +828,15 @@ void ModuleSpanningTree::OnDelLine(User* user, XLine* x) params.Broadcast(); } -void ModuleSpanningTree::OnUserAway(User* user) +void ModuleSpanningTree::OnUserAway(User* user, const std::optional<AwayState>& prevstate) { if (IS_LOCAL(user) && user->IsFullyConnected()) CommandAway::Builder(user).Broadcast(); } -void ModuleSpanningTree::OnUserBack(User* user, const std::string& message) +void ModuleSpanningTree::OnUserBack(User* user, const std::optional<AwayState>& prevstate) { - OnUserAway(user); + OnUserAway(user, prevstate); } void ModuleSpanningTree::OnMode(User* source, User* u, Channel* c, const Modes::ChangeList& modes, ModeParser::ModeProcessFlag processflags) diff --git a/src/modules/m_spanningtree/main.h b/src/modules/m_spanningtree/main.h index 2c8558e78..6558feafb 100644 --- a/src/modules/m_spanningtree/main.h +++ b/src/modules/m_spanningtree/main.h @@ -200,8 +200,8 @@ public: void OnAddLine(User* u, XLine* x) override; void OnDelLine(User* u, XLine* x) override; ModResult OnStats(Stats::Context& stats) override; - void OnUserAway(User* user) override; - void OnUserBack(User* user, const std::string& message) override; + void OnUserAway(User* user, const std::optional<AwayState>& prevstate) override; + void OnUserBack(User* user, const std::optional<AwayState>& prevstate) override; void OnLoadModule(Module* mod) override; void OnUnloadModule(Module* mod) override; ModResult OnAcceptConnection(int newsock, ListenSocket* from, const irc::sockets::sockaddrs& client, const irc::sockets::sockaddrs& server) override; |
