diff options
| author | mberezhnoy <mberezhnoy@productengine.com> | 2013-06-22 02:49:56 +0300 | 
|---|---|---|
| committer | mberezhnoy <mberezhnoy@productengine.com> | 2013-06-22 02:49:56 +0300 | 
| commit | bc329098a7e1829838eeae93b50e96f45b7572af (patch) | |
| tree | 797edcb41200afecbb3330906641355301e3e3bb | |
| parent | 7d08262954c9638f2ec55414429a0d00ce77d5b3 (diff) | |
| parent | 725b107e0861c9370c56baf7c876fb7e3c37857a (diff) | |
merge
| -rwxr-xr-x | indra/newview/llchannelmanager.cpp | 2 | ||||
| -rwxr-xr-x | indra/newview/lldonotdisturbnotificationstorage.cpp | 3 | ||||
| -rwxr-xr-x | indra/newview/llnotificationstorage.h | 1 | ||||
| -rwxr-xr-x | indra/newview/llpersistentnotificationstorage.cpp | 24 | ||||
| -rwxr-xr-x | indra/newview/llpersistentnotificationstorage.h | 3 | ||||
| -rwxr-xr-x | indra/newview/llstartup.cpp | 6 | 
6 files changed, 33 insertions, 6 deletions
| diff --git a/indra/newview/llchannelmanager.cpp b/indra/newview/llchannelmanager.cpp index 43757d0174..8b2d9e639f 100755 --- a/indra/newview/llchannelmanager.cpp +++ b/indra/newview/llchannelmanager.cpp @@ -139,8 +139,6 @@ void LLChannelManager::onLoginCompleted()  	}  	LLPersistentNotificationStorage::getInstance()->loadNotifications(); - -	LLDoNotDisturbNotificationStorage::getInstance()->initialize();  	LLDoNotDisturbNotificationStorage::getInstance()->loadNotifications();  } diff --git a/indra/newview/lldonotdisturbnotificationstorage.cpp b/indra/newview/lldonotdisturbnotificationstorage.cpp index 71bc4f15d2..495cd01349 100755 --- a/indra/newview/lldonotdisturbnotificationstorage.cpp +++ b/indra/newview/lldonotdisturbnotificationstorage.cpp @@ -70,7 +70,7 @@ BOOL LLDoNotDisturbNotificationStorageTimer::tick()  LLDoNotDisturbNotificationStorage::LLDoNotDisturbNotificationStorage()  	: LLSingleton<LLDoNotDisturbNotificationStorage>() -	, LLNotificationStorage(gDirUtilp->getExpandedFilename(LL_PATH_PER_SL_ACCOUNT, "dnd_notifications.xml")) +	, LLNotificationStorage("")      , mDirty(false)  {      nameToPayloadParameterMap[toastName] = "SESSION_ID"; @@ -83,6 +83,7 @@ LLDoNotDisturbNotificationStorage::~LLDoNotDisturbNotificationStorage()  void LLDoNotDisturbNotificationStorage::initialize()  { +	setFileName(gDirUtilp->getExpandedFilename(LL_PATH_PER_SL_ACCOUNT, "dnd_notifications.xml"));  	getCommunicationChannel()->connectFailedFilter(boost::bind(&LLDoNotDisturbNotificationStorage::onChannelChanged, this, _1));  } diff --git a/indra/newview/llnotificationstorage.h b/indra/newview/llnotificationstorage.h index 7aabf7d09e..53fd898ea4 100755 --- a/indra/newview/llnotificationstorage.h +++ b/indra/newview/llnotificationstorage.h @@ -44,6 +44,7 @@ public:  protected:  	bool writeNotifications(const LLSD& pNotificationData) const;  	bool readNotifications(LLSD& pNotificationData) const; +	void setFileName(std::string pFileName) {mFileName = pFileName;}  	LLNotificationResponderInterface* createResponder(const std::string& pNotificationName, const LLSD& pParams) const; diff --git a/indra/newview/llpersistentnotificationstorage.cpp b/indra/newview/llpersistentnotificationstorage.cpp index 666f10df96..076c3e0235 100755 --- a/indra/newview/llpersistentnotificationstorage.cpp +++ b/indra/newview/llpersistentnotificationstorage.cpp @@ -38,7 +38,8 @@  LLPersistentNotificationStorage::LLPersistentNotificationStorage()  	: LLSingleton<LLPersistentNotificationStorage>() -	, LLNotificationStorage(gDirUtilp->getExpandedFilename(LL_PATH_PER_SL_ACCOUNT, "open_notifications.xml")) +	, LLNotificationStorage("") +	, mLoaded(false)  {  } @@ -89,8 +90,13 @@ void LLPersistentNotificationStorage::loadNotifications()  	LL_INFOS("LLPersistentNotificationStorage") << "start loading notifications" << LL_ENDL; -	LLNotifications::instance().getChannel("Persistent")-> -		connectChanged(boost::bind(&LLPersistentNotificationStorage::onPersistentChannelChanged, this, _1)); +	if (mLoaded) +	{ +		LL_INFOS("LLPersistentNotificationStorage") << "notifications already loaded, exiting" << LL_ENDL; +		return; +	} + +	mLoaded = true;  	LLSD input;  	if (!readNotifications(input) ||input.isUndefined()) @@ -135,8 +141,20 @@ void LLPersistentNotificationStorage::loadNotifications()  	LL_INFOS("LLPersistentNotificationStorage") << "finished loading notifications" << LL_ENDL;  } +void LLPersistentNotificationStorage::initialize() +{ +	setFileName(gDirUtilp->getExpandedFilename(LL_PATH_PER_SL_ACCOUNT, "open_notifications.xml")); +	LLNotifications::instance().getChannel("Persistent")-> +		connectChanged(boost::bind(&LLPersistentNotificationStorage::onPersistentChannelChanged, this, _1)); +} +  bool LLPersistentNotificationStorage::onPersistentChannelChanged(const LLSD& payload)  { +	// In case we received channel changed signal but haven't yet loaded notifications, do it +	if (!mLoaded) +	{ +		loadNotifications(); +	}  	// we ignore "load" messages, but rewrite the persistence file on any other  	const std::string sigtype = payload["sigtype"].asString();  	if ("load" != sigtype) diff --git a/indra/newview/llpersistentnotificationstorage.h b/indra/newview/llpersistentnotificationstorage.h index 98a825d2c1..bf0306380e 100755 --- a/indra/newview/llpersistentnotificationstorage.h +++ b/indra/newview/llpersistentnotificationstorage.h @@ -53,10 +53,13 @@ public:  	void saveNotifications();  	void loadNotifications(); +	void initialize(); +  protected:  private:  	bool onPersistentChannelChanged(const LLSD& payload); +	bool mLoaded;  };  #endif // LL_LLPERSISTENTNOTIFICATIONSTORAGE_H diff --git a/indra/newview/llstartup.cpp b/indra/newview/llstartup.cpp index cff3a7e02a..67a76460a7 100755 --- a/indra/newview/llstartup.cpp +++ b/indra/newview/llstartup.cpp @@ -51,6 +51,7 @@  #include "lllandmark.h"  #include "llcachename.h"  #include "lldir.h" +#include "lldonotdisturbnotificationstorage.h"  #include "llerrorcontrol.h"  #include "llfloaterreg.h"  #include "llfocusmgr.h" @@ -68,6 +69,7 @@  #include "llfloaterimnearbychat.h"  #include "llnotifications.h"  #include "llnotificationsutil.h" +#include "llpersistentnotificationstorage.h"  #include "llteleporthistory.h"  #include "llregionhandle.h"  #include "llsd.h" @@ -900,6 +902,10 @@ bool idle_startup()  		gDirUtilp->setLindenUserDir(userid);  		LLFile::mkdir(gDirUtilp->getLindenUserDir()); +		// As soon as directories are ready initialize notification storages +		LLPersistentNotificationStorage::getInstance()->initialize(); +		LLDoNotDisturbNotificationStorage::getInstance()->initialize(); +  		// Set PerAccountSettingsFile to the default value.  		gSavedSettings.setString("PerAccountSettingsFile",  			gDirUtilp->getExpandedFilename(LL_PATH_PER_SL_ACCOUNT,  | 
