From e5b930c92a4ece0ca6c830c21b4b321833d9239f Mon Sep 17 00:00:00 2001 From: Mnikolenko ProductEngine Date: Mon, 23 Jun 2014 11:02:51 +0300 Subject: MAINT-3301 FIXED Use separate xml files (saved as open_notifications_.xml) for each grid. --- indra/newview/llnotificationstorage.cpp | 24 ++++++++++++++++++----- indra/newview/llnotificationstorage.h | 4 +++- indra/newview/llpersistentnotificationstorage.cpp | 7 +++++-- 3 files changed, 27 insertions(+), 8 deletions(-) (limited to 'indra/newview') diff --git a/indra/newview/llnotificationstorage.cpp b/indra/newview/llnotificationstorage.cpp index 2923221c90..e9970de58c 100755 --- a/indra/newview/llnotificationstorage.cpp +++ b/indra/newview/llnotificationstorage.cpp @@ -103,19 +103,21 @@ bool LLNotificationStorage::writeNotifications(const LLSD& pNotificationData) co return didFileOpen; } -bool LLNotificationStorage::readNotifications(LLSD& pNotificationData) const +bool LLNotificationStorage::readNotifications(LLSD& pNotificationData, bool is_new_filename) const { - LL_INFOS("LLNotificationStorage") << "starting read '" << mFileName << "'" << LL_ENDL; + std::string filename = is_new_filename? mFileName : mOldFileName; + + LL_INFOS("LLNotificationStorage") << "starting read '" << filename << "'" << LL_ENDL; bool didFileRead; pNotificationData.clear(); - llifstream notifyFile(mFileName.c_str()); + llifstream notifyFile(filename.c_str()); didFileRead = notifyFile.is_open(); if (!didFileRead) { - LL_WARNS("LLNotificationStorage") << "Failed to open file '" << mFileName << "'" << LL_ENDL; + LL_WARNS("LLNotificationStorage") << "Failed to open file '" << filename << "'" << LL_ENDL; } else { @@ -128,7 +130,19 @@ bool LLNotificationStorage::readNotifications(LLSD& pNotificationData) const } } - LL_INFOS("LLNotificationStorage") << "ending read '" << mFileName << "'" << LL_ENDL; + LL_INFOS("LLNotificationStorage") << "ending read '" << filename << "'" << LL_ENDL; + if (!didFileRead) + { + if(is_new_filename) + { + didFileRead = readNotifications(pNotificationData, false); + if(didFileRead) + { + writeNotifications(pNotificationData); + LLFile::remove(mOldFileName); + } + } + } return didFileRead; } diff --git a/indra/newview/llnotificationstorage.h b/indra/newview/llnotificationstorage.h index 53fd898ea4..21d7123747 100755 --- a/indra/newview/llnotificationstorage.h +++ b/indra/newview/llnotificationstorage.h @@ -43,13 +43,15 @@ public: protected: bool writeNotifications(const LLSD& pNotificationData) const; - bool readNotifications(LLSD& pNotificationData) const; + bool readNotifications(LLSD& pNotificationData, bool is_new_filename = true) const; void setFileName(std::string pFileName) {mFileName = pFileName;} + void setOldFileName(std::string pFileName) {mOldFileName = pFileName;} LLNotificationResponderInterface* createResponder(const std::string& pNotificationName, const LLSD& pParams) const; private: std::string mFileName; + std::string mOldFileName; }; #endif // LL_NOTIFICATIONSTORAGE_H diff --git a/indra/newview/llpersistentnotificationstorage.cpp b/indra/newview/llpersistentnotificationstorage.cpp index 8658921dc4..9e4f50b7a7 100755 --- a/indra/newview/llpersistentnotificationstorage.cpp +++ b/indra/newview/llpersistentnotificationstorage.cpp @@ -35,7 +35,7 @@ #include "llscreenchannel.h" #include "llscriptfloater.h" #include "llviewermessage.h" - +#include "llviewernetwork.h" LLPersistentNotificationStorage::LLPersistentNotificationStorage() : LLSingleton() , LLNotificationStorage("") @@ -158,7 +158,10 @@ void LLPersistentNotificationStorage::loadNotifications() void LLPersistentNotificationStorage::initialize() { - setFileName(gDirUtilp->getExpandedFilename(LL_PATH_PER_SL_ACCOUNT, "open_notifications.xml")); + std::string file_name = "open_notifications_" + LLGridManager::getInstance()->getGrid() + ".xml"; + setFileName(gDirUtilp->getExpandedFilename(LL_PATH_PER_SL_ACCOUNT, file_name)); + setOldFileName(gDirUtilp->getExpandedFilename(LL_PATH_PER_SL_ACCOUNT, "open_notifications.xml")); + LLNotifications::instance().getChannel("Persistent")-> connectChanged(boost::bind(&LLPersistentNotificationStorage::onPersistentChannelChanged, this, _1)); } -- cgit v1.2.3