public async Task <ImageFile> AddAsync(Image image)
        {
            var libraryDirectory = FileService.GetFileInfo(image.ImageFile.LibraryFullName).Directory.FullName;

            if (!libraryDirectory.EndsWith("\\"))
            {
                libraryDirectory += "\\";
            }

            var filePath = FileSystemInfo.FileSystemInfo.RootDirectory + libraryDirectory + FileSystemInfo.FileSystemInfo.ImagesDirectory + Guid.NewGuid().ToString() + ImageExtensionHelper.ExtensionToString(image.ImageFile.Extension);
            var path     = await Task.Run(() => FileService.AddFile(filePath, image.ImageContent));

            var fileInfo = FileService.GetFileInfo(path);

            var imageFile =
                ImageFileBuilder
                .StartBuilding()
                .WithName(image.ImageFile.Name)
                .WithExtension(image.ImageFile.Extension)
                .WithFullName(path)
                .WithLibraryFullName(image.ImageFile.LibraryFullName)
                .WithCreationTime(fileInfo.CreationTimeUtc)
                .WithLastAccessTime(fileInfo.LastAccessTimeUtc)
                .WithLastWriteTime(fileInfo.LastWriteTimeUtc)
                .WithSize(fileInfo.Length)
                .WithTags(new List <Tag>())
                .Build();

            Logger.LogInformation("New added image: " + imageFile.FullName);

            return(imageFile);
        }
示例#2
0
        private async Task WriteLibraryToFileStreamAsync(FileStream fileStream, Library entity)
        {
            if (fileStream == null)
            {
                throw new Exception("File creation error");
            }

            // write all owners in one string
            string owners = "";

            for (int i = 0; i < entity.Owners.Count - 1; i++)
            {
                owners += entity.Owners[i].ToString() + ',';
            }

            owners += entity.Owners[entity.Owners.Count - 1].ToString();

            // create library element
            var libraryElement = new XElement("library", new XAttribute("name", entity.Name),
                                              new XAttribute("description", entity.Description), new XAttribute("owners", owners));

            // create tags elements
            var tagsElement = new XElement("tags");

            foreach (var t in entity.Tags)
            {
                var tagElement = new XElement("tag", new XAttribute("name", t.Name), new XAttribute("description", t.Description), new XAttribute("color", t.Color));

                tagsElement.Add(tagElement);
            }

            libraryElement.Add(tagsElement);

            // create images elements
            var imagesElement = new XElement("images");

            foreach (var i in entity.Images)
            {
                // write all tags to one string
                string tags = "";

                for (int it = 0; it < i.Tags.Count - 1; it++)
                {
                    tags += i.Tags[it].Name + ',';
                }

                tags += i.Tags[i.Tags.Count - 1].Name;


                var imageFileElement = new XElement("imageFile", new XAttribute("name", i.Name), new XAttribute("extension", ImageExtensionHelper.ExtensionToString(i.Extension)),
                                                    new XAttribute("source", i.FullName), new XAttribute("tags", tags));

                imagesElement.Add(imageFileElement);
            }

            libraryElement.Add(imagesElement);

            // save elements to the file
            try
            {
                using (var streamWriter = new StreamWriter(fileStream))
                {
                    var xmlWriter = new XmlTextWriter(streamWriter);

                    xmlWriter.Formatting  = Formatting.Indented;
                    xmlWriter.Indentation = 4;

                    await Task.Run(() => libraryElement.Save(xmlWriter));
                }
            }
            catch (Exception e)
            {
                Logger.LogError(e, e.Message);
            }
        }
        public async Task <ImageFile> UpdateAsync(ImageFile entity)
        {
            if (!FileService.FileExists(entity.FullName))
            {
                throw new ContentNotFoundException("Couldn't find specified file.");
            }

            await Task.Run(() => FileService.RenameFile(entity.FullName, entity.Name + ImageExtensionHelper.ExtensionToString(entity.Extension)));

            var oldFileInfo = await Task.Run(() => FileService.GetFileInfo(entity.FullName));

            var newFileInfo = await Task.Run(() => FileService.GetFileInfo(oldFileInfo.Directory.FullName + "\\" + entity.Name + ImageExtensionHelper.ExtensionToString(entity.Extension)));

            var imageFile =
                ImageFileBuilder
                .StartBuilding()
                .WithName(newFileInfo.Name)
                .WithExtension(newFileInfo.Extension)
                .WithFullName(newFileInfo.FullName)
                .WithLibraryFullName(entity.LibraryFullName)
                .WithCreationTime(newFileInfo.CreationTimeUtc)
                .WithLastAccessTime(newFileInfo.LastAccessTimeUtc)
                .WithLastWriteTime(newFileInfo.LastWriteTimeUtc)
                .WithSize(newFileInfo.Length)
                .WithTags(entity.Tags)
                .Build();

            Logger.LogInformation("Updated imagefile info: " + imageFile.FullName);

            return(imageFile);
        }