MAINT-3301 FIXED Use separate xml files (saved as open_notifications_<grid>.xml) for each grid.

master
Mnikolenko ProductEngine 2014-06-23 11:02:51 +03:00
parent 7991fe96ec
commit e5b930c92a
3 changed files with 27 additions and 8 deletions

View File

@ -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;
}

View File

@ -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

View File

@ -35,7 +35,7 @@
#include "llscreenchannel.h"
#include "llscriptfloater.h"
#include "llviewermessage.h"
#include "llviewernetwork.h"
LLPersistentNotificationStorage::LLPersistentNotificationStorage()
: LLSingleton<LLPersistentNotificationStorage>()
, 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));
}