From 635feb1a9a3ece8f06e1ad620b7b5a1eb21f8a44 Mon Sep 17 00:00:00 2001 From: Sadie Powell Date: Fri, 4 Aug 2023 13:09:06 +0100 Subject: 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. --- src/modules/m_spanningtree/away.cpp | 21 ++++++++------------- 1 file changed, 8 insertions(+), 13 deletions(-) (limited to 'src/modules/m_spanningtree/away.cpp') 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); } -- cgit v1.3.1-10-gc9f91