diff options
author | Erik Kundiman <erik@megapahit.org> | 2024-05-16 13:52:40 +0800 |
---|---|---|
committer | Erik Kundiman <erik@megapahit.org> | 2024-05-16 13:52:40 +0800 |
commit | 6d51e91895a7f2435c46a876410ccc6c63fe8c82 (patch) | |
tree | f2b48ebd99cb414227bf365f47665b8d4baa752b /indra/newview/llexperiencelog.cpp | |
parent | d1b5917bb9c92e4e47eba19b43781e4d1328b1ca (diff) | |
parent | 094dcc07f8c1d90ae723dbe60eddacb90a09eae8 (diff) |
Merge tag '7.1.7-release'
source for viewer 7.1.7.8974243247
Diffstat (limited to 'indra/newview/llexperiencelog.cpp')
-rw-r--r-- | indra/newview/llexperiencelog.cpp | 346 |
1 files changed, 173 insertions, 173 deletions
diff --git a/indra/newview/llexperiencelog.cpp b/indra/newview/llexperiencelog.cpp index c441fbc09f..ce10fba2ca 100644 --- a/indra/newview/llexperiencelog.cpp +++ b/indra/newview/llexperiencelog.cpp @@ -1,25 +1,25 @@ -/** +/** * @file llexperiencelog.cpp * @brief llexperiencelog implementation * * $LicenseInfo:firstyear=2014&license=viewerlgpl$ * Second Life Viewer Source Code * Copyright (C) 2014, 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$ */ @@ -39,246 +39,246 @@ class LLExperienceLogDispatchHandler : public LLDispatchHandler { public: - virtual bool operator()( - const LLDispatcher* dispatcher, - const std::string& key, - const LLUUID& invoice, - const sparam_t& strings) - { - LLSD message; - - sparam_t::const_iterator it = strings.begin(); - if(it != strings.end()){ - const std::string& llsdRaw = *it++; - std::istringstream llsdData(llsdRaw); - if (!LLSDSerialize::deserialize(message, llsdData, llsdRaw.length())) - { - LL_WARNS() << "LLExperienceLogDispatchHandler: Attempted to read parameter data into LLSD but failed:" << llsdRaw << LL_ENDL; - } - } - message["public_id"] = invoice; - - // Object Name - if(it != strings.end()) - { - message["ObjectName"] = *it++; - } - - // parcel Name - if(it != strings.end()) - { - message["ParcelName"] = *it++; - } - message["Count"] = 1; - - LLExperienceLog::instance().handleExperienceMessage(message); - return true; - } + virtual bool operator()( + const LLDispatcher* dispatcher, + const std::string& key, + const LLUUID& invoice, + const sparam_t& strings) + { + LLSD message; + + sparam_t::const_iterator it = strings.begin(); + if(it != strings.end()){ + const std::string& llsdRaw = *it++; + std::istringstream llsdData(llsdRaw); + if (!LLSDSerialize::deserialize(message, llsdData, llsdRaw.length())) + { + LL_WARNS() << "LLExperienceLogDispatchHandler: Attempted to read parameter data into LLSD but failed:" << llsdRaw << LL_ENDL; + } + } + message["public_id"] = invoice; + + // Object Name + if(it != strings.end()) + { + message["ObjectName"] = *it++; + } + + // parcel Name + if(it != strings.end()) + { + message["ParcelName"] = *it++; + } + message["Count"] = 1; + + LLExperienceLog::instance().handleExperienceMessage(message); + return true; + } }; static LLExperienceLogDispatchHandler experience_log_dispatch_handler; void LLExperienceLog::handleExperienceMessage(LLSD& message) { - time_t now; - time(&now); - char daybuf[16];/* Flawfinder: ignore */ - char time_of_day[16];/* Flawfinder: ignore */ - strftime(daybuf, 16, "%Y-%m-%d", localtime(&now)); - strftime(time_of_day, 16, " %H:%M:%S", localtime(&now)); - message["Time"] = time_of_day; - - std::string day = daybuf; - - if(!mEvents.has(day)) - { - mEvents[day] = LLSD::emptyArray(); - } - LLSD& dayEvents = mEvents[day]; - if(dayEvents.size() > 0) - { - LLSD& last = *(dayEvents.rbeginArray()); - if( last["public_id"].asUUID() == message["public_id"].asUUID() - && last["ObjectName"].asString() == message["ObjectName"].asString() - && last["OwnerID"].asUUID() == message["OwnerID"].asUUID() - && last["ParcelName"].asString() == message["ParcelName"].asString() - && last["Permission"].asInteger() == message["Permission"].asInteger()) - { - last["Count"] = last["Count"].asInteger() + 1; - last["Time"] = time_of_day; - mSignals(last); - return; - } - } - message["Time"] = time_of_day; - mEvents[day].append(message); - mEventsToSave[day].append(message); - mSignals(message); + time_t now; + time(&now); + char daybuf[16];/* Flawfinder: ignore */ + char time_of_day[16];/* Flawfinder: ignore */ + strftime(daybuf, 16, "%Y-%m-%d", localtime(&now)); + strftime(time_of_day, 16, " %H:%M:%S", localtime(&now)); + message["Time"] = time_of_day; + + std::string day = daybuf; + + if(!mEvents.has(day)) + { + mEvents[day] = LLSD::emptyArray(); + } + LLSD& dayEvents = mEvents[day]; + if(dayEvents.size() > 0) + { + LLSD& last = *(dayEvents.rbeginArray()); + if( last["public_id"].asUUID() == message["public_id"].asUUID() + && last["ObjectName"].asString() == message["ObjectName"].asString() + && last["OwnerID"].asUUID() == message["OwnerID"].asUUID() + && last["ParcelName"].asString() == message["ParcelName"].asString() + && last["Permission"].asInteger() == message["Permission"].asInteger()) + { + last["Count"] = last["Count"].asInteger() + 1; + last["Time"] = time_of_day; + mSignals(last); + return; + } + } + message["Time"] = time_of_day; + mEvents[day].append(message); + mEventsToSave[day].append(message); + mSignals(message); } LLExperienceLog::LLExperienceLog() - : mMaxDays(7) - , mPageSize(25) - , mNotifyNewEvent(false) + : mMaxDays(7) + , mPageSize(25) + , mNotifyNewEvent(false) { } void LLExperienceLog::initialize() { - loadEvents(); - if(!gGenericDispatcher.isHandlerPresent("ExperienceEvent")) - { - gGenericDispatcher.addHandler("ExperienceEvent", &experience_log_dispatch_handler); - } + loadEvents(); + if(!gGenericDispatcher.isHandlerPresent("ExperienceEvent")) + { + gGenericDispatcher.addHandler("ExperienceEvent", &experience_log_dispatch_handler); + } } std::string LLExperienceLog::getFilename() { - return gDirUtilp->getExpandedFilename(LL_PATH_PER_SL_ACCOUNT, "experience_events.xml"); + return gDirUtilp->getExpandedFilename(LL_PATH_PER_SL_ACCOUNT, "experience_events.xml"); } std::string LLExperienceLog::getPermissionString( const LLSD& message, const std::string& base ) { - std::ostringstream buf; - if(message.has("Permission")) - { - buf << base << message["Permission"].asInteger(); - std::string entry; - if(LLTrans::findString(entry, buf.str())) - { - buf.str(entry); - } - } - - if(buf.str().empty()) - { - buf << base << "Unknown"; - - buf.str(LLTrans::getString(buf.str(), message)); - } - - return buf.str(); + std::ostringstream buf; + if(message.has("Permission")) + { + buf << base << message["Permission"].asInteger(); + std::string entry; + if(LLTrans::findString(entry, buf.str())) + { + buf.str(entry); + } + } + + if(buf.str().empty()) + { + buf << base << "Unknown"; + + buf.str(LLTrans::getString(buf.str(), message)); + } + + return buf.str(); } void LLExperienceLog::notify( LLSD& message ) { - message["EventType"] = getPermissionString(message, "ExperiencePermission"); - if(message.has("IsAttachment") && message["IsAttachment"].asBoolean()) - { - LLNotificationsUtil::add("ExperienceEventAttachment", message); - } - else - { - LLNotificationsUtil::add("ExperienceEvent", message); - } - message.erase("EventType"); + message["EventType"] = getPermissionString(message, "ExperiencePermission"); + if(message.has("IsAttachment") && message["IsAttachment"].asBoolean()) + { + LLNotificationsUtil::add("ExperienceEventAttachment", message); + } + else + { + LLNotificationsUtil::add("ExperienceEvent", message); + } + message.erase("EventType"); } void LLExperienceLog::saveEvents() { - std::string filename = getFilename(); - LLSD settings = LLSD::emptyMap().with("Events", mEventsToSave); + std::string filename = getFilename(); + LLSD settings = LLSD::emptyMap().with("Events", mEventsToSave); - settings["MaxDays"] = (int)mMaxDays; - settings["Notify"] = mNotifyNewEvent; - settings["PageSize"] = (int)mPageSize; + settings["MaxDays"] = (int)mMaxDays; + settings["Notify"] = mNotifyNewEvent; + settings["PageSize"] = (int)mPageSize; - llofstream stream(filename.c_str()); - LLSDSerialize::toPrettyXML(settings, stream); + llofstream stream(filename.c_str()); + LLSDSerialize::toPrettyXML(settings, stream); } void LLExperienceLog::loadEvents() { - LLSD settings = LLSD::emptyMap(); - - std::string filename = getFilename(); - llifstream stream(filename.c_str()); - LLSDSerialize::fromXMLDocument(settings, stream); - - if(settings.has("MaxDays")) - { - setMaxDays((U32)settings["MaxDays"].asInteger()); - } - if(settings.has("Notify")) - { - setNotifyNewEvent(settings["Notify"].asBoolean()); - } - if(settings.has("PageSize")) - { - setPageSize((U32)settings["PageSize"].asInteger()); - } - mEvents.clear(); - if(mMaxDays > 0 && settings.has("Events")) - { - mEvents = settings["Events"]; - mEventsToSave = mEvents; - } + LLSD settings = LLSD::emptyMap(); + + std::string filename = getFilename(); + llifstream stream(filename.c_str()); + LLSDSerialize::fromXMLDocument(settings, stream); + + if(settings.has("MaxDays")) + { + setMaxDays((U32)settings["MaxDays"].asInteger()); + } + if(settings.has("Notify")) + { + setNotifyNewEvent(settings["Notify"].asBoolean()); + } + if(settings.has("PageSize")) + { + setPageSize((U32)settings["PageSize"].asInteger()); + } + mEvents.clear(); + if(mMaxDays > 0 && settings.has("Events")) + { + mEvents = settings["Events"]; + mEventsToSave = mEvents; + } } LLExperienceLog::~LLExperienceLog() { - saveEvents(); + saveEvents(); } void LLExperienceLog::eraseExpired() { - while(mEvents.size() > mMaxDays && mMaxDays > 0) - { - mEvents.erase(mEvents.beginMap()->first); - } + while(mEvents.size() > mMaxDays && mMaxDays > 0) + { + mEvents.erase(mEvents.beginMap()->first); + } } bool LLExperienceLog::isNotExpired(std::string& date) { - LLDate event_date; - S32 month, day, year; - S32 matched = sscanf(date.c_str(), "%d-%d-%d", &year, &month, &day); - if (matched != 3) return false; - event_date.fromYMDHMS(year, month, day); - const U32 seconds_in_day = 24 * 60 * 60; - S32 curr_year = 0, curr_month = 0, curr_day = 0; + LLDate event_date; + S32 month, day, year; + S32 matched = sscanf(date.c_str(), "%d-%d-%d", &year, &month, &day); + if (matched != 3) return false; + event_date.fromYMDHMS(year, month, day); + const U32 seconds_in_day = 24 * 60 * 60; + S32 curr_year = 0, curr_month = 0, curr_day = 0; - LLDate curr_date = LLDate::now(); - curr_date.split(&curr_year, &curr_month, &curr_day); - curr_date.fromYMDHMS(curr_year, curr_month, curr_day); // Set hour, min, and sec to 0 + LLDate curr_date = LLDate::now(); + curr_date.split(&curr_year, &curr_month, &curr_day); + curr_date.fromYMDHMS(curr_year, curr_month, curr_day); // Set hour, min, and sec to 0 - LLDate boundary_date = LLDate(curr_date.secondsSinceEpoch() - seconds_in_day*getMaxDays()); - return event_date >= boundary_date; + LLDate boundary_date = LLDate(curr_date.secondsSinceEpoch() - seconds_in_day*getMaxDays()); + return event_date >= boundary_date; } const LLSD& LLExperienceLog::getEvents() const { - return mEvents; + return mEvents; } void LLExperienceLog::clear() { - mEvents.clear(); + mEvents.clear(); } void LLExperienceLog::setMaxDays( U32 val ) { - mMaxDays = val; + mMaxDays = val; } LLExperienceLog::callback_connection_t LLExperienceLog::addUpdateSignal( const callback_slot_t& cb ) { - return mSignals.connect(cb); + return mSignals.connect(cb); } void LLExperienceLog::setNotifyNewEvent( bool val ) { - mNotifyNewEvent = val; - if(!val && mNotifyConnection.connected()) - { - mNotifyConnection.disconnect(); - } - else if( val && !mNotifyConnection.connected()) - { - mNotifyConnection = addUpdateSignal(boost::function<void(LLSD&)>(LLExperienceLog::notify)); - } + mNotifyNewEvent = val; + if(!val && mNotifyConnection.connected()) + { + mNotifyConnection.disconnect(); + } + else if( val && !mNotifyConnection.connected()) + { + mNotifyConnection = addUpdateSignal(boost::function<void(LLSD&)>(LLExperienceLog::notify)); + } } |