summaryrefslogtreecommitdiff
path: root/indra/newview/llteleporthistorystorage.cpp
diff options
context:
space:
mode:
authorAndrey Lihatskiy <alihatskiy@productengine.com>2024-05-15 16:35:49 +0300
committerGitHub <noreply@github.com>2024-05-15 16:35:49 +0300
commite49dcb8d0c9f539997effb640e350d9d0689aae6 (patch)
tree1bf99eaccce6de17c62f13c6595f7f497548dc5c /indra/newview/llteleporthistorystorage.cpp
parent531cd34f670170ade57f8813fe48012b61a1d3c2 (diff)
parent5f8a7374b9f18e0112d6749a9c845bd077a81acb (diff)
Merge pull request #1476 from secondlife/marchcat/x-b-merge
Maint X -> Maint B merge
Diffstat (limited to 'indra/newview/llteleporthistorystorage.cpp')
-rw-r--r--indra/newview/llteleporthistorystorage.cpp300
1 files changed, 150 insertions, 150 deletions
diff --git a/indra/newview/llteleporthistorystorage.cpp b/indra/newview/llteleporthistorystorage.cpp
index 7d4988c0cc..fa4e92e209 100644
--- a/indra/newview/llteleporthistorystorage.cpp
+++ b/indra/newview/llteleporthistorystorage.cpp
@@ -5,21 +5,21 @@
* $LicenseInfo:firstyear=2009&license=viewerlgpl$
* Second Life Viewer Source Code
* Copyright (C) 2010, Linden Research, Inc.
- *
+ *
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation;
* version 2.1 of the License only.
- *
+ *
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
- *
+ *
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- *
+ *
* Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
@@ -41,39 +41,39 @@ const F64 MAX_GLOBAL_POS_OFFSET = 5.0f;
LLTeleportHistoryPersistentItem::LLTeleportHistoryPersistentItem(const LLSD& val)
{
- mTitle = val["title"].asString();
- mGlobalPos.setValue(val["global_pos"]);
- mDate = val["date"];
+ mTitle = val["title"].asString();
+ mGlobalPos.setValue(val["global_pos"]);
+ mDate = val["date"];
}
LLSD LLTeleportHistoryPersistentItem::toLLSD() const
{
- LLSD val;
+ LLSD val;
- val["title"] = mTitle;
- val["global_pos"] = mGlobalPos.getValue();
- val["date"] = mDate;
+ val["title"] = mTitle;
+ val["global_pos"] = mGlobalPos.getValue();
+ val["date"] = mDate;
- return val;
+ return val;
}
struct LLSortItemsByDate
{
- bool operator()(const LLTeleportHistoryPersistentItem& a, const LLTeleportHistoryPersistentItem& b)
- {
- return a.mDate < b.mDate;
- }
+ bool operator()(const LLTeleportHistoryPersistentItem& a, const LLTeleportHistoryPersistentItem& b)
+ {
+ return a.mDate < b.mDate;
+ }
};
LLTeleportHistoryStorage::LLTeleportHistoryStorage() :
- mFilename("teleport_history.txt")
+ mFilename("teleport_history.txt")
{
- mItems.clear();
- LLTeleportHistory *th = LLTeleportHistory::getInstance();
- if (th)
- th->setHistoryChangedCallback(boost::bind(&LLTeleportHistoryStorage::onTeleportHistoryChange, this));
+ mItems.clear();
+ LLTeleportHistory *th = LLTeleportHistory::getInstance();
+ if (th)
+ th->setHistoryChangedCallback(boost::bind(&LLTeleportHistoryStorage::onTeleportHistoryChange, this));
- load();
+ load();
}
LLTeleportHistoryStorage::~LLTeleportHistoryStorage()
@@ -82,183 +82,183 @@ LLTeleportHistoryStorage::~LLTeleportHistoryStorage()
void LLTeleportHistoryStorage::onTeleportHistoryChange()
{
- LLTeleportHistory *th = LLTeleportHistory::getInstance();
- if (!th)
- return;
+ LLTeleportHistory *th = LLTeleportHistory::getInstance();
+ if (!th)
+ return;
- // Hacky sanity check. (EXT-6798)
- if (th->getItems().size() == 0)
- {
- llassert(!"Inconsistent teleport history state");
- return;
- }
+ // Hacky sanity check. (EXT-6798)
+ if (th->getItems().size() == 0)
+ {
+ llassert(!"Inconsistent teleport history state");
+ return;
+ }
- const LLTeleportHistoryItem &item = th->getItems()[th->getCurrentItemIndex()];
+ const LLTeleportHistoryItem &item = th->getItems()[th->getCurrentItemIndex()];
- addItem(item.mTitle, item.mGlobalPos);
- save();
+ addItem(item.mTitle, item.mGlobalPos);
+ save();
}
void LLTeleportHistoryStorage::purgeItems()
{
- mItems.clear();
- mHistoryChangedSignal(-1);
+ mItems.clear();
+ mHistoryChangedSignal(-1);
}
void LLTeleportHistoryStorage::addItem(const std::string title, const LLVector3d& global_pos)
{
- addItem(title, global_pos, LLDate::now());
+ addItem(title, global_pos, LLDate::now());
}
bool LLTeleportHistoryStorage::compareByTitleAndGlobalPos(const LLTeleportHistoryPersistentItem& a, const LLTeleportHistoryPersistentItem& b)
{
- return a.mTitle == b.mTitle && (a.mGlobalPos - b.mGlobalPos).length() < MAX_GLOBAL_POS_OFFSET;
+ return a.mTitle == b.mTitle && (a.mGlobalPos - b.mGlobalPos).length() < MAX_GLOBAL_POS_OFFSET;
}
void LLTeleportHistoryStorage::addItem(const std::string title, const LLVector3d& global_pos, const LLDate& date)
{
- LLTeleportHistoryPersistentItem item(title, global_pos, date);
-
- slurl_list_t::iterator item_iter = std::find_if(mItems.begin(), mItems.end(),
- boost::bind(&LLTeleportHistoryStorage::compareByTitleAndGlobalPos, this, _1, item));
-
- // If there is such item already, remove it, since new item is more recent
- S32 removed_index = -1;
- if (item_iter != mItems.end())
- {
- removed_index = item_iter - mItems.begin();
- mItems.erase(item_iter);
- }
-
- mItems.push_back(item);
-
- // Check whether sorting is needed
- if (mItems.size() > 1)
- {
- item_iter = mItems.end();
-
- item_iter--;
- item_iter--;
-
- // If second to last item is more recent than last, then resort items
- if (item_iter->mDate > item.mDate)
- {
- removed_index = -1;
- std::sort(mItems.begin(), mItems.end(), LLSortItemsByDate());
- }
- }
-
- mHistoryChangedSignal(removed_index);
+ LLTeleportHistoryPersistentItem item(title, global_pos, date);
+
+ slurl_list_t::iterator item_iter = std::find_if(mItems.begin(), mItems.end(),
+ boost::bind(&LLTeleportHistoryStorage::compareByTitleAndGlobalPos, this, _1, item));
+
+ // If there is such item already, remove it, since new item is more recent
+ S32 removed_index = -1;
+ if (item_iter != mItems.end())
+ {
+ removed_index = item_iter - mItems.begin();
+ mItems.erase(item_iter);
+ }
+
+ mItems.push_back(item);
+
+ // Check whether sorting is needed
+ if (mItems.size() > 1)
+ {
+ item_iter = mItems.end();
+
+ item_iter--;
+ item_iter--;
+
+ // If second to last item is more recent than last, then resort items
+ if (item_iter->mDate > item.mDate)
+ {
+ removed_index = -1;
+ std::sort(mItems.begin(), mItems.end(), LLSortItemsByDate());
+ }
+ }
+
+ mHistoryChangedSignal(removed_index);
}
void LLTeleportHistoryStorage::removeItem(S32 idx)
{
- if (idx < 0 || idx >= (S32)mItems.size())
- return;
+ if (idx < 0 || idx >= (S32)mItems.size())
+ return;
- mItems.erase (mItems.begin() + idx);
+ mItems.erase (mItems.begin() + idx);
}
void LLTeleportHistoryStorage::save()
{
// build filename for each user
- std::string resolvedFilename = gDirUtilp->getExpandedFilename(LL_PATH_PER_SL_ACCOUNT, mFilename);
-
- // open the history file for writing
- llofstream file(resolvedFilename.c_str());
- if (!file.is_open())
- {
- LL_WARNS() << "can't open teleport history file \"" << mFilename << "\" for writing" << LL_ENDL;
- return;
- }
-
- for (size_t i=0; i<mItems.size(); i++)
- {
- LLSD s_item = mItems[i].toLLSD();
- file << LLSDOStreamer<LLSDNotationFormatter>(s_item) << std::endl;
- }
-
- file.close();
+ std::string resolvedFilename = gDirUtilp->getExpandedFilename(LL_PATH_PER_SL_ACCOUNT, mFilename);
+
+ // open the history file for writing
+ llofstream file(resolvedFilename.c_str());
+ if (!file.is_open())
+ {
+ LL_WARNS() << "can't open teleport history file \"" << mFilename << "\" for writing" << LL_ENDL;
+ return;
+ }
+
+ for (size_t i=0; i<mItems.size(); i++)
+ {
+ LLSD s_item = mItems[i].toLLSD();
+ file << LLSDOStreamer<LLSDNotationFormatter>(s_item) << std::endl;
+ }
+
+ file.close();
}
void LLTeleportHistoryStorage::load()
{
// build filename for each user
- std::string resolved_filename = gDirUtilp->getExpandedFilename(LL_PATH_PER_SL_ACCOUNT, mFilename);
-
- // open the history file for reading
- llifstream file(resolved_filename.c_str());
- if (!file.is_open())
- {
- LL_WARNS() << "can't load teleport history from file \"" << mFilename << "\"" << LL_ENDL;
- return;
- }
-
- // remove current entries before we load over them
- mItems.clear();
-
- // the parser's destructor is protected so we cannot create in the stack.
- LLPointer<LLSDParser> parser = new LLSDNotationParser();
- std::string line;
- while (std::getline(file, line))
- {
- if (line.empty())
- {
- LL_WARNS() << "Teleport history contains empty line."<< LL_ENDL;
- continue;
- }
-
- LLSD s_item;
- std::istringstream iss(line);
- if (parser->parse(iss, s_item, line.length()) == LLSDParser::PARSE_FAILURE)
- {
- LL_INFOS() << "Parsing saved teleport history failed" << LL_ENDL;
- break;
- }
-
- mItems.push_back(s_item);
- }
-
- file.close();
-
- std::sort(mItems.begin(), mItems.end(), LLSortItemsByDate());
-
- mHistoryChangedSignal(-1);
+ std::string resolved_filename = gDirUtilp->getExpandedFilename(LL_PATH_PER_SL_ACCOUNT, mFilename);
+
+ // open the history file for reading
+ llifstream file(resolved_filename.c_str());
+ if (!file.is_open())
+ {
+ LL_WARNS() << "can't load teleport history from file \"" << mFilename << "\"" << LL_ENDL;
+ return;
+ }
+
+ // remove current entries before we load over them
+ mItems.clear();
+
+ // the parser's destructor is protected so we cannot create in the stack.
+ LLPointer<LLSDParser> parser = new LLSDNotationParser();
+ std::string line;
+ while (std::getline(file, line))
+ {
+ if (line.empty())
+ {
+ LL_WARNS() << "Teleport history contains empty line."<< LL_ENDL;
+ continue;
+ }
+
+ LLSD s_item;
+ std::istringstream iss(line);
+ if (parser->parse(iss, s_item, line.length()) == LLSDParser::PARSE_FAILURE)
+ {
+ LL_INFOS() << "Parsing saved teleport history failed" << LL_ENDL;
+ break;
+ }
+
+ mItems.push_back(s_item);
+ }
+
+ file.close();
+
+ std::sort(mItems.begin(), mItems.end(), LLSortItemsByDate());
+
+ mHistoryChangedSignal(-1);
}
void LLTeleportHistoryStorage::dump() const
{
- LL_INFOS() << "Teleport history storage dump (" << mItems.size() << " items):" << LL_ENDL;
+ LL_INFOS() << "Teleport history storage dump (" << mItems.size() << " items):" << LL_ENDL;
- for (size_t i=0; i<mItems.size(); i++)
- {
- std::stringstream line;
- line << i << ": " << mItems[i].mTitle;
- line << " global pos: " << mItems[i].mGlobalPos;
- line << " date: " << mItems[i].mDate;
+ for (size_t i=0; i<mItems.size(); i++)
+ {
+ std::stringstream line;
+ line << i << ": " << mItems[i].mTitle;
+ line << " global pos: " << mItems[i].mGlobalPos;
+ line << " date: " << mItems[i].mDate;
- LL_INFOS() << line.str() << LL_ENDL;
- }
+ LL_INFOS() << line.str() << LL_ENDL;
+ }
}
boost::signals2::connection LLTeleportHistoryStorage::setHistoryChangedCallback(history_callback_t cb)
{
- return mHistoryChangedSignal.connect(cb);
+ return mHistoryChangedSignal.connect(cb);
}
void LLTeleportHistoryStorage::goToItem(S32 idx)
{
- // Validate specified index.
- if (idx < 0 || idx >= (S32)mItems.size())
- {
- LL_WARNS() << "Invalid teleport history index (" << idx << ") specified" << LL_ENDL;
- dump();
- return;
- }
-
- // Attempt to teleport to the requested item.
- gAgent.teleportViaLocation(mItems[idx].mGlobalPos);
+ // Validate specified index.
+ if (idx < 0 || idx >= (S32)mItems.size())
+ {
+ LL_WARNS() << "Invalid teleport history index (" << idx << ") specified" << LL_ENDL;
+ dump();
+ return;
+ }
+
+ // Attempt to teleport to the requested item.
+ gAgent.teleportViaLocation(mItems[idx].mGlobalPos);
}
void LLTeleportHistoryStorage::showItemOnMap(S32 idx)