コード例 #1
0
 public IImageFileBuilder WithExtension(string extension)
 {
     ImageFile.Extension = ImageExtensionHelper.GetExtension(extension);
     return(this);
 }
コード例 #2
0
        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);
        }
コード例 #3
0
        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);
        }