MAINT-8904: Creating new setting in inventory now causes simulator to assign default asset ID to inventory item.
parent
bb836fcdec
commit
d6ede8e81c
|
|
@ -89,7 +89,6 @@ LLSettingsType::type_e LLSettingsType::fromInventoryFlags(U32 flags)
|
|||
return (LLSettingsType::type_e)(flags & LLInventoryItemFlags::II_FLAGS_SUBTYPE_MASK);
|
||||
}
|
||||
|
||||
|
||||
LLInventoryType::EIconName LLSettingsType::getIconName(LLSettingsType::type_e type)
|
||||
{
|
||||
const SettingsEntry *entry = LLSettingsDictionary::instance().lookup(type);
|
||||
|
|
@ -98,6 +97,13 @@ LLInventoryType::EIconName LLSettingsType::getIconName(LLSettingsType::type_e ty
|
|||
return entry->mIconName;
|
||||
}
|
||||
|
||||
std::string LLSettingsType::getDefaultName(LLSettingsType::type_e type)
|
||||
{
|
||||
const SettingsEntry *entry = LLSettingsDictionary::instance().lookup(type);
|
||||
if (!entry)
|
||||
return getDefaultName(ST_INVALID);
|
||||
return entry->mDefaultNewName;
|
||||
}
|
||||
|
||||
void LLSettingsType::initClass(LLTranslationBridge::ptr_t &trans)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -46,6 +46,7 @@ public:
|
|||
|
||||
static type_e fromInventoryFlags(U32 flags);
|
||||
static LLInventoryType::EIconName getIconName(type_e type);
|
||||
static std::string getDefaultName(type_e type);
|
||||
|
||||
static void initClass(LLTranslationBridge::ptr_t &trans);
|
||||
static void cleanupClass();
|
||||
|
|
|
|||
|
|
@ -90,6 +90,31 @@ namespace
|
|||
|
||||
|
||||
//=========================================================================
|
||||
void LLSettingsVOBase::createNewInventoryItem(LLSettingsType::type_e stype, const LLUUID &parent_id, inventory_result_fn callback)
|
||||
{
|
||||
LLTransactionID tid;
|
||||
U32 nextOwnerPerm = LLPermissions::DEFAULT.getMaskNextOwner();
|
||||
|
||||
if (!LLEnvironment::instance().isInventoryEnabled())
|
||||
{
|
||||
LL_WARNS("SETTINGS") << "Region does not support settings inventory objects." << LL_ENDL;
|
||||
LLNotificationsUtil::add("SettingsUnsuported");
|
||||
return;
|
||||
}
|
||||
|
||||
tid.generate();
|
||||
|
||||
LLPointer<LLInventoryCallback> cb = new LLSettingsInventoryCB([callback](const LLUUID &inventoryId) {
|
||||
LLSettingsVOBase::onInventoryItemCreated(inventoryId, LLSettingsBase::ptr_t(), callback);
|
||||
});
|
||||
|
||||
create_inventory_settings(gAgent.getID(), gAgent.getSessionID(),
|
||||
parent_id, LLTransactionID::tnull,
|
||||
LLSettingsType::getDefaultName(stype), "new settings collection.",
|
||||
stype, nextOwnerPerm, cb);
|
||||
}
|
||||
|
||||
|
||||
void LLSettingsVOBase::createInventoryItem(const LLSettingsBase::ptr_t &settings, const LLUUID &parent_id, inventory_result_fn callback)
|
||||
{
|
||||
LLTransactionID tid;
|
||||
|
|
@ -116,6 +141,20 @@ void LLSettingsVOBase::createInventoryItem(const LLSettingsBase::ptr_t &settings
|
|||
|
||||
void LLSettingsVOBase::onInventoryItemCreated(const LLUUID &inventoryId, LLSettingsBase::ptr_t settings, inventory_result_fn callback)
|
||||
{
|
||||
if (!settings)
|
||||
{ // The item was created as new with no settings passed in. Simulator should have given it the default for the type... check ID,
|
||||
// no need to upload asset.
|
||||
LLUUID asset_id;
|
||||
LLViewerInventoryItem *pitem = gInventory.getItem(inventoryId);
|
||||
|
||||
if (pitem)
|
||||
{
|
||||
asset_id = pitem->getAssetUUID();
|
||||
}
|
||||
if (callback)
|
||||
callback(asset_id, inventoryId, LLUUID::null, LLSD());
|
||||
return;
|
||||
}
|
||||
// We need to update some inventory stuff here.... maybe.
|
||||
updateInventoryItem(settings, inventoryId, callback);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -47,6 +47,7 @@ public:
|
|||
typedef std::function<void(LLUUID asset_id, LLSettingsBase::ptr_t settins, S32 status, LLExtStat extstat)> asset_download_fn;
|
||||
typedef std::function<void(LLUUID asset_id, LLUUID inventory_id, LLUUID object_id, LLSD results)> inventory_result_fn;
|
||||
|
||||
static void createNewInventoryItem(LLSettingsType::type_e stype, const LLUUID &parent_id, inventory_result_fn callback = inventory_result_fn());
|
||||
static void createInventoryItem(const LLSettingsBase::ptr_t &settings, const LLUUID &parent_id, inventory_result_fn callback = inventory_result_fn());
|
||||
|
||||
static void updateInventoryItem(const LLSettingsBase::ptr_t &settings, LLUUID inv_item_id, inventory_result_fn callback = inventory_result_fn());
|
||||
|
|
|
|||
|
|
@ -1823,37 +1823,29 @@ void menu_create_inventory_item(LLInventoryPanel* panel, LLFolderBridge *bridge,
|
|||
}
|
||||
else if (("sky" == type_name) || ("water" == type_name) || ("daycycle" == type_name))
|
||||
{
|
||||
LLSettingsBase::ptr_t settings;
|
||||
std::string name;
|
||||
LLSettingsType::type_e stype(LLSettingsType::ST_NONE);
|
||||
|
||||
if ("sky" == type_name)
|
||||
{
|
||||
settings = LLSettingsVOSky::buildDefaultSky();
|
||||
name = LLTrans::getString("New Sky");
|
||||
stype = LLSettingsType::ST_SKY;
|
||||
}
|
||||
else if ("water" == type_name)
|
||||
{
|
||||
settings = LLSettingsVOWater::buildDefaultWater();
|
||||
name = LLTrans::getString("New Water");
|
||||
stype = LLSettingsType::ST_WATER;
|
||||
}
|
||||
else if ("daycycle" == type_name)
|
||||
{
|
||||
settings = LLSettingsVODay::buildDefaultDayCycle();
|
||||
name = LLTrans::getString("New Daycycle");
|
||||
stype = LLSettingsType::ST_DAYCYCLE;
|
||||
}
|
||||
else
|
||||
LL_ERRS(LOG_INV) << "Unknown settings type: '" << type_name << "'" << LL_ENDL;
|
||||
|
||||
if (!settings)
|
||||
{
|
||||
LL_WARNS(LOG_INV) << "Unable to create a default setting object of type '" << type_name << "'" << LL_ENDL;
|
||||
LL_ERRS(LOG_INV) << "Unknown settings type: '" << type_name << "'" << LL_ENDL;
|
||||
return;
|
||||
}
|
||||
|
||||
LLUUID parent_id = bridge ? bridge->getUUID() : gInventory.findCategoryUUIDForType(LLFolderType::FT_SETTINGS);
|
||||
|
||||
settings->setName(name);
|
||||
LLSettingsVOBase::createInventoryItem(settings, parent_id);
|
||||
LLSettingsVOBase::createNewInventoryItem(stype, parent_id);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
|
|||
Loading…
Reference in New Issue