From 8a8c89a0f32b528bd588715bdbfc875c852e7187 Mon Sep 17 00:00:00 2001
From: Brian McBee
Date: Sat, 15 Dec 2007 04:57:14 +0000
Subject: Grid Inventory feature upgrade: renaming folders should now be
correct, subfolders work, moving folders works. Tested only in MYSQL, but may
work in MSSQL and sqlite. Probably not working in standalone mode.
---
OpenSim/Region/ClientStack/ClientView.cs | 63 ++++++++++++++++++++--
.../Communications/Local/LocalInventoryService.cs | 5 ++
.../Communications/OGS1/OGS1InventoryService.cs | 10 ++++
OpenSim/Region/Environment/Scenes/Scene.cs | 1 +
.../Region/Examples/SimpleApp/MyNpcCharacter.cs | 3 +-
5 files changed, 78 insertions(+), 4 deletions(-)
(limited to 'OpenSim/Region')
diff --git a/OpenSim/Region/ClientStack/ClientView.cs b/OpenSim/Region/ClientStack/ClientView.cs
index 0514df5..1746db8 100644
--- a/OpenSim/Region/ClientStack/ClientView.cs
+++ b/OpenSim/Region/ClientStack/ClientView.cs
@@ -502,6 +502,7 @@ namespace OpenSim.Region.ClientStack
public event CreateNewInventoryItem OnCreateNewInventoryItem;
public event CreateInventoryFolder OnCreateNewInventoryFolder;
public event UpdateInventoryFolder OnUpdateInventoryFolder;
+ public event MoveInventoryFolder OnMoveInventoryFolder;
public event FetchInventoryDescendents OnFetchInventoryDescendents;
public event PurgeInventoryDescendents OnPurgeInventoryDescendents;
public event FetchInventory OnFetchInventory;
@@ -892,7 +893,7 @@ namespace OpenSim.Region.ClientStack
/// The number of subfolders contained in the given folder. This is necessary since
/// the client is expecting inventory packets which incorporate this number into the descendents field, even though
/// we send back no details of the folders themselves (only the items).
- public void SendInventoryFolderDetails(LLUUID ownerID, LLUUID folderID, List items, int subFoldersCount)
+ public void SendInventoryFolderDetails(LLUUID ownerID, LLUUID folderID, List items, List folders, int subFoldersCount)
{
Encoding enc = Encoding.ASCII;
uint FULL_MASK_PERMISSIONS = 2147483647;
@@ -931,14 +932,14 @@ namespace OpenSim.Region.ClientStack
descend.ItemData[i].FolderID = item.parentFolderID;
descend.ItemData[i].GroupID = new LLUUID("00000000-0000-0000-0000-000000000000");
descend.ItemData[i].GroupMask = 0;
- descend.ItemData[i].InvType = (sbyte) item.invType;
+ descend.ItemData[i].InvType = (sbyte)item.invType;
descend.ItemData[i].Name = Helpers.StringToField(item.inventoryName);
descend.ItemData[i].NextOwnerMask = item.inventoryNextPermissions;
descend.ItemData[i].OwnerID = item.avatarID;
descend.ItemData[i].OwnerMask = item.inventoryCurrentPermissions;
descend.ItemData[i].SalePrice = 0;
descend.ItemData[i].SaleType = 0;
- descend.ItemData[i].Type = (sbyte) item.assetType;
+ descend.ItemData[i].Type = (sbyte)item.assetType;
descend.ItemData[i].CRC =
Helpers.InventoryCRC(descend.ItemData[i].CreationDate, descend.ItemData[i].SaleType,
@@ -976,6 +977,47 @@ namespace OpenSim.Region.ClientStack
{
OutPacket(descend, ThrottleOutPacketType.Asset);
}
+
+ //send subfolders
+ descend = CreateInventoryDescendentsPacket(ownerID, folderID);
+ descend.FolderData = new InventoryDescendentsPacket.FolderDataBlock[folders.Count];
+ i = 0;
+ count = 0;
+ foreach (InventoryFolderBase folder in folders)
+ {
+ descend.FolderData[i] = new InventoryDescendentsPacket.FolderDataBlock();
+ descend.FolderData[i].FolderID = folder.folderID;
+ descend.FolderData[i].Name = Helpers.StringToField(folder.name);
+ descend.FolderData[i].ParentID = folder.parentID;
+ descend.FolderData[i].Type = (sbyte)folder.type;
+ i++;
+ count++;
+ if (i == 40)
+ {
+ OutPacket(descend, ThrottleOutPacketType.Asset);
+
+ if ((folders.Count - count) > 0)
+ {
+ descend = CreateInventoryDescendentsPacket(ownerID, folderID);
+ if ((folders.Count - count) < 40)
+ {
+ descend.FolderData = new InventoryDescendentsPacket.FolderDataBlock[items.Count - count];
+ descend.AgentData.Descendents = folders.Count - count;
+ }
+ else
+ {
+ descend.FolderData = new InventoryDescendentsPacket.FolderDataBlock[40];
+ descend.AgentData.Descendents = 40;
+ }
+ i = 0;
+ }
+ }
+ }
+
+ if (i < 40)
+ {
+ OutPacket(descend, ThrottleOutPacketType.Asset);
+ }
}
private InventoryDescendentsPacket CreateInventoryDescendentsPacket(LLUUID ownerID, LLUUID folderID)
@@ -2821,6 +2863,17 @@ namespace OpenSim.Region.ClientStack
}
}
break;
+ case PacketType.MoveInventoryFolder:
+ if (OnMoveInventoryFolder != null)
+ {
+ MoveInventoryFolderPacket invFolder = (MoveInventoryFolderPacket)Pack;
+ for (int i = 0; i < invFolder.InventoryData.Length; i++)
+ {
+ OnMoveInventoryFolder(this, invFolder.InventoryData[i].FolderID,
+ invFolder.InventoryData[i].ParentID);
+ }
+ }
+ break;
case PacketType.CreateInventoryItem:
CreateInventoryItemPacket createItem = (CreateInventoryItemPacket) Pack;
if (OnCreateNewInventoryItem != null)
@@ -3267,6 +3320,10 @@ namespace OpenSim.Region.ClientStack
// TODO: handle this packet
MainLog.Instance.Warn("CLIENT", "unhandled RequestRegionInfo packet");
break;
+ case PacketType.InventoryDescendents:
+ // TODO: handle this packet
+ MainLog.Instance.Warn("CLIENT", "unhandled InventoryDescent packet");
+ break;
default:
MainLog.Instance.Warn("CLIENT", "unhandled packet " + Pack.ToString());
break;
diff --git a/OpenSim/Region/Communications/Local/LocalInventoryService.cs b/OpenSim/Region/Communications/Local/LocalInventoryService.cs
index e82d267..08bd850 100644
--- a/OpenSim/Region/Communications/Local/LocalInventoryService.cs
+++ b/OpenSim/Region/Communications/Local/LocalInventoryService.cs
@@ -68,6 +68,11 @@ namespace OpenSim.Region.Communications.Local
AddFolder(folder);
}
+ public override void MoveExistingInventoryFolder(InventoryFolderBase folder)
+ {
+ MoveFolder(folder);
+ }
+
public override void AddNewInventoryItem(LLUUID userID, InventoryItemBase item)
{
AddItem(item);
diff --git a/OpenSim/Region/Communications/OGS1/OGS1InventoryService.cs b/OpenSim/Region/Communications/OGS1/OGS1InventoryService.cs
index d45e150..4f5d9ab 100644
--- a/OpenSim/Region/Communications/OGS1/OGS1InventoryService.cs
+++ b/OpenSim/Region/Communications/OGS1/OGS1InventoryService.cs
@@ -126,6 +126,16 @@ namespace OpenSim.Region.Communications.OGS1
}
}
+ public void MoveInventoryFolder(LLUUID userID, InventoryFolderBase folder)
+ {
+ try
+ {
+ RestObjectPoster.BeginPostObject(_inventoryServerUrl + "/MoveFolder/", folder);
+ }
+ catch (Exception)
+ {
+ }
+ }
public void AddNewInventoryItem(LLUUID userID, InventoryItemBase item)
{
try
diff --git a/OpenSim/Region/Environment/Scenes/Scene.cs b/OpenSim/Region/Environment/Scenes/Scene.cs
index 59548a2..aad977a 100644
--- a/OpenSim/Region/Environment/Scenes/Scene.cs
+++ b/OpenSim/Region/Environment/Scenes/Scene.cs
@@ -1102,6 +1102,7 @@ namespace OpenSim.Region.Environment.Scenes
client.OnCreateNewInventoryItem += CreateNewInventoryItem;
client.OnCreateNewInventoryFolder += CommsManager.UserProfileCacheService.HandleCreateInventoryFolder;
client.OnUpdateInventoryFolder += CommsManager.UserProfileCacheService.HandleUpdateInventoryFolder;
+ client.OnMoveInventoryFolder += CommsManager.UserProfileCacheService.HandleMoveInventoryFolder;
client.OnFetchInventoryDescendents += CommsManager.UserProfileCacheService.HandleFetchInventoryDescendents;
client.OnPurgeInventoryDescendents += CommsManager.UserProfileCacheService.HandlePurgeInventoryDescendents;
client.OnRequestTaskInventory += RequestTaskInventory;
diff --git a/OpenSim/Region/Examples/SimpleApp/MyNpcCharacter.cs b/OpenSim/Region/Examples/SimpleApp/MyNpcCharacter.cs
index 9864074..9b2cdda 100644
--- a/OpenSim/Region/Examples/SimpleApp/MyNpcCharacter.cs
+++ b/OpenSim/Region/Examples/SimpleApp/MyNpcCharacter.cs
@@ -108,6 +108,7 @@ namespace SimpleApp
public event CreateNewInventoryItem OnCreateNewInventoryItem;
public event CreateInventoryFolder OnCreateNewInventoryFolder;
public event UpdateInventoryFolder OnUpdateInventoryFolder;
+ public event MoveInventoryFolder OnMoveInventoryFolder;
public event FetchInventoryDescendents OnFetchInventoryDescendents;
public event PurgeInventoryDescendents OnPurgeInventoryDescendents;
public event FetchInventory OnFetchInventory;
@@ -317,7 +318,7 @@ namespace SimpleApp
{
}
- public virtual void SendInventoryFolderDetails(LLUUID ownerID, LLUUID folderID, List items, int subFoldersCount)
+ public virtual void SendInventoryFolderDetails(LLUUID ownerID, LLUUID folderID, List items, List folders, int subFoldersCount)
{
}
--
cgit v1.1