From 25b3edc21c4d5deb7563410a4e0a5364153b1002 Mon Sep 17 00:00:00 2001 From: Diva Canto Date: Fri, 6 Apr 2012 11:51:12 -0700 Subject: WARNING: LOTS OF COMMENTED AND UNUSED CODE IN THIS COMMIT. This is on purpose; it's an historical record of what works and what doesn't wrt manipulating inventory at the viewer. I'll remove the unused code in a subsequent commit, but wanted to place it in history. The uncommented code works. --- .../EntityTransfer/HGEntityTransferModule.cs | 316 +++++++++++++++++++-- 1 file changed, 295 insertions(+), 21 deletions(-) (limited to 'OpenSim/Region/CoreModules/Framework') diff --git a/OpenSim/Region/CoreModules/Framework/EntityTransfer/HGEntityTransferModule.cs b/OpenSim/Region/CoreModules/Framework/EntityTransfer/HGEntityTransferModule.cs index ec260b4..d85a996 100644 --- a/OpenSim/Region/CoreModules/Framework/EntityTransfer/HGEntityTransferModule.cs +++ b/OpenSim/Region/CoreModules/Framework/EntityTransfer/HGEntityTransferModule.cs @@ -114,7 +114,17 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer m_log.DebugFormat("[HG ENTITY TRANSFER MODULE]: ViaHGLogin"); if (m_RestrictInventoryAccessAbroad) { - RestoreRootFolderContents(client); + IUserManagement uMan = m_Scenes[0].RequestModuleInterface(); + if (uMan.IsLocalGridUser(client.AgentId)) + { + m_log.DebugFormat("[HG ENTITY TRANSFER MODULE]: User is local"); + RestoreRootFolderContents(client); + } + else + { + m_log.DebugFormat("[HG ENTITY TRANSFER MODULE]: User is foreign"); + RestoreSuitcaseFolderContents(client); + } } } } @@ -210,7 +220,20 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer logout = success; // flag for later logout from this grid; this is an HG TP if (success && m_RestrictInventoryAccessAbroad) - RemoveRootFolderContents(sp.ControllingClient); + { + IUserManagement uMan = m_aScene.RequestModuleInterface(); + if (uMan != null && uMan.IsLocalGridUser(sp.UUID)) + { + // local grid user + m_log.DebugFormat("[HG ENTITY TRANSFER MODULE]: User is local"); + RemoveRootFolderContents(sp.ControllingClient); + } + else + { + m_log.DebugFormat("[HG ENTITY TRANSFER MODULE]: User is foreign"); + RemoveSuitcaseFolderContents(sp.ControllingClient); + } + } return success; } @@ -388,6 +411,36 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer #endregion + // COMPLETE FAIL + //private void RemoveRootFolderContents(IClientAPI client) + //{ + // InventoryFolderBase root = m_Scenes[0].InventoryService.GetRootFolder(client.AgentId); + // m_log.DebugFormat("[HG ENTITY TRANSFER MODULE]: Removing root inventory for user {0}, version {1}", client.AgentId, root.Version); + // InventoryCollection content = m_Scenes[0].InventoryService.GetFolderContent(client.AgentId, root.ID); + + // List keep = new List(); + // foreach (InventoryFolderBase f in content.Folders) + // { + // if (f.Type == (short)AssetType.TrashFolder || f.Type == (short)AssetType.Landmark || + // f.Type == (short)AssetType.FavoriteFolder || f.Type == (short)AssetType.CurrentOutfitFolder) + // { + // // Don't remove these because the viewer refuses to exist without them + // // and immediately sends a request to create them again, which makes things + // // very confusing in the viewer. + // // Just change their names + // f.Name = "Home " + f.Name + " (Unavailable)"; + // keep.Add(f); + // } + // else + // { + // m_log.DebugFormat("[RRR]: Name={0}, Version={1}, Type={2}, PfolderID={3}", f.Name, f.Version, f.Type, f.ParentID); + // } + // } + + + // client.SendInventoryFolderDetails(client.AgentId, root.ID, new List(), keep, root.Version + 1, true, true); + //} + private void RemoveRootFolderContents(IClientAPI client) { // TODO tell the viewer to remove the root folder's content @@ -401,25 +454,185 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer InventoryFolderBase root = m_Scenes[0].InventoryService.GetRootFolder(client.AgentId); if (root != null) { - m_log.DebugFormat("[HG ENTITY TRANSFER MODULE]: Removing root inventory for user {0}", client.AgentId); + m_log.DebugFormat("[HG ENTITY TRANSFER MODULE]: Removing root inventory for user {0}", client.Name); + InventoryCollection content = m_Scenes[0].InventoryService.GetFolderContent(client.AgentId, root.ID); + List fids = new List(); + List iids = new List(); + List keep = new List(); + + foreach (InventoryFolderBase f in content.Folders) + { + if (f.Name != "My Suitcase") + { + f.Name = f.Name + " (Unavailable)"; + keep.Add(f); + } + } + + // items directly under the root folder + foreach (InventoryItemBase it in content.Items) + it.Name = it.Name + " (Unavailable)"; ; + + // next, add the subfolders and items of the keep folders + //foreach (InventoryFolderBase f in keep) + //{ + // InventoryCollection c = m_Scenes[0].InventoryService.GetFolderContent(client.AgentId, f.ID); + // foreach (InventoryFolderBase sf in c.Folders) + // { + // m_log.DebugFormat("[RRR]: Name={0}, Version={1}, Type={2}, PfolderID={3}", f.Name, f.Version, f.Type, f.ParentID); + // fids.Add(sf.ID); + // } + // foreach (InventoryItemBase it in c.Items) + // iids.Add(it.ID); + //} + + //inv.SendRemoveInventoryFolders(fids.ToArray()); + + // Increase the version number + //root.Version += 1; + //m_Scenes[0].InventoryService.UpdateFolder(root); + //foreach (InventoryFolderBase f in keep) + //{ + // f.Version += 1; + // m_Scenes[0].InventoryService.UpdateFolder(f); + //} + + // Send the new names and versions + inv.SendBulkUpdateInventory(keep.ToArray(), content.Items.ToArray()); + + } + } + } + } + + private void RemoveRootFolderContents2(IClientAPI client) + { + // TODO tell the viewer to remove the root folder's content + if (client is IClientCore) + { + IClientCore core = (IClientCore)client; + IClientInventory inv; + + if (core.TryGet(out inv)) + { + InventoryFolderBase root = m_Scenes[0].InventoryService.GetRootFolder(client.AgentId); + if (root != null) + { + m_log.DebugFormat("[HG ENTITY TRANSFER MODULE]: Removing root inventory for user {0}", client.Name); InventoryCollection content = m_Scenes[0].InventoryService.GetFolderContent(client.AgentId, root.ID); - UUID[] ids = new UUID[content.Folders.Count]; - int i = 0; + List fids = new List(); + List iids = new List(); + List keep = new List(); + foreach (InventoryFolderBase f in content.Folders) - ids[i++] = f.ID; - inv.SendRemoveInventoryFolders(ids); - ids = new UUID[content.Items.Count]; - i = 0; + { + if (f.Type == (short)AssetType.TrashFolder || f.Type == (short)AssetType.Landmark || + f.Type == (short)AssetType.FavoriteFolder || f.Type == (short)AssetType.CurrentOutfitFolder) + { + // Don't remove these because the viewer refuses to exist without them + // and immediately sends a request to create them again, which makes things + // very confusing in the viewer. + // Just change their names + f.Name = "Home " + f.Name + " (Unavailable)"; + keep.Add(f); + } + else + { + m_log.DebugFormat("[RRR]: Name={0}, Version={1}, Type={2}, PfolderID={3}", f.Name, f.Version, f.Type, f.ParentID); + fids.Add(f.ID); + } + } + foreach (InventoryItemBase it in content.Items) - ids[i++] = it.ID; - inv.SendRemoveInventoryItems(ids); + iids.Add(it.ID); + + // next, add the subfolders and items of the keep folders + foreach (InventoryFolderBase f in keep) + { + InventoryCollection c = m_Scenes[0].InventoryService.GetFolderContent(client.AgentId, f.ID); + foreach (InventoryFolderBase sf in c.Folders) + { + m_log.DebugFormat("[RRR]: Name={0}, Version={1}, Type={2}, PfolderID={3}", f.Name, f.Version, f.Type, f.ParentID); + fids.Add(sf.ID); + } + foreach (InventoryItemBase it in c.Items) + iids.Add(it.ID); + } + + inv.SendRemoveInventoryFolders(fids.ToArray()); + inv.SendRemoveInventoryItems(iids.ToArray()); + + // Increase the version number + root.Version += 1; + m_Scenes[0].InventoryService.UpdateFolder(root); + //foreach (InventoryFolderBase f in keep) + //{ + // f.Version += 1; + // m_Scenes[0].InventoryService.UpdateFolder(f); + //} + + // Send the new names and versions + inv.SendBulkUpdateInventory(keep.ToArray(), new InventoryItemBase[0]); + } } } } + private void RemoveSuitcaseFolderContents(IClientAPI client) + { + return; + + //// TODO tell the viewer to remove the suitcase folder's content + //if (client is IClientCore) + //{ + // IClientCore core = (IClientCore)client; + // IClientInventory inv; + + // if (core.TryGet(out inv)) + // { + // InventoryFolderBase root = m_Scenes[0].InventoryService.GetRootFolder(client.AgentId); + // if (root != null) + // { + // m_log.DebugFormat("[HG ENTITY TRANSFER MODULE]: Removing suitcase inventory for user {0}", client.Name); + // InventoryCollection content = m_Scenes[0].InventoryService.GetFolderContent(client.AgentId, root.ID); + // List fids = new List(); + // List iids = new List(); + + // if (content.Folders.Count == 0) + // m_log.WarnFormat("[HG ENTITY TRANSFER MODULE]: no subfolders???"); + // foreach (InventoryFolderBase f in content.Folders) + // { + // m_log.DebugFormat("[RRR]: Name={0}, Version={1}, Type={2}, PfolderID={3}", f.Name, f.Version, f.Type, f.ParentID); + // fids.Add(f.ID); + // } + + // foreach (InventoryItemBase it in content.Items) + // iids.Add(it.ID); + + // inv.SendRemoveInventoryFolders(fids.ToArray()); + // inv.SendRemoveInventoryItems(iids.ToArray()); + + // // Increase the version number + // root.Version += 1; + // m_Scenes[0].InventoryService.UpdateFolder(root); + // } + // } + //} + } + private void RestoreRootFolderContents(IClientAPI client) { + // This works! + //InventoryFolderBase root = m_Scenes[0].InventoryService.GetRootFolder(client.AgentId); + //client.SendBulkUpdateInventory(root); + + // SORTA KINDA some items are missing... + //InventoryCollection userInventory = m_Scenes[0].InventoryService.GetUserInventory(client.AgentId); + //InventoryFolderBase root = m_Scenes[0].InventoryService.GetRootFolder(client.AgentId); + //client.SendBulkUpdateInventory(root); + + m_log.DebugFormat("[HG ENTITY TRANSFER MODULE]: Restoring root folder"); if (client is IClientCore) { IClientCore core = (IClientCore)client; @@ -428,19 +641,80 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer if (core.TryGet(out inv)) { InventoryFolderBase root = m_Scenes[0].InventoryService.GetRootFolder(client.AgentId); - client.SendBulkUpdateInventory(root); - //if (root != null) - //{ - // m_log.DebugFormat("[HG ENTITY TRANSFER MODULE]: Restoring root inventory for user {0}", client.AgentId); - // InventoryCollection content = m_Scenes[0].InventoryService.GetFolderContent(client.AgentId, root.ID); - // m_log.DebugFormat("[XXX]: Folder name {0}, id {1}, parent {2}", root.Name, root.ID, root.ParentID); - // foreach (InventoryItemBase i in content.Items) - // m_log.DebugFormat("[XXX]: Name={0}, folderID={1}", i.Name, i.Folder); + InventoryCollection content = m_Scenes[0].InventoryService.GetFolderContent(client.AgentId, root.ID); - // inv.SendBulkUpdateInventory(content.Folders.ToArray(), content.Items.ToArray()); - //} + inv.SendBulkUpdateInventory(content.Folders.ToArray(), content.Items.ToArray()); } } + + // ATTEMPT # 3 -- STILL DOESN'T WORK! + //if (client is IClientCore) + //{ + // IClientCore core = (IClientCore)client; + // IClientInventory inv; + + // if (core.TryGet(out inv)) + // { + // InventoryCollection userInventory = m_Scenes[0].InventoryService.GetUserInventory(client.AgentId); + // if (userInventory != null) + // { + // m_log.DebugFormat("[HG ENTITY TRANSFER MODULE]: Restoring root inventory for user {0}", client.AgentId); + // foreach (InventoryFolderBase f in userInventory.Folders) + // m_log.DebugFormat("[AAA]: FOLDER {0} {1} {2} {3} {4}", f.Name, f.Type, f.Version, f.ID, f.ParentID); + // foreach (InventoryItemBase f in userInventory.Items) + // m_log.DebugFormat("[AAA]: ITEM {0} {1} {2}", f.Name, f.ID, f.Folder); + // inv.SendBulkUpdateInventory(userInventory.Folders.ToArray(), userInventory.Items.ToArray()); + // } + // else + // m_log.WarnFormat("[HG ENTITY TRANSFER MODULE]: Unable to retrieve inventory for user {0}", client.AgentId); + // } + //} + + + // ATTEMPT #2 -- BETTER THAN 1, BUT STILL DOES NOT WORK WELL + //if (client is IClientCore) + //{ + // IClientCore core = (IClientCore)client; + // IClientInventory inv; + + // if (core.TryGet(out inv)) + // { + // List skel = m_Scenes[0].InventoryService.GetInventorySkeleton(client.AgentId); + // if (skel != null) + // { + // m_log.DebugFormat("[HG ENTITY TRANSFER MODULE]: Restoring root inventory for user {0}", client.AgentId); + // foreach (InventoryFolderBase f in skel) + // m_log.DebugFormat("[AAA]: {0} {1} {2} {3} {4}", f.Name, f.Type, f.Version, f.ID, f.ParentID); + // inv.SendBulkUpdateInventory(skel.ToArray(), new InventoryItemBase[0]); + // } + // else + // m_log.WarnFormat("[HG ENTITY TRANSFER MODULE]: Unable to retrieve skeleton for user {0}", client.AgentId); + + // ATTEMPT #1 -- DOES NOT WORK + //InventoryFolderBase root = m_Scenes[0].InventoryService.GetRootFolder(client.AgentId); + //if (root != null) + //{ + //InventoryCollection content = m_Scenes[0].InventoryService.GetFolderContent(client.AgentId, root.ID); + //InventoryFolderBase[] folders = new InventoryFolderBase[content.Folders.Count + 1]; + //m_log.DebugFormat("[AAA]: Folder name {0}, id {1}, version {2}, parent {3}", root.Name, root.ID, root.Version, root.ParentID); + //folders[0] = root; + //for (int count = 1; count < content.Folders.Count + 1; count++) + //{ + // folders[count] = content.Folders[count - 1]; + // m_log.DebugFormat("[AAA]: Name={0}, Id={1}, Version={2}, type={3}, folderID={4}", + // folders[count].Name, folders[count].ID, folders[count].Version, folders[count].Type, folders[count].ParentID); + //} + //foreach (InventoryItemBase i in content.Items) + // m_log.DebugFormat("[AAA]: Name={0}, folderID={1}", i.Name, i.Folder); + //inv.SendBulkUpdateInventory(/*content.Folders.ToArray()*/ folders, content.Items.ToArray()); + //} + //} + //} + } + + private void RestoreSuitcaseFolderContents(IClientAPI client) + { + } private GridRegion MakeRegion(AgentCircuitData aCircuit) -- cgit v1.1 From 6a9f36788df8c07b76d779236b66e48cab6ae316 Mon Sep 17 00:00:00 2001 From: Diva Canto Date: Fri, 6 Apr 2012 12:28:15 -0700 Subject: Deleted the unused and commented code from 2 commits ago. --- .../EntityTransfer/HGEntityTransferModule.cs | 242 +-------------------- 1 file changed, 1 insertion(+), 241 deletions(-) (limited to 'OpenSim/Region/CoreModules/Framework') diff --git a/OpenSim/Region/CoreModules/Framework/EntityTransfer/HGEntityTransferModule.cs b/OpenSim/Region/CoreModules/Framework/EntityTransfer/HGEntityTransferModule.cs index d85a996..0f422ae 100644 --- a/OpenSim/Region/CoreModules/Framework/EntityTransfer/HGEntityTransferModule.cs +++ b/OpenSim/Region/CoreModules/Framework/EntityTransfer/HGEntityTransferModule.cs @@ -411,36 +411,6 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer #endregion - // COMPLETE FAIL - //private void RemoveRootFolderContents(IClientAPI client) - //{ - // InventoryFolderBase root = m_Scenes[0].InventoryService.GetRootFolder(client.AgentId); - // m_log.DebugFormat("[HG ENTITY TRANSFER MODULE]: Removing root inventory for user {0}, version {1}", client.AgentId, root.Version); - // InventoryCollection content = m_Scenes[0].InventoryService.GetFolderContent(client.AgentId, root.ID); - - // List keep = new List(); - // foreach (InventoryFolderBase f in content.Folders) - // { - // if (f.Type == (short)AssetType.TrashFolder || f.Type == (short)AssetType.Landmark || - // f.Type == (short)AssetType.FavoriteFolder || f.Type == (short)AssetType.CurrentOutfitFolder) - // { - // // Don't remove these because the viewer refuses to exist without them - // // and immediately sends a request to create them again, which makes things - // // very confusing in the viewer. - // // Just change their names - // f.Name = "Home " + f.Name + " (Unavailable)"; - // keep.Add(f); - // } - // else - // { - // m_log.DebugFormat("[RRR]: Name={0}, Version={1}, Type={2}, PfolderID={3}", f.Name, f.Version, f.Type, f.ParentID); - // } - // } - - - // client.SendInventoryFolderDetails(client.AgentId, root.ID, new List(), keep, root.Version + 1, true, true); - //} - private void RemoveRootFolderContents(IClientAPI client) { // TODO tell the viewer to remove the root folder's content @@ -473,31 +443,7 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer foreach (InventoryItemBase it in content.Items) it.Name = it.Name + " (Unavailable)"; ; - // next, add the subfolders and items of the keep folders - //foreach (InventoryFolderBase f in keep) - //{ - // InventoryCollection c = m_Scenes[0].InventoryService.GetFolderContent(client.AgentId, f.ID); - // foreach (InventoryFolderBase sf in c.Folders) - // { - // m_log.DebugFormat("[RRR]: Name={0}, Version={1}, Type={2}, PfolderID={3}", f.Name, f.Version, f.Type, f.ParentID); - // fids.Add(sf.ID); - // } - // foreach (InventoryItemBase it in c.Items) - // iids.Add(it.ID); - //} - - //inv.SendRemoveInventoryFolders(fids.ToArray()); - - // Increase the version number - //root.Version += 1; - //m_Scenes[0].InventoryService.UpdateFolder(root); - //foreach (InventoryFolderBase f in keep) - //{ - // f.Version += 1; - // m_Scenes[0].InventoryService.UpdateFolder(f); - //} - - // Send the new names and versions + // Send the new names inv.SendBulkUpdateInventory(keep.ToArray(), content.Items.ToArray()); } @@ -505,133 +451,12 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer } } - private void RemoveRootFolderContents2(IClientAPI client) - { - // TODO tell the viewer to remove the root folder's content - if (client is IClientCore) - { - IClientCore core = (IClientCore)client; - IClientInventory inv; - - if (core.TryGet(out inv)) - { - InventoryFolderBase root = m_Scenes[0].InventoryService.GetRootFolder(client.AgentId); - if (root != null) - { - m_log.DebugFormat("[HG ENTITY TRANSFER MODULE]: Removing root inventory for user {0}", client.Name); - InventoryCollection content = m_Scenes[0].InventoryService.GetFolderContent(client.AgentId, root.ID); - List fids = new List(); - List iids = new List(); - List keep = new List(); - - foreach (InventoryFolderBase f in content.Folders) - { - if (f.Type == (short)AssetType.TrashFolder || f.Type == (short)AssetType.Landmark || - f.Type == (short)AssetType.FavoriteFolder || f.Type == (short)AssetType.CurrentOutfitFolder) - { - // Don't remove these because the viewer refuses to exist without them - // and immediately sends a request to create them again, which makes things - // very confusing in the viewer. - // Just change their names - f.Name = "Home " + f.Name + " (Unavailable)"; - keep.Add(f); - } - else - { - m_log.DebugFormat("[RRR]: Name={0}, Version={1}, Type={2}, PfolderID={3}", f.Name, f.Version, f.Type, f.ParentID); - fids.Add(f.ID); - } - } - - foreach (InventoryItemBase it in content.Items) - iids.Add(it.ID); - - // next, add the subfolders and items of the keep folders - foreach (InventoryFolderBase f in keep) - { - InventoryCollection c = m_Scenes[0].InventoryService.GetFolderContent(client.AgentId, f.ID); - foreach (InventoryFolderBase sf in c.Folders) - { - m_log.DebugFormat("[RRR]: Name={0}, Version={1}, Type={2}, PfolderID={3}", f.Name, f.Version, f.Type, f.ParentID); - fids.Add(sf.ID); - } - foreach (InventoryItemBase it in c.Items) - iids.Add(it.ID); - } - - inv.SendRemoveInventoryFolders(fids.ToArray()); - inv.SendRemoveInventoryItems(iids.ToArray()); - - // Increase the version number - root.Version += 1; - m_Scenes[0].InventoryService.UpdateFolder(root); - //foreach (InventoryFolderBase f in keep) - //{ - // f.Version += 1; - // m_Scenes[0].InventoryService.UpdateFolder(f); - //} - - // Send the new names and versions - inv.SendBulkUpdateInventory(keep.ToArray(), new InventoryItemBase[0]); - - } - } - } - } - private void RemoveSuitcaseFolderContents(IClientAPI client) { - return; - - //// TODO tell the viewer to remove the suitcase folder's content - //if (client is IClientCore) - //{ - // IClientCore core = (IClientCore)client; - // IClientInventory inv; - - // if (core.TryGet(out inv)) - // { - // InventoryFolderBase root = m_Scenes[0].InventoryService.GetRootFolder(client.AgentId); - // if (root != null) - // { - // m_log.DebugFormat("[HG ENTITY TRANSFER MODULE]: Removing suitcase inventory for user {0}", client.Name); - // InventoryCollection content = m_Scenes[0].InventoryService.GetFolderContent(client.AgentId, root.ID); - // List fids = new List(); - // List iids = new List(); - - // if (content.Folders.Count == 0) - // m_log.WarnFormat("[HG ENTITY TRANSFER MODULE]: no subfolders???"); - // foreach (InventoryFolderBase f in content.Folders) - // { - // m_log.DebugFormat("[RRR]: Name={0}, Version={1}, Type={2}, PfolderID={3}", f.Name, f.Version, f.Type, f.ParentID); - // fids.Add(f.ID); - // } - - // foreach (InventoryItemBase it in content.Items) - // iids.Add(it.ID); - - // inv.SendRemoveInventoryFolders(fids.ToArray()); - // inv.SendRemoveInventoryItems(iids.ToArray()); - - // // Increase the version number - // root.Version += 1; - // m_Scenes[0].InventoryService.UpdateFolder(root); - // } - // } - //} } private void RestoreRootFolderContents(IClientAPI client) { - // This works! - //InventoryFolderBase root = m_Scenes[0].InventoryService.GetRootFolder(client.AgentId); - //client.SendBulkUpdateInventory(root); - - // SORTA KINDA some items are missing... - //InventoryCollection userInventory = m_Scenes[0].InventoryService.GetUserInventory(client.AgentId); - //InventoryFolderBase root = m_Scenes[0].InventoryService.GetRootFolder(client.AgentId); - //client.SendBulkUpdateInventory(root); - m_log.DebugFormat("[HG ENTITY TRANSFER MODULE]: Restoring root folder"); if (client is IClientCore) { @@ -646,75 +471,10 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer inv.SendBulkUpdateInventory(content.Folders.ToArray(), content.Items.ToArray()); } } - - // ATTEMPT # 3 -- STILL DOESN'T WORK! - //if (client is IClientCore) - //{ - // IClientCore core = (IClientCore)client; - // IClientInventory inv; - - // if (core.TryGet(out inv)) - // { - // InventoryCollection userInventory = m_Scenes[0].InventoryService.GetUserInventory(client.AgentId); - // if (userInventory != null) - // { - // m_log.DebugFormat("[HG ENTITY TRANSFER MODULE]: Restoring root inventory for user {0}", client.AgentId); - // foreach (InventoryFolderBase f in userInventory.Folders) - // m_log.DebugFormat("[AAA]: FOLDER {0} {1} {2} {3} {4}", f.Name, f.Type, f.Version, f.ID, f.ParentID); - // foreach (InventoryItemBase f in userInventory.Items) - // m_log.DebugFormat("[AAA]: ITEM {0} {1} {2}", f.Name, f.ID, f.Folder); - // inv.SendBulkUpdateInventory(userInventory.Folders.ToArray(), userInventory.Items.ToArray()); - // } - // else - // m_log.WarnFormat("[HG ENTITY TRANSFER MODULE]: Unable to retrieve inventory for user {0}", client.AgentId); - // } - //} - - - // ATTEMPT #2 -- BETTER THAN 1, BUT STILL DOES NOT WORK WELL - //if (client is IClientCore) - //{ - // IClientCore core = (IClientCore)client; - // IClientInventory inv; - - // if (core.TryGet(out inv)) - // { - // List skel = m_Scenes[0].InventoryService.GetInventorySkeleton(client.AgentId); - // if (skel != null) - // { - // m_log.DebugFormat("[HG ENTITY TRANSFER MODULE]: Restoring root inventory for user {0}", client.AgentId); - // foreach (InventoryFolderBase f in skel) - // m_log.DebugFormat("[AAA]: {0} {1} {2} {3} {4}", f.Name, f.Type, f.Version, f.ID, f.ParentID); - // inv.SendBulkUpdateInventory(skel.ToArray(), new InventoryItemBase[0]); - // } - // else - // m_log.WarnFormat("[HG ENTITY TRANSFER MODULE]: Unable to retrieve skeleton for user {0}", client.AgentId); - - // ATTEMPT #1 -- DOES NOT WORK - //InventoryFolderBase root = m_Scenes[0].InventoryService.GetRootFolder(client.AgentId); - //if (root != null) - //{ - //InventoryCollection content = m_Scenes[0].InventoryService.GetFolderContent(client.AgentId, root.ID); - //InventoryFolderBase[] folders = new InventoryFolderBase[content.Folders.Count + 1]; - //m_log.DebugFormat("[AAA]: Folder name {0}, id {1}, version {2}, parent {3}", root.Name, root.ID, root.Version, root.ParentID); - //folders[0] = root; - //for (int count = 1; count < content.Folders.Count + 1; count++) - //{ - // folders[count] = content.Folders[count - 1]; - // m_log.DebugFormat("[AAA]: Name={0}, Id={1}, Version={2}, type={3}, folderID={4}", - // folders[count].Name, folders[count].ID, folders[count].Version, folders[count].Type, folders[count].ParentID); - //} - //foreach (InventoryItemBase i in content.Items) - // m_log.DebugFormat("[AAA]: Name={0}, folderID={1}", i.Name, i.Folder); - //inv.SendBulkUpdateInventory(/*content.Folders.ToArray()*/ folders, content.Items.ToArray()); - //} - //} - //} } private void RestoreSuitcaseFolderContents(IClientAPI client) { - } private GridRegion MakeRegion(AgentCircuitData aCircuit) -- cgit v1.1 From 7d8bb33c5b2420d4e744269f67a25dd2b9746a35 Mon Sep 17 00:00:00 2001 From: Justin Clark-Casey (justincc) Date: Sat, 7 Apr 2012 00:33:02 +0100 Subject: Store FromItemID for attachments once on SOG instead of on every SOP and only ever using the root part entry. This eliminates some pointless memory use. --- .../CoreModules/Framework/InventoryAccess/InventoryAccessModule.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'OpenSim/Region/CoreModules/Framework') diff --git a/OpenSim/Region/CoreModules/Framework/InventoryAccess/InventoryAccessModule.cs b/OpenSim/Region/CoreModules/Framework/InventoryAccess/InventoryAccessModule.cs index 4dd89d2..88c21af 100644 --- a/OpenSim/Region/CoreModules/Framework/InventoryAccess/InventoryAccessModule.cs +++ b/OpenSim/Region/CoreModules/Framework/InventoryAccess/InventoryAccessModule.cs @@ -1008,7 +1008,7 @@ namespace OpenSim.Region.CoreModules.Framework.InventoryAccess rootPart.TrimPermissions(); if (isAttachment) - so.SetFromItemID(item.ID); + so.FromItemID = item.ID; } return true; -- cgit v1.1 From cce760dbfcd375a700e38b8279b0c19c5624e720 Mon Sep 17 00:00:00 2001 From: Justin Clark-Casey (justincc) Date: Sat, 7 Apr 2012 00:40:55 +0100 Subject: Rather than having a FromFolderID property on every single prim and only ever using the root prim one, store on SOG instead. This reduces pointless memory usage. --- .../CoreModules/Framework/InventoryAccess/InventoryAccessModule.cs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'OpenSim/Region/CoreModules/Framework') diff --git a/OpenSim/Region/CoreModules/Framework/InventoryAccess/InventoryAccessModule.cs b/OpenSim/Region/CoreModules/Framework/InventoryAccess/InventoryAccessModule.cs index 88c21af..8171487 100644 --- a/OpenSim/Region/CoreModules/Framework/InventoryAccess/InventoryAccessModule.cs +++ b/OpenSim/Region/CoreModules/Framework/InventoryAccess/InventoryAccessModule.cs @@ -654,9 +654,9 @@ namespace OpenSim.Region.CoreModules.Framework.InventoryAccess // if (action == DeRezAction.Take || action == DeRezAction.TakeCopy) { - if (so.RootPart.FromFolderID != UUID.Zero && userID == remoteClient.AgentId) + if (so.FromFolderID != UUID.Zero && userID == remoteClient.AgentId) { - InventoryFolderBase f = new InventoryFolderBase(so.RootPart.FromFolderID, userID); + InventoryFolderBase f = new InventoryFolderBase(so.FromFolderID, userID); folder = m_Scene.InventoryService.GetFolder(f); } } @@ -962,7 +962,7 @@ namespace OpenSim.Region.CoreModules.Framework.InventoryAccess rootPart.SalePrice = item.SalePrice; } - rootPart.FromFolderID = item.Folder; + so.FromFolderID = item.Folder; // Console.WriteLine("rootPart.OwnedID {0}, item.Owner {1}, item.CurrentPermissions {2:X}", // rootPart.OwnerID, item.Owner, item.CurrentPermissions); -- cgit v1.1 From 9637e509567efe512d4b29ea925c10011cdbe99e Mon Sep 17 00:00:00 2001 From: Diva Canto Date: Fri, 6 Apr 2012 20:34:31 -0700 Subject: Moved the inventory manipulation from HGEntityTransferModule to HGInventoryAccessModule where it belongs. They need to exchange some events, so added those to EventManager. Those events (TeleportStart and TeleportFail) are nice to have anyway. --- .../EntityTransfer/EntityTransferModule.cs | 8 +- .../EntityTransfer/HGEntityTransferModule.cs | 149 +------------------- .../InventoryAccess/HGInventoryAccessModule.cs | 152 ++++++++++++++++++++- 3 files changed, 159 insertions(+), 150 deletions(-) (limited to 'OpenSim/Region/CoreModules/Framework') diff --git a/OpenSim/Region/CoreModules/Framework/EntityTransfer/EntityTransferModule.cs b/OpenSim/Region/CoreModules/Framework/EntityTransfer/EntityTransferModule.cs index 86e10d4..fa9cd55 100644 --- a/OpenSim/Region/CoreModules/Framework/EntityTransfer/EntityTransferModule.cs +++ b/OpenSim/Region/CoreModules/Framework/EntityTransfer/EntityTransferModule.cs @@ -561,12 +561,18 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer // Finally, kill the agent we just created at the destination. m_aScene.SimulationService.CloseAgent(finalDestination, sp.UUID); + sp.Scene.EventManager.TriggerTeleportFail(sp.ControllingClient, logout); } protected virtual bool CreateAgent(ScenePresence sp, GridRegion reg, GridRegion finalDestination, AgentCircuitData agentCircuit, uint teleportFlags, out string reason, out bool logout) { logout = false; - return m_aScene.SimulationService.CreateAgent(finalDestination, agentCircuit, teleportFlags, out reason); + bool success = m_aScene.SimulationService.CreateAgent(finalDestination, agentCircuit, teleportFlags, out reason); + + if (success) + sp.Scene.EventManager.TriggerTeleportStart(sp.ControllingClient, reg, finalDestination, teleportFlags, logout); + + return success; } protected virtual bool UpdateAgent(GridRegion reg, GridRegion finalDestination, AgentData agent) diff --git a/OpenSim/Region/CoreModules/Framework/EntityTransfer/HGEntityTransferModule.cs b/OpenSim/Region/CoreModules/Framework/EntityTransfer/HGEntityTransferModule.cs index 0f422ae..7f9175d 100644 --- a/OpenSim/Region/CoreModules/Framework/EntityTransfer/HGEntityTransferModule.cs +++ b/OpenSim/Region/CoreModules/Framework/EntityTransfer/HGEntityTransferModule.cs @@ -51,8 +51,6 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer private bool m_Initialized = false; - private bool m_RestrictInventoryAccessAbroad = false; - private GatekeeperServiceConnector m_GatekeeperConnector; #region ISharedRegionModule @@ -71,10 +69,6 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer if (name == Name) { InitialiseCommon(source); - IConfig transferConfig = source.Configs["HGEntityTransferModule"]; - if (transferConfig != null) - m_RestrictInventoryAccessAbroad = transferConfig.GetBoolean("RestrictInventoryAccessAbroad", false); - m_log.DebugFormat("[HG ENTITY TRANSFER MODULE]: {0} enabled.", Name); } } @@ -94,44 +88,8 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer client.OnTeleportHomeRequest += TeleportHome; client.OnTeleportLandmarkRequest += RequestTeleportLandmark; client.OnConnectionClosed += new Action(OnConnectionClosed); - client.OnCompleteMovementToRegion += new Action(OnCompleteMovementToRegion); } - protected void OnCompleteMovementToRegion(IClientAPI client, bool arg2) - { - // HACK HACK -- just seeing how the viewer responds - // Let's send the Suitcase or the real root folder folder for incoming HG agents - // Visiting agents get their suitcase contents; incoming local users get their real root folder's content - m_log.DebugFormat("[HG ENTITY TRANSFER MODULE]: OnCompleteMovementToRegion of user {0}", client.AgentId); - object sp = null; - if (client.Scene.TryGetScenePresence(client.AgentId, out sp)) - { - if (sp is ScenePresence) - { - AgentCircuitData aCircuit = ((ScenePresence)sp).Scene.AuthenticateHandler.GetAgentCircuitData(client.AgentId); - if ((aCircuit.teleportFlags & (uint)Constants.TeleportFlags.ViaHGLogin) != 0) - { - m_log.DebugFormat("[HG ENTITY TRANSFER MODULE]: ViaHGLogin"); - if (m_RestrictInventoryAccessAbroad) - { - IUserManagement uMan = m_Scenes[0].RequestModuleInterface(); - if (uMan.IsLocalGridUser(client.AgentId)) - { - m_log.DebugFormat("[HG ENTITY TRANSFER MODULE]: User is local"); - RestoreRootFolderContents(client); - } - else - { - m_log.DebugFormat("[HG ENTITY TRANSFER MODULE]: User is foreign"); - RestoreSuitcaseFolderContents(client); - } - } - } - } - } - } - - public override void RegionLoaded(Scene scene) { base.RegionLoaded(scene); @@ -141,12 +99,6 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer m_GatekeeperConnector = new GatekeeperServiceConnector(scene.AssetService); m_Initialized = true; - scene.AddCommand( - "HG", this, "send inventory", - "send inventory", - "Don't use this", - HandleSendInventory); - } } @@ -219,21 +171,8 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer bool success = connector.LoginAgentToGrid(agentCircuit, reg, finalDestination, out reason); logout = success; // flag for later logout from this grid; this is an HG TP - if (success && m_RestrictInventoryAccessAbroad) - { - IUserManagement uMan = m_aScene.RequestModuleInterface(); - if (uMan != null && uMan.IsLocalGridUser(sp.UUID)) - { - // local grid user - m_log.DebugFormat("[HG ENTITY TRANSFER MODULE]: User is local"); - RemoveRootFolderContents(sp.ControllingClient); - } - else - { - m_log.DebugFormat("[HG ENTITY TRANSFER MODULE]: User is foreign"); - RemoveSuitcaseFolderContents(sp.ControllingClient); - } - } + if (success) + sp.Scene.EventManager.TriggerTeleportStart(sp.ControllingClient, reg, finalDestination, teleportFlags, logout); return success; } @@ -244,7 +183,7 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer } } - return m_aScene.SimulationService.CreateAgent(reg, agentCircuit, teleportFlags, out reason); + return base.CreateAgent(sp, reg, finalDestination, agentCircuit, teleportFlags, out reason, out logout); } public override void TeleportHome(UUID id, IClientAPI client) @@ -348,15 +287,6 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer } - protected override void Fail(ScenePresence sp, GridRegion finalDestination, bool logout) - { - base.Fail(sp, finalDestination, logout); - if (logout && m_RestrictInventoryAccessAbroad) - { - RestoreRootFolderContents(sp.ControllingClient); - } - } - #endregion #region IUserAgentVerificationModule @@ -411,71 +341,6 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer #endregion - private void RemoveRootFolderContents(IClientAPI client) - { - // TODO tell the viewer to remove the root folder's content - if (client is IClientCore) - { - IClientCore core = (IClientCore)client; - IClientInventory inv; - - if (core.TryGet(out inv)) - { - InventoryFolderBase root = m_Scenes[0].InventoryService.GetRootFolder(client.AgentId); - if (root != null) - { - m_log.DebugFormat("[HG ENTITY TRANSFER MODULE]: Removing root inventory for user {0}", client.Name); - InventoryCollection content = m_Scenes[0].InventoryService.GetFolderContent(client.AgentId, root.ID); - List fids = new List(); - List iids = new List(); - List keep = new List(); - - foreach (InventoryFolderBase f in content.Folders) - { - if (f.Name != "My Suitcase") - { - f.Name = f.Name + " (Unavailable)"; - keep.Add(f); - } - } - - // items directly under the root folder - foreach (InventoryItemBase it in content.Items) - it.Name = it.Name + " (Unavailable)"; ; - - // Send the new names - inv.SendBulkUpdateInventory(keep.ToArray(), content.Items.ToArray()); - - } - } - } - } - - private void RemoveSuitcaseFolderContents(IClientAPI client) - { - } - - private void RestoreRootFolderContents(IClientAPI client) - { - m_log.DebugFormat("[HG ENTITY TRANSFER MODULE]: Restoring root folder"); - if (client is IClientCore) - { - IClientCore core = (IClientCore)client; - IClientInventory inv; - - if (core.TryGet(out inv)) - { - InventoryFolderBase root = m_Scenes[0].InventoryService.GetRootFolder(client.AgentId); - InventoryCollection content = m_Scenes[0].InventoryService.GetFolderContent(client.AgentId, root.ID); - - inv.SendBulkUpdateInventory(content.Folders.ToArray(), content.Items.ToArray()); - } - } - } - - private void RestoreSuitcaseFolderContents(IClientAPI client) - { - } private GridRegion MakeRegion(AgentCircuitData aCircuit) { @@ -494,13 +359,5 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer return region; } - protected void HandleSendInventory(string module, string[] cmd) - { - m_Scenes[0].ForEachClient(delegate(IClientAPI client) - { - RestoreRootFolderContents(client); - }); - } - } } diff --git a/OpenSim/Region/CoreModules/Framework/InventoryAccess/HGInventoryAccessModule.cs b/OpenSim/Region/CoreModules/Framework/InventoryAccess/HGInventoryAccessModule.cs index d2fe388..a71584a 100644 --- a/OpenSim/Region/CoreModules/Framework/InventoryAccess/HGInventoryAccessModule.cs +++ b/OpenSim/Region/CoreModules/Framework/InventoryAccess/HGInventoryAccessModule.cs @@ -30,6 +30,7 @@ using System.Collections.Generic; using System.Reflection; using OpenSim.Framework; +using OpenSim.Framework.Client; using OpenSim.Region.Framework.Interfaces; using OpenSim.Region.Framework.Scenes; using OpenSim.Services.Connectors.Hypergrid; @@ -57,6 +58,7 @@ namespace OpenSim.Region.CoreModules.Framework.InventoryAccess private string m_HomeURI; private bool m_OutboundPermission; private string m_ThisGatekeeper; + private bool m_RestrictInventoryAccessAbroad; // private bool m_Initialized = false; @@ -90,6 +92,7 @@ namespace OpenSim.Region.CoreModules.Framework.InventoryAccess m_HomeURI = thisModuleConfig.GetString("HomeURI", m_HomeURI); m_OutboundPermission = thisModuleConfig.GetBoolean("OutboundPermission", true); m_ThisGatekeeper = thisModuleConfig.GetString("Gatekeeper", string.Empty); + m_RestrictInventoryAccessAbroad = thisModuleConfig.GetBoolean("RestrictInventoryAccessAbroad", false); } else m_log.Warn("[HG INVENTORY ACCESS MODULE]: HGInventoryAccessModule configs not found. ProfileServerURI not set!"); @@ -105,13 +108,79 @@ namespace OpenSim.Region.CoreModules.Framework.InventoryAccess base.AddRegion(scene); m_assMapper = new HGAssetMapper(scene, m_HomeURI); scene.EventManager.OnNewInventoryItemUploadComplete += UploadInventoryItem; - + scene.EventManager.OnTeleportStart += TeleportStart; + scene.EventManager.OnTeleportFail += TeleportFail; } #endregion #region Event handlers + protected override void OnNewClient(IClientAPI client) + { + base.OnNewClient(client); + client.OnCompleteMovementToRegion += new Action(OnCompleteMovementToRegion); + } + + protected void OnCompleteMovementToRegion(IClientAPI client, bool arg2) + { + //m_log.DebugFormat("[HG INVENTORY ACCESS MODULE]: OnCompleteMovementToRegion of user {0}", client.Name); + object sp = null; + if (client.Scene.TryGetScenePresence(client.AgentId, out sp)) + { + if (sp is ScenePresence) + { + AgentCircuitData aCircuit = ((ScenePresence)sp).Scene.AuthenticateHandler.GetAgentCircuitData(client.AgentId); + if ((aCircuit.teleportFlags & (uint)Constants.TeleportFlags.ViaHGLogin) != 0) + { + if (m_RestrictInventoryAccessAbroad) + { + IUserManagement uMan = m_Scene.RequestModuleInterface(); + if (uMan.IsLocalGridUser(client.AgentId)) + ProcessInventoryForComingHome(client); + else + ProcessInventoryForArriving(client); + } + } + } + } + } + + protected void TeleportStart(IClientAPI client, GridRegion destination, GridRegion finalDestination, uint teleportFlags, bool gridLogout) + { + if (gridLogout && m_RestrictInventoryAccessAbroad) + { + IUserManagement uMan = m_Scene.RequestModuleInterface(); + if (uMan != null && uMan.IsLocalGridUser(client.AgentId)) + { + // local grid user + ProcessInventoryForHypergriding(client); + } + else + { + // Foreigner + ProcessInventoryForLeaving(client); + } + } + + } + + protected void TeleportFail(IClientAPI client, bool gridLogout) + { + if (gridLogout && m_RestrictInventoryAccessAbroad) + { + IUserManagement uMan = m_Scene.RequestModuleInterface(); + if (uMan.IsLocalGridUser(client.AgentId)) + { + ProcessInventoryForComingHome(client); + } + else + { + ProcessInventoryForArriving(client); + } + } + } + public void UploadInventoryItem(UUID avatarID, UUID assetID, string name, int userlevel) { string userAssetServer = string.Empty; @@ -236,8 +305,6 @@ namespace OpenSim.Region.CoreModules.Framework.InventoryAccess return false; } - #endregion - protected override InventoryItemBase GetItem(UUID agentID, UUID itemID) { InventoryItemBase item = base.GetItem(agentID, itemID); @@ -248,5 +315,84 @@ namespace OpenSim.Region.CoreModules.Framework.InventoryAccess return item; } + + #endregion + + #region Inventory manipulation upon arriving/leaving + + // + // These 2 are for local and foreign users coming back, respectively + // + + private void ProcessInventoryForComingHome(IClientAPI client) + { + m_log.DebugFormat("[HG INVENTORY ACCESS MODULE]: Restoring root folder for local user {0}", client.Name); + if (client is IClientCore) + { + IClientCore core = (IClientCore)client; + IClientInventory inv; + + if (core.TryGet(out inv)) + { + InventoryFolderBase root = m_Scene.InventoryService.GetRootFolder(client.AgentId); + InventoryCollection content = m_Scene.InventoryService.GetFolderContent(client.AgentId, root.ID); + + inv.SendBulkUpdateInventory(content.Folders.ToArray(), content.Items.ToArray()); + } + } + } + + private void ProcessInventoryForArriving(IClientAPI client) + { + } + + // + // These 2 are for local and foreign users going away respectively + // + + private void ProcessInventoryForHypergriding(IClientAPI client) + { + if (client is IClientCore) + { + IClientCore core = (IClientCore)client; + IClientInventory inv; + + if (core.TryGet(out inv)) + { + InventoryFolderBase root = m_Scene.InventoryService.GetRootFolder(client.AgentId); + if (root != null) + { + m_log.DebugFormat("[HG INVENTORY ACCESS MODULE]: Changing root inventory for user {0}", client.Name); + InventoryCollection content = m_Scene.InventoryService.GetFolderContent(client.AgentId, root.ID); + List fids = new List(); + List iids = new List(); + List keep = new List(); + + foreach (InventoryFolderBase f in content.Folders) + { + if (f.Name != "My Suitcase") + { + f.Name = f.Name + " (Unavailable)"; + keep.Add(f); + } + } + + // items directly under the root folder + foreach (InventoryItemBase it in content.Items) + it.Name = it.Name + " (Unavailable)"; ; + + // Send the new names + inv.SendBulkUpdateInventory(keep.ToArray(), content.Items.ToArray()); + + } + } + } + } + + private void ProcessInventoryForLeaving(IClientAPI client) + { + } + + #endregion } } -- cgit v1.1