From 2ab186d22d9377a509433fce75268f20ca1eaf5c Mon Sep 17 00:00:00 2001 From: marian Date: Wed, 22 Dec 2010 15:41:38 +0000 Subject: [PATCH] Change status to offline for all chat rooms belonging to a given account when it goes offline. git-svn-id: http://yate.null.ro/svn/yate/trunk@4012 acf43c95-373e-0410-b603-e72c3f656dc1 --- engine/ClientLogic.cpp | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/engine/ClientLogic.cpp b/engine/ClientLogic.cpp index 0116d1b6..6a6466d1 100644 --- a/engine/ClientLogic.cpp +++ b/engine/ClientLogic.cpp @@ -2201,6 +2201,22 @@ static void removePendingChat(const String& id, ClientAccountList* accounts = 0) room->flashChat(id,false); } +// Set offline to MUCs belonging to a given account +static void setOfflineMucs(ClientAccount* acc) +{ + if (!acc || Client::exiting()) + return; + for (ObjList* o = acc->mucs().skipNull(); o; o = o->skipNext()) { + MucRoom* room = static_cast(o->get()); + if (room->resource().offline()) + continue; + room->resource().m_status = ClientResource::Offline; + room->resource().m_affiliation = MucRoomMember::AffNone; + room->resource().m_role = MucRoomMember::RoleNone; + updateMucRoomMember(*room,room->resource()); + } +} + /** * ClientWizard @@ -5257,6 +5273,7 @@ bool DefaultLogic::handleUserNotify(Message& msg, bool& stopLogic) acc->resource().m_id = acc->m_params.getValue("resource"); } clearAccountContacts(*acc); + setOfflineMucs(acc); } // Clear some internal params acc->m_params.clearParam("internal.nologinfail");