public static InventoryBlock InventoryToMessage(InventoryNodeBase obj) { if (obj is InventoryItemBase) { // Inventory item InventoryItemBase item = (InventoryItemBase)obj; InventoryBlockItem itemObj = new InventoryBlockItem(); itemObj.AssetID = item.AssetID; itemObj.ContentType = CableBeachUtils.SLAssetTypeToContentType(item.AssetType); itemObj.CreationDate = OpenMetaverse.Utils.UnixTimeToDateTime(item.CreationDate); UUID.TryParse(item.CreatorId, out itemObj.CreatorID); itemObj.Description = item.Description; itemObj.Flags = item.Flags; itemObj.GroupID = item.GroupID; itemObj.GroupOwned = item.GroupOwned; itemObj.ID = item.ID; itemObj.Name = item.Name; itemObj.OwnerID = item.Owner; itemObj.ParentID = item.Folder; itemObj.PermsBase = item.BasePermissions; itemObj.PermsEveryone = item.EveryOnePermissions; itemObj.PermsGroup = item.GroupPermissions; itemObj.PermsNext = item.NextPermissions; itemObj.PermsOwner = item.CurrentPermissions; itemObj.SalePrice = item.SalePrice; itemObj.SaleType = item.SaleType; return itemObj; } else if (obj is InventoryFolderImpl) { // Inventory folder that potentially contains child objects InventoryFolderImpl folder = (InventoryFolderImpl)obj; InventoryBlockFolder folderObj = new InventoryBlockFolder(); folderObj.ID = folder.ID; folderObj.Name = folder.Name; folderObj.OwnerID = folder.Owner; folderObj.ParentID = folder.ParentID; folderObj.PreferredContentType = CableBeachUtils.SLAssetTypeToContentType(folder.Type); folderObj.Version = folder.Version; if (folder.Items != null) { folderObj.Children = new InventoryBlock[folder.Items.Count]; int i = 0; foreach (InventoryNodeBase child in folder.Items.Values) folderObj.Children[i++] = InventoryToMessage(child); } else { folderObj.Children = new InventoryBlock[0]; } return folderObj; } else if (obj is InventoryFolderBase) { // Basic inventory folder object, no children InventoryFolderBase folder = (InventoryFolderBase)obj; InventoryBlockFolder folderObj = new InventoryBlockFolder(); folderObj.ID = folder.ID; folderObj.Name = folder.Name; folderObj.OwnerID = folder.Owner; folderObj.ParentID = folder.ParentID; folderObj.PreferredContentType = CableBeachUtils.SLAssetTypeToContentType(folder.Type); folderObj.Version = folder.Version; folderObj.Children = new InventoryBlock[0]; return folderObj; } else { throw new ArgumentException("Unrecognized inventory node type " + obj.GetType().FullName); } }