From db594ceece625e276ca482c19194d1856d59485e Mon Sep 17 00:00:00 2001 From: Ansariel Date: Mon, 18 Apr 2016 09:46:50 +0200 Subject: [PATCH] FIRE-18167: Per group snooze duration doesn't work from chiclet context menu --- indra/newview/llgroupactions.cpp | 63 +++++++++++++++++++++++++++++++- 1 file changed, 61 insertions(+), 2 deletions(-) diff --git a/indra/newview/llgroupactions.cpp b/indra/newview/llgroupactions.cpp index fa0cb6bd9a..3f232f1f4e 100755 --- a/indra/newview/llgroupactions.cpp +++ b/indra/newview/llgroupactions.cpp @@ -661,13 +661,72 @@ LLUUID LLGroupActions::startIM(const LLUUID& group_id) } // [SL:KB] - Patch: Chat-GroupSnooze | Checked: 2012-06-17 (Catznip-3.3) +static void snooze_group_im(const LLUUID& group_id, S32 duration = -1) +{ + LLUUID session_id = gIMMgr->computeSessionID(IM_SESSION_GROUP_START, group_id); + if (session_id.notNull()) + { + LLIMModel::LLIMSession* session = LLIMModel::instance().findIMSession(session_id); + + if (!session) + { + LL_WARNS() << "Empty session." << LL_ENDL; + return; + } + + session->mSnoozeTime = duration; + session->mCloseAction = LLIMModel::LLIMSession::CLOSE_SNOOZE; + + gIMMgr->leaveSession(session_id); + } +} + +static void snooze_group_im_duration_callback(const LLSD& notification, const LLSD& response, const LLUUID& group_id) +{ + S32 option = LLNotificationsUtil::getSelectedOption(notification, response); + if (0 == option) + { + std::istringstream duration_str(response["duration"].asString()); + S32 duration(-1); + if (duration_str >> duration && duration >= 0) + { + snooze_group_im(group_id, duration); + } + else + { + LLNotificationsUtil::add("SnoozeDurationInvalidInput"); + } + } +} + +static void confirm_group_im_snooze(const LLUUID& group_id) +{ + if (group_id.isNull()) + { + return; + } + + if (gSavedSettings.getBOOL("FSEnablePerGroupSnoozeDuration")) + { + LLSD args; + args["DURATION"] = gSavedSettings.getS32("GroupSnoozeTime"); + + LLNotificationsUtil::add("SnoozeDuration", args, LLSD(), boost::bind(&snooze_group_im_duration_callback, _1, _2, group_id)); + return; + } + + snooze_group_im(group_id); +} + static void close_group_im(const LLUUID& group_id, LLIMModel::LLIMSession::SCloseAction close_action) { if (group_id.isNull()) + { return; + } LLUUID session_id = gIMMgr->computeSessionID(IM_SESSION_GROUP_START, group_id); - if (session_id != LLUUID::null) + if (session_id.notNull()) { LLIMModel::LLIMSession* pIMSession = LLIMModel::getInstance()->findIMSession(session_id); if (pIMSession) @@ -685,7 +744,7 @@ void LLGroupActions::leaveIM(const LLUUID& group_id) void LLGroupActions::snoozeIM(const LLUUID& group_id) { - close_group_im(group_id, LLIMModel::LLIMSession::CLOSE_SNOOZE); + confirm_group_im_snooze(group_id); } void LLGroupActions::endIM(const LLUUID& group_id)