コード例 #1
0
ファイル: ServiceHelper.cs プロジェクト: AlphaStaxLLC/taiga
        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);
            }
        }