Beispiel #1
0
        private NotecardInventoryItem ReadInventoryItem(Stream assetdata)
        {
            var item = new NotecardInventoryItem();

            if (ReadLine(assetdata) != "{")
            {
                throw new NotANotecardFormatException();
            }
            while (true)
            {
                var line = ReadLine(assetdata);
                if (line == "}")
                {
                    return(item);
                }

                var data = line.Split(new char[] { ' ', '\t' }, StringSplitOptions.RemoveEmptyEntries);
                if (data[0] == "item_id")
                {
                    item.SetNewID(data[1]);
                }
                else if (data[0] == "parent_id")
                {
                    item.ParentFolderID = data[1];
                }
                else if (data[0] == "permissions")
                {
                    ReadInventoryPermissions(assetdata, ref item);
                }
                else if (data[0] == "asset_id" && data.Length == 2)
                {
                    item.AssetID = data[1];
                }
                else if (data[0] == "type" && data.Length == 2)
                {
                    item.AssetTypeName = data[1];
                }
                else if (data[0] == "inv_type" && data.Length == 2)
                {
                    item.InventoryTypeName = data[1];
                }
                else if (data[0] == "flags" && data.Length == 2)
                {
                    uint uval;
                    if (!uint.TryParse(data[1], NumberStyles.HexNumber, CultureInfo.InvariantCulture, out uval))
                    {
                        throw new NotANotecardFormatException();
                    }
                    item.Flags = (InventoryFlags)uval;
                }
                else if (data[0] == "sale_info")
                {
                    ReadInventorySaleInfo(assetdata, ref item);
                }
                else if (data[0] == "name" && data.Length > 1)
                {
                    item.Name = line.Substring(5, line.Length - 6).Trim();
                }
                else if (data[0] == "desc" && data.Length > 1)
                {
                    item.Description = line.Substring(5, line.Length - 6).Trim();
                }
                else if (data[0] == "creation_date" && data.Length == 2)
                {
                    ulong uval;
                    if (!ulong.TryParse(data[1], out uval))
                    {
                        throw new NotANotecardFormatException();
                    }
                    item.CreationDate = Date.UnixTimeToDateTime(uval);
                }
                else
                {
                    throw new NotANotecardFormatException();
                }
            }
        }