LLSD LLNotificationsListener::asLLSD(LLNotificationPtr note) { LLSD notificationInfo(note->asLLSD()); // For some reason the following aren't included in LLNotification::asLLSD(). notificationInfo["summary"] = note->summarize(); notificationInfo["id"] = note->id(); notificationInfo["type"] = note->getType(); notificationInfo["message"] = note->getMessage(); notificationInfo["label"] = note->getLabel(); return notificationInfo; }
void LLPersistentNotificationStorage::saveNotifications() { LL_RECORD_BLOCK_TIME(FTM_SAVE_NOTIFICATIONS); boost::intrusive_ptr<LLPersistentNotificationChannel> history_channel = boost::dynamic_pointer_cast<LLPersistentNotificationChannel>(LLNotifications::instance().getChannel("Persistent")); if (!history_channel) { return; } LLSD output = LLSD::emptyMap(); LLSD& data = output["data"]; for ( std::vector<LLNotificationPtr>::iterator it = history_channel->beginHistory(), end_it = history_channel->endHistory(); it != end_it; ++it) { LLNotificationPtr notification = *it; // After a notification was placed in Persist channel, it can become // responded, expired or canceled - in this case we are should not save it if(notification->isRespondedTo() || notification->isCancelled() || notification->isExpired()) { continue; } data.append(notification->asLLSD(true)); if (data.size() >= gSavedSettings.getS32("MaxPersistentNotifications")) { LL_WARNS() << "Too many persistent notifications." << " Saved " << gSavedSettings.getS32("MaxPersistentNotifications") << " of " << history_channel->size() << " persistent notifications." << LL_ENDL; break; } } writeNotifications(output); }