public static List <ObjectGroup> FromXml(Stream xmlstream, UGUI currentOwner, XmlDeserializationOptions options = XmlDeserializationOptions.None) { using (XmlTextReader reader = new ObjectXmlStreamFilter(xmlstream).CreateXmlReader()) { return(FromXml(reader, currentOwner, options)); } }
private InventoryItem LoadInventoryItem( Stream s) { using (XmlTextReader reader = new ObjectXmlStreamFilter(s).CreateXmlReader()) { for (;;) { if (!reader.Read()) { throw new InvalidDataException(); } switch (reader.NodeType) { case XmlNodeType.Element: if (reader.Name == "InventoryItem") { return(LoadInventoryItemData(reader)); } break; default: break; } } } }
private static InventoryItem LoadInventoryItem( Stream s, UGUI principal, List <AvatarNameServiceInterface> nameServices) { using (XmlTextReader reader = new ObjectXmlStreamFilter(s).CreateXmlReader()) { for (;;) { if (!reader.Read()) { throw new IARFormatException(); } switch (reader.NodeType) { case XmlNodeType.Element: if (reader.Name == "InventoryItem") { return(LoadInventoryItemData(reader, principal, nameServices)); } break; default: break; } } } }
public static void Load( UGUI principal, InventoryServiceInterface inventoryService, AssetServiceInterface assetService, List <AvatarNameServiceInterface> nameServices, LoadOptions options, Stream inputFile, string topath, TTY console_io = null) { using (var gzipStream = new GZipStream(inputFile, CompressionMode.Decompress)) { using (var reader = new TarArchiveReader(gzipStream)) { var inventoryPath = new Dictionary <UUID, UUID>(); var reassignedIds = new Dictionary <UUID, UUID>(); var linkItems = new List <InventoryItem>(); UUID parentFolder; try { inventoryService.CheckInventory(principal.ID); } catch (NotSupportedException) { /* some handlers may not support this call, so ignore that error */ } parentFolder = inventoryService.Folder[principal.ID, AssetType.RootFolder].ID; if (!topath.StartsWith("/")) { throw new InvalidInventoryPathException(); } if (topath != "/") { foreach (string pathcomp in topath.Substring(1).Split('/')) { List <InventoryFolder> childfolders = inventoryService.Folder.GetFolders(principal.ID, parentFolder); int idx; for (idx = 0; idx < childfolders.Count; ++idx) { if (pathcomp.ToLower() == childfolders[idx].Name.ToLower()) { break; } } if (idx == childfolders.Count) { throw new InvalidInventoryPathException(); } parentFolder = childfolders[idx].ID; } } inventoryPath[UUID.Zero] = parentFolder; for (; ;) { TarArchiveReader.Header header; try { header = reader.ReadHeader(); } catch (TarArchiveReader.EndOfTarException) { if (console_io != null) { console_io.Write("Creating link items"); } foreach (InventoryItem linkitem in linkItems) { UUID newId; if (linkitem.AssetType == AssetType.Link && reassignedIds.TryGetValue(linkitem.AssetID, out newId)) { linkitem.AssetID = newId; } inventoryService.Item.Add(linkitem); } return; } if (header.FileType == TarFileType.File) { if (header.FileName == "archive.xml") { using (Stream s = new ObjectXmlStreamFilter(reader)) { ArchiveXmlLoader.LoadArchiveXml(s); } } if (header.FileName.StartsWith("assets/") && (options & LoadOptions.NoAssets) == 0) { /* Load asset */ AssetData ad = reader.LoadAsset(header, principal); if (!assetService.Exists(ad.ID)) { assetService.Store(ad); } } if (header.FileName.StartsWith("inventory/")) { /* Load inventory */ InventoryItem item = LoadInventoryItem(reader, principal, nameServices); item.ParentFolderID = GetPath(principal, inventoryService, inventoryPath, header.FileName, options); UUID oldId = item.ID; item.SetNewID(UUID.Random); reassignedIds.Add(oldId, item.ID); if (item.AssetType == AssetType.Link || item.AssetType == AssetType.LinkFolder) { inventoryService.Item.Add(item); } else { linkItems.Add(item); } } } } } } }