CHUI-499: Loading the DND notifications upon exit from DND mode and after login.
parent
6b9ead9145
commit
bd6d34d312
|
|
@ -41,6 +41,7 @@
|
|||
#include "llchannelmanager.h"
|
||||
#include "llchicletbar.h"
|
||||
#include "llconsole.h"
|
||||
#include "lldonotdisturbnotificationstorage.h"
|
||||
#include "llenvmanager.h"
|
||||
#include "llfirstuse.h"
|
||||
#include "llfloatercamera.h"
|
||||
|
|
@ -1389,11 +1390,16 @@ BOOL LLAgent::getAFK() const
|
|||
//-----------------------------------------------------------------------------
|
||||
// setDoNotDisturb()
|
||||
//-----------------------------------------------------------------------------
|
||||
void LLAgent::setDoNotDisturb(bool pIsDotNotDisturb)
|
||||
void LLAgent::setDoNotDisturb(bool pIsDoNotDisturb)
|
||||
{
|
||||
mIsDoNotDisturb = pIsDotNotDisturb;
|
||||
sendAnimationRequest(ANIM_AGENT_DO_NOT_DISTURB, (pIsDotNotDisturb ? ANIM_REQUEST_START : ANIM_REQUEST_STOP));
|
||||
LLNotificationsUI::LLChannelManager::getInstance()->muteAllChannels(pIsDotNotDisturb);
|
||||
bool isDoNotDisturbSwitchedOff = (mIsDoNotDisturb && !pIsDoNotDisturb);
|
||||
mIsDoNotDisturb = pIsDoNotDisturb;
|
||||
sendAnimationRequest(ANIM_AGENT_DO_NOT_DISTURB, (pIsDoNotDisturb ? ANIM_REQUEST_START : ANIM_REQUEST_STOP));
|
||||
LLNotificationsUI::LLChannelManager::getInstance()->muteAllChannels(pIsDoNotDisturb);
|
||||
if (isDoNotDisturbSwitchedOff)
|
||||
{
|
||||
LLDoNotDisturbNotificationStorage::getInstance()->loadNotifications();
|
||||
}
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
|
|
|
|||
|
|
@ -139,7 +139,9 @@ void LLChannelManager::onLoginCompleted()
|
|||
}
|
||||
|
||||
LLPersistentNotificationStorage::getInstance()->loadNotifications();
|
||||
|
||||
LLDoNotDisturbNotificationStorage::getInstance()->initialize();
|
||||
LLDoNotDisturbNotificationStorage::getInstance()->loadNotifications();
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------
|
||||
|
|
|
|||
|
|
@ -39,6 +39,7 @@
|
|||
|
||||
LLCommunicationChannel::LLCommunicationChannel(const std::string& pName, const std::string& pParentName)
|
||||
: LLNotificationChannel(pName, pParentName, filterByDoNotDisturbStatus)
|
||||
, mHistory()
|
||||
{
|
||||
}
|
||||
|
||||
|
|
@ -61,6 +62,11 @@ LLCommunicationChannel::history_list_t::const_iterator LLCommunicationChannel::e
|
|||
return mHistory.end();
|
||||
}
|
||||
|
||||
void LLCommunicationChannel::clearHistory()
|
||||
{
|
||||
mHistory.clear();
|
||||
}
|
||||
|
||||
void LLCommunicationChannel::onFilterFail(LLNotificationPtr pNotificationPtr)
|
||||
{
|
||||
std::string notificationType = pNotificationPtr->getType();
|
||||
|
|
|
|||
|
|
@ -46,6 +46,8 @@ public:
|
|||
typedef std::multimap<LLDate, LLNotificationPtr> history_list_t;
|
||||
history_list_t::const_iterator beginHistory() const;
|
||||
history_list_t::const_iterator endHistory() const;
|
||||
|
||||
void clearHistory();
|
||||
|
||||
protected:
|
||||
virtual void onFilterFail(LLNotificationPtr pNotificationPtr);
|
||||
|
|
|
|||
|
|
@ -29,14 +29,25 @@
|
|||
|
||||
#include "lldonotdisturbnotificationstorage.h"
|
||||
|
||||
#define XXX_STINSON_HIDE_NOTIFICATIONS_ON_DND_EXIT 0
|
||||
|
||||
#if XXX_STINSON_HIDE_NOTIFICATIONS_ON_DND_EXIT
|
||||
#include "llchannelmanager.h"
|
||||
#endif // XXX_STINSON_HIDE_NOTIFICATIONS_ON_DND_EXIT
|
||||
#include "llcommunicationchannel.h"
|
||||
#include "lldir.h"
|
||||
#include "llerror.h"
|
||||
#include "llfasttimer_class.h"
|
||||
#include "llnotifications.h"
|
||||
#include "llnotificationhandler.h"
|
||||
#include "llnotificationstorage.h"
|
||||
#if XXX_STINSON_HIDE_NOTIFICATIONS_ON_DND_EXIT
|
||||
#include "llscreenchannel.h"
|
||||
#endif // XXX_STINSON_HIDE_NOTIFICATIONS_ON_DND_EXIT
|
||||
#include "llscriptfloater.h"
|
||||
#include "llsd.h"
|
||||
#include "llsingleton.h"
|
||||
#include "lluuid.h"
|
||||
|
||||
LLDoNotDisturbNotificationStorage::LLDoNotDisturbNotificationStorage()
|
||||
: LLSingleton<LLDoNotDisturbNotificationStorage>()
|
||||
|
|
@ -85,6 +96,71 @@ static LLFastTimer::DeclareTimer FTM_LOAD_DND_NOTIFICATIONS("Load DND Notificati
|
|||
|
||||
void LLDoNotDisturbNotificationStorage::loadNotifications()
|
||||
{
|
||||
LLFastTimer _(FTM_LOAD_DND_NOTIFICATIONS);
|
||||
|
||||
LL_INFOS("stinsonDebug") << "STINSON DEBUG: loading notifiations" << LL_ENDL;
|
||||
|
||||
LLSD input;
|
||||
if (!readNotifications(input) ||input.isUndefined())
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
LLSD& data = input["data"];
|
||||
if (data.isUndefined())
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
#if XXX_STINSON_HIDE_NOTIFICATIONS_ON_DND_EXIT
|
||||
LLNotificationsUI::LLScreenChannel* notification_channel =
|
||||
dynamic_cast<LLNotificationsUI::LLScreenChannel*>(LLNotificationsUI::LLChannelManager::getInstance()->
|
||||
findChannelByID(LLUUID(gSavedSettings.getString("NotificationChannelUUID"))));
|
||||
#endif // XXX_STINSON_HIDE_NOTIFICATIONS_ON_DND_EXIT
|
||||
|
||||
LLNotifications& instance = LLNotifications::instance();
|
||||
|
||||
for (LLSD::array_const_iterator notification_it = data.beginArray();
|
||||
notification_it != data.endArray();
|
||||
++notification_it)
|
||||
{
|
||||
LLSD notification_params = *notification_it;
|
||||
LLNotificationPtr notification(new LLNotification(notification_params));
|
||||
|
||||
LL_INFOS("stinsonDebug") << "STINSON DEBUG: loading notification of type '" << notification->getType() << "'" << LL_ENDL;
|
||||
|
||||
const LLUUID& notificationID = notification->id();
|
||||
if (instance.find(notificationID))
|
||||
{
|
||||
instance.update(notification);
|
||||
}
|
||||
else
|
||||
{
|
||||
LLNotificationResponderPtr responder(createResponder(notification_params["name"], notification_params["responder"]));
|
||||
notification->setResponseFunctor(responder);
|
||||
|
||||
instance.add(notification);
|
||||
}
|
||||
|
||||
#if XXX_STINSON_HIDE_NOTIFICATIONS_ON_DND_EXIT
|
||||
// hide script floaters so they don't confuse the user and don't overlap startup toast
|
||||
LLScriptFloaterManager::getInstance()->setFloaterVisible(notification->getID(), false);
|
||||
|
||||
if(notification_channel)
|
||||
{
|
||||
// hide saved toasts so they don't confuse the user
|
||||
notification_channel->hideToast(notification->getID());
|
||||
}
|
||||
#endif // XXX_STINSON_HIDE_NOTIFICATIONS_ON_DND_EXIT
|
||||
}
|
||||
|
||||
// Clear the communication channel history and rewrite the save file to empty it as well
|
||||
LLNotificationChannelPtr channelPtr = getCommunicationChannel();
|
||||
LLCommunicationChannel *commChannel = dynamic_cast<LLCommunicationChannel*>(channelPtr.get());
|
||||
llassert(commChannel != NULL);
|
||||
commChannel->clearHistory();
|
||||
|
||||
saveNotifications();
|
||||
}
|
||||
|
||||
LLNotificationChannelPtr LLDoNotDisturbNotificationStorage::getCommunicationChannel() const
|
||||
|
|
|
|||
Loading…
Reference in New Issue