From 9aa7feee4eae4fbc34d7e777c94be2e024f6c053 Mon Sep 17 00:00:00 2001 From: Rider Linden Date: Wed, 26 Aug 2026 09:52:39 -0700 Subject: Issue #6192: object.publish was not sending can_save_back. --- indra/newview/llpublishedobjectmgr.cpp | 5 +++++ 1 file changed, 5 insertions(+) (limited to 'indra/newview/llpublishedobjectmgr.cpp') diff --git a/indra/newview/llpublishedobjectmgr.cpp b/indra/newview/llpublishedobjectmgr.cpp index d92bb382de..1eb000d98f 100644 --- a/indra/newview/llpublishedobjectmgr.cpp +++ b/indra/newview/llpublishedobjectmgr.cpp @@ -737,6 +737,11 @@ LLSD LLPublishedObjectMgr::buildPublishedObjectLLSD(LLViewerObject* root) const { pub["region"] = root->getRegion()->getName(); } + const PublishedObjectInfo* published_info = getPublished(root->getID()); + if (published_info) + { + pub["can_save_back"] = published_info->mCanSaveBackToContents; + } pub["inventory"] = buildPrimInventoryLLSD(root); LLSD linked_objects = LLSD::emptyArray(); -- cgit v1.3 From af70716e4e7dc43434c1859fa6d96e7dea5ffb9b Mon Sep 17 00:00:00 2001 From: Rider Linden Date: Wed, 26 Aug 2026 10:38:17 -0700 Subject: Issue #6182: Include object permissions for both root object and linked prims. --- doc/external-editor-json-rpc.md | 3 ++- indra/newview/llpublishedobjectmgr.cpp | 20 ++++++++++++++++++++ 2 files changed, 22 insertions(+), 1 deletion(-) (limited to 'indra/newview/llpublishedobjectmgr.cpp') diff --git a/doc/external-editor-json-rpc.md b/doc/external-editor-json-rpc.md index 3744bfd5e9..74ee34f528 100644 --- a/doc/external-editor-json-rpc.md +++ b/doc/external-editor-json-rpc.md @@ -958,6 +958,7 @@ interface LinkedObject { link_number: number; // Link number (root=1, children≄2) link_name: string; link_description?: string; + permissions?: ObjectPermissions; // Actual permissions for this linked prim inventory: ObjectInventoryItem[]; } @@ -973,7 +974,7 @@ interface PublishedObject { object_description?: string; region?: string; owner_id?: string; - permissions?: ObjectPermissions; + permissions?: ObjectPermissions; // Actual permissions for this root prim can_save_back?: boolean; // Whether Save Back to Contents is currently available for this object inventory: ObjectInventoryItem[]; // Root prim's scripts and notecards linked_objects?: LinkedObject[]; // Child prims diff --git a/indra/newview/llpublishedobjectmgr.cpp b/indra/newview/llpublishedobjectmgr.cpp index 1eb000d98f..5c9c080b5d 100644 --- a/indra/newview/llpublishedobjectmgr.cpp +++ b/indra/newview/llpublishedobjectmgr.cpp @@ -729,6 +729,11 @@ LLSD LLPublishedObjectMgr::buildPublishedObjectLLSD(LLViewerObject* root) const { LL_PROFILE_ZONE_SCOPED_CATEGORY_SCRIPTDEV; LLSD pub; + const LLPermissions& root_perms = root->getPermissions(); + LLSD root_perm_entry; + root_perm_entry["owner"] = static_cast(root_perms.getMaskOwner()); + root_perm_entry["next_owner"] = static_cast(root_perms.getMaskNextOwner()); + pub["permissions"] = root_perm_entry; pub["object_id"] = root->getID(); pub["object_name"] = get_prim_name(root); pub["object_description"] = nv_string(root, "Desc"); @@ -753,6 +758,11 @@ LLSD LLPublishedObjectMgr::buildPublishedObjectLLSD(LLViewerObject* root) const link["link_number"] = link_number++; link["link_name"] = get_prim_name(child); link["link_description"] = nv_string(child, "Desc"); + const LLPermissions& child_perms = child->getPermissions(); + LLSD child_perm_entry; + child_perm_entry["owner"] = static_cast(child_perms.getMaskOwner()); + child_perm_entry["next_owner"] = static_cast(child_perms.getMaskNextOwner()); + link["permissions"] = child_perm_entry; link["inventory"] = buildPrimInventoryLLSD(child); linked_objects.append(link); } @@ -778,6 +788,11 @@ LLSD LLPublishedObjectMgr::buildObjectListLLSD() const } LLSD pub; + const LLPermissions& root_perms = root->getPermissions(); + LLSD root_perm_entry; + root_perm_entry["owner"] = static_cast(root_perms.getMaskOwner()); + root_perm_entry["next_owner"] = static_cast(root_perms.getMaskNextOwner()); + pub["permissions"] = root_perm_entry; pub["object_id"] = info.mObjectID; pub["object_name"] = info.mObjectName; pub["object_description"] = info.mObjectDescription; @@ -808,6 +823,11 @@ LLSD LLPublishedObjectMgr::buildObjectListLLSD() const link["link_number"] = prim_info.mLinkNumber; link["link_name"] = prim_info.mPrimName; link["link_description"] = prim_info.mPrimDescription; + const LLPermissions& child_perms = child->getPermissions(); + LLSD child_perm_entry; + child_perm_entry["owner"] = static_cast(child_perms.getMaskOwner()); + child_perm_entry["next_owner"] = static_cast(child_perms.getMaskNextOwner()); + link["permissions"] = child_perm_entry; link["inventory"] = buildPrimInventoryLLSD(child); linked_objects.append(link); } -- cgit v1.3 From 71548bcc9ccbc0f94d9f1f47b710ff7a351a05d3 Mon Sep 17 00:00:00 2001 From: Rider Linden Date: Wed, 26 Aug 2026 12:18:27 -0700 Subject: Cleanup from second set of fixes. --- indra/newview/llpublishedobjectmgr.cpp | 41 +++++++++++++++++----------------- 1 file changed, 21 insertions(+), 20 deletions(-) (limited to 'indra/newview/llpublishedobjectmgr.cpp') diff --git a/indra/newview/llpublishedobjectmgr.cpp b/indra/newview/llpublishedobjectmgr.cpp index 5c9c080b5d..c11a45a3b1 100644 --- a/indra/newview/llpublishedobjectmgr.cpp +++ b/indra/newview/llpublishedobjectmgr.cpp @@ -88,6 +88,23 @@ namespace // Never emit an empty prim/object name to downstream tooling. return obj->getID().asString(); } + + void add_object_permissions(LLSD& object_data, LLViewerObject* object) + { + LLPermissions* permissions = + LLSelectMgr::getInstance()->findObjectPermissions(object); + if (!permissions) + { + return; + } + + LLSD permission_entry; + permission_entry["owner"] = + static_cast(permissions->getMaskOwner()); + permission_entry["next_owner"] = + static_cast(permissions->getMaskNextOwner()); + object_data["permissions"] = permission_entry; + } } class LLPublishedPrimListener : public LLVOInventoryListener @@ -729,11 +746,7 @@ LLSD LLPublishedObjectMgr::buildPublishedObjectLLSD(LLViewerObject* root) const { LL_PROFILE_ZONE_SCOPED_CATEGORY_SCRIPTDEV; LLSD pub; - const LLPermissions& root_perms = root->getPermissions(); - LLSD root_perm_entry; - root_perm_entry["owner"] = static_cast(root_perms.getMaskOwner()); - root_perm_entry["next_owner"] = static_cast(root_perms.getMaskNextOwner()); - pub["permissions"] = root_perm_entry; + add_object_permissions(pub, root); pub["object_id"] = root->getID(); pub["object_name"] = get_prim_name(root); pub["object_description"] = nv_string(root, "Desc"); @@ -758,11 +771,7 @@ LLSD LLPublishedObjectMgr::buildPublishedObjectLLSD(LLViewerObject* root) const link["link_number"] = link_number++; link["link_name"] = get_prim_name(child); link["link_description"] = nv_string(child, "Desc"); - const LLPermissions& child_perms = child->getPermissions(); - LLSD child_perm_entry; - child_perm_entry["owner"] = static_cast(child_perms.getMaskOwner()); - child_perm_entry["next_owner"] = static_cast(child_perms.getMaskNextOwner()); - link["permissions"] = child_perm_entry; + add_object_permissions(link, child); link["inventory"] = buildPrimInventoryLLSD(child); linked_objects.append(link); } @@ -788,11 +797,7 @@ LLSD LLPublishedObjectMgr::buildObjectListLLSD() const } LLSD pub; - const LLPermissions& root_perms = root->getPermissions(); - LLSD root_perm_entry; - root_perm_entry["owner"] = static_cast(root_perms.getMaskOwner()); - root_perm_entry["next_owner"] = static_cast(root_perms.getMaskNextOwner()); - pub["permissions"] = root_perm_entry; + add_object_permissions(pub, root); pub["object_id"] = info.mObjectID; pub["object_name"] = info.mObjectName; pub["object_description"] = info.mObjectDescription; @@ -823,11 +828,7 @@ LLSD LLPublishedObjectMgr::buildObjectListLLSD() const link["link_number"] = prim_info.mLinkNumber; link["link_name"] = prim_info.mPrimName; link["link_description"] = prim_info.mPrimDescription; - const LLPermissions& child_perms = child->getPermissions(); - LLSD child_perm_entry; - child_perm_entry["owner"] = static_cast(child_perms.getMaskOwner()); - child_perm_entry["next_owner"] = static_cast(child_perms.getMaskNextOwner()); - link["permissions"] = child_perm_entry; + add_object_permissions(link, child); link["inventory"] = buildPrimInventoryLLSD(child); linked_objects.append(link); } -- cgit v1.3 From 0d4540a5cfa6a0027cb2a635958da1a0b45cea50 Mon Sep 17 00:00:00 2001 From: Rider Linden Date: Thu, 27 Aug 2026 14:11:20 -0700 Subject: Apply suggestions from code review Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com> --- indra/newview/llpublishedobjectmgr.cpp | 2 +- indra/newview/llscripteditorws.cpp | 3 +-- 2 files changed, 2 insertions(+), 3 deletions(-) (limited to 'indra/newview/llpublishedobjectmgr.cpp') diff --git a/indra/newview/llpublishedobjectmgr.cpp b/indra/newview/llpublishedobjectmgr.cpp index c11a45a3b1..85a9542dce 100644 --- a/indra/newview/llpublishedobjectmgr.cpp +++ b/indra/newview/llpublishedobjectmgr.cpp @@ -797,7 +797,7 @@ LLSD LLPublishedObjectMgr::buildObjectListLLSD() const } LLSD pub; - add_object_permissions(pub, root); + add_object_permissions(pub, root); pub["object_id"] = info.mObjectID; pub["object_name"] = info.mObjectName; pub["object_description"] = info.mObjectDescription; diff --git a/indra/newview/llscripteditorws.cpp b/indra/newview/llscripteditorws.cpp index 41efa7e016..6563a5418e 100644 --- a/indra/newview/llscripteditorws.cpp +++ b/indra/newview/llscripteditorws.cpp @@ -970,10 +970,9 @@ LLSD LLScriptEditorWSServer::handleObjectScriptRecompileAll( queue->setTitle(LLTrans::getString("CompileQueueTitle")); - LLSD response; response["success"] = true; response["object_id"] = root->getID(); - response["target"] = target; + response["target"] = (target == "auto-luau") ? "luau" : target; response["queued"] = true; return response; } -- cgit v1.3