void LLAvatarListItem::updateAvatarProperties() { // NOTE: typically we request these once on creation to avoid excess traffic/processing. //This means updates to these properties won't typically be seen while target is in nearby range. LLAvatarPropertiesProcessor* processor = LLAvatarPropertiesProcessor::getInstance(); processor->addObserver(mAvatarId, this); processor->sendAvatarPropertiesRequest(mAvatarId); }
// If the inspector closes it will delete the pending request object, so the // inspector pointer will be valid for the lifetime of this object LLFetchAvatarData(const LLUUID& avatar_id, LLInspectAvatar* inspector) : mAvatarID(avatar_id), mInspector(inspector) { LLAvatarPropertiesProcessor* processor = LLAvatarPropertiesProcessor::getInstance(); // register ourselves as an observer processor->addObserver(mAvatarID, this); // send a request (duplicates will be suppressed inside the avatar // properties processor) processor->sendAvatarPropertiesRequest(mAvatarID); }
//virtual void LLAvatarIconCtrl::setValue(const LLSD& value) { if (value.isUUID()) { LLAvatarPropertiesProcessor* app = LLAvatarPropertiesProcessor::getInstance(); if (mAvatarId.notNull()) { app->removeObserver(mAvatarId, this); } if (mAvatarId != value.asUUID()) { mAvatarId = value.asUUID(); // *BUG: This will return stale icons if a user changes their // profile picture. However, otherwise we send too many upstream // AvatarPropertiesRequest messages. // to get fresh avatar icon use // LLAvatarIconIDCache::getInstance()->remove(avatar_id); // Check if cache already contains image_id for that avatar if (!updateFromCache()) { // *TODO: Consider getting avatar icon/badge directly from // People API, rather than sending AvatarPropertyRequest // messages. People API already hits the user table. LLIconCtrl::setValue(mDefaultIconName); app->addObserver(mAvatarId, this); app->sendAvatarPropertiesRequest(mAvatarId); } } } else { LLIconCtrl::setValue(value); } LLAvatarNameCache::get(mAvatarId, boost::bind(&LLAvatarIconCtrl::onAvatarNameCache, this, _1, _2)); }
//virtual void LLAvatarIconCtrl::setValue(const LLSD& value) { if (value.isUUID()) { LLAvatarPropertiesProcessor* app = LLAvatarPropertiesProcessor::getInstance(); if (mAvatarId.notNull()) { app->removeObserver(mAvatarId, this); } if (mAvatarId != value.asUUID()) { mAvatarId = value.asUUID(); // *BUG: This will return stale icons if a user changes their // profile picture. However, otherwise we send too many upstream // AvatarPropertiesRequest messages. // to get fresh avatar icon use // LLAvatarIconIDCache::getInstance()->remove(avatar_id); // Check if cache already contains image_id for that avatar if (!updateFromCache()) { LLIconCtrl::setValue(mDefaultIconName); app->addObserver(mAvatarId, this); app->sendAvatarPropertiesRequest(mAvatarId); } } } else { LLIconCtrl::setValue(value); } if (gCacheName) { gCacheName->get(mAvatarId, FALSE, boost::bind(&LLAvatarIconCtrl::nameUpdatedCallback, this, _1, _2, _3, _4)); } }