public IImageFileBuilder WithExtension(string extension) { ImageFile.Extension = ImageExtensionHelper.GetExtension(extension); return(this); }
private async Task <Library> ReadLibraryFromFileStreamAsync(FileStream fileStream) { var tags = new List <Tag>(); var images = new List <ImageFile>(); var library = new Library(); if (fileStream.Length == 0) { throw new ArgumentException("Given stream is empty"); } XmlReaderSettings settings = new XmlReaderSettings(); settings.DtdProcessing = DtdProcessing.Parse; using (var reader = XmlReader.Create(fileStream, settings)) { while (reader.Read()) { if (reader.NodeType == XmlNodeType.Element) { switch (reader.Name) { case "library": { var libraryElement = await Task.Run(() => XNode.ReadFrom(reader)) as XElement; library.Name = libraryElement.Attribute("name").Value; library.FullName = fileStream.Name; library.Description = libraryElement.Attribute("description").Value; library.Owners = new List <Guid>(); foreach (var t in libraryElement.Attribute("owners").Value.Split(',')) { library.Owners.Add(Guid.Parse(t)); } } break; case "tag": { var tagElement = await Task.Run(() => XNode.ReadFrom(reader)) as XElement; var tag = new Tag(); tag.Name = tagElement.Attribute("name").Value; tag.Description = tagElement.Attribute("description").Value; tag.Color = tagElement.Attribute("color").Value; tags.Add(tag); } break; case "imageFile": { var imageElement = await Task.Run(() => XNode.ReadFrom(reader)) as XElement; var imageTags = new List <Tag>(); foreach (var t in imageElement.Attribute("tags").Value.Split(',')) { imageTags.Add(tags.Find(x => x.Name == t)); } var fullName = imageElement.Attribute("source").Value; var imageFileInfo = FileService.GetFileInfo(fullName); var imageFile = ImageFileBuilder .StartBuilding() .WithName(imageElement.Attribute("name").Value) .WithExtension(ImageExtensionHelper.GetExtension(imageElement.Attribute("extension").Value)) .WithFullName(fullName) .WithLibraryFullName(library.FullName) .WithCreationTime(imageFileInfo.CreationTimeUtc) .WithLastAccessTime(imageFileInfo.LastAccessTimeUtc) .WithLastWriteTime(imageFileInfo.LastWriteTimeUtc) .WithSize(imageFileInfo.Length) .WithTags(imageTags) .Build(); images.Add(imageFile); } break; } } } } library.Tags = tags; library.Images = images; return(library); }
public async Task <Library> ReadLibraryFromStreamAsync(Stream fileStream, Origin origin) { var tags = new List <Tag>(); var images = new List <ImageFile>(); var library = new Library(); if (fileStream.Length == 0) { throw new ArgumentException("Given stream is empty"); } XmlReaderSettings settings = new XmlReaderSettings(); settings.DtdProcessing = DtdProcessing.Parse; using (var reader = XmlReader.Create(fileStream, settings)) { while (reader.Read()) { if (reader.NodeType == XmlNodeType.Element) { switch (reader.Name) { case "library": { var libraryElement = await Task.Run(() => XNode.ReadFrom(reader)) as XElement; library.Name = libraryElement.Attribute("name").Value; library.Description = libraryElement.Attribute("description").Value; library.Origin = origin; if (fileStream is FileStream) { library.FullName = (fileStream as FileStream).Name; } } break; case "tag": { var tagElement = await Task.Run(() => XNode.ReadFrom(reader)) as XElement; var tag = new Tag(); tag.Name = tagElement.Attribute("name").Value; tag.Description = tagElement.Attribute("description").Value; tag.Origin = origin; tag.FullName = "Local\\" + library.Name + "\\" + tag.Name + "\\"; tag.Color = tagElement.Attribute("color").Value; tags.Add(tag); } break; case "imageFile": { var imageElement = await Task.Run(() => XNode.ReadFrom(reader)) as XElement; var imageFile = ImageFileBuilder .StartBuilding() .WithName(imageElement.Attribute("name").Value) .WithExtension(ImageExtensionHelper.GetExtension(imageElement.Attribute("extension").Value)) .WithFullName(imageElement.Attribute("source").Value) .WithCreationTime(DateTime.Parse(imageElement.Attribute("creationTime").Value)) .WithLastAccessTime(DateTime.Parse(imageElement.Attribute("lastAccessTime").Value)) .WithLastWriteTime(DateTime.Parse(imageElement.Attribute("lastWriteTime").Value)) .WithSize(long.Parse(imageElement.Attribute("size").Value)) .From(origin) .Build(); foreach (var t in imageElement.Attribute("tags").Value.Split(',')) { imageFile.Tags.Add(tags.Find(x => x.Name == t)); } images.Add(imageFile); } break; } } } } library.Tags = tags; library.Images = images; return(library); }