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);
}
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);
    if (!file.is_open())
    {
        llwarns << "can't load teleport history from file \"" << mFilename << "\"" << llendl;
        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))
    {
        LLSD s_item;
        std::istringstream iss(line);
        if (parser->parse(iss, s_item, line.length()) == LLSDParser::PARSE_FAILURE)
        {
            llinfos << "Parsing saved teleport history failed" << llendl;
            break;
        }

        mItems.push_back(s_item);
    }

    file.close();

    std::sort(mItems.begin(), mItems.end(), LLSortItemsByDate());

    mHistoryChangedSignal(-1);
}
void LLTeleportHistoryStorage::purgeItems()
{
    mItems.clear();
    mHistoryChangedSignal(-1);
}
Exemplo n.º 4
0
void LLTeleportHistory::onHistoryChanged()
{
	mHistoryChangedSignal();
}