Пример #1
0
        public override async Task <bool> Update(Post value, CancellationToken cancellationToken = default)
        {
            if (string.IsNullOrEmpty(value.Id))
            {
                throw new Exception("No post id");
            }
            PostMetadata metadata = new PostMetadata(value);
            string       result   = ObjectTextual.Format(metadata, value.Content.Raw);
            await File.WriteAllTextAsync(GetAbsolutePath(value.Id), result, System.Text.Encoding.UTF8, cancellationToken);

            return(true);
        }
Пример #2
0
        public override async Task <string?> Create(Post value, CancellationToken cancellationToken = default)
        {
            if (string.IsNullOrEmpty(value.Id))
            {
                value.Id = Guid.NewGuid().ToString();
            }
            PostMetadata metadata = new PostMetadata(value);
            string       result   = ObjectTextual.Format(metadata, value.Content.Raw);
            await File.WriteAllTextAsync(GetAbsolutePath(value.Id), result, System.Text.Encoding.UTF8, cancellationToken);

            return(value.Id);
        }
Пример #3
0
        public override async Task <Post?> Get(string id, CancellationToken cancellationToken = default)
        {
            using var fs = await(await FileProvider.GetFileInfo(GetPath(id))).CreateReadStream();
            using var sr = new StreamReader(fs);
            var src = await sr.ReadToEndAsync();

            var(metadata, content) = ObjectTextual.Parse <PostMetadata>(src);

            if (string.IsNullOrEmpty(metadata.id))
            {
                metadata.id = id;
            }
            if (string.IsNullOrEmpty(metadata.creationTime))
            {
                metadata.creationTime = File.GetCreationTime(GetAbsolutePath(id)).ToString();
            }
            if (string.IsNullOrEmpty(metadata.modificationTime))
            {
                metadata.modificationTime = File.GetLastWriteTime(GetAbsolutePath(id)).ToString();
            }
            if (metadata.category.Length == 0)
            {
                var path  = Path.GetDirectoryName(id)?.Replace("\\", "/");
                var items = path?.Split("/", StringSplitOptions.RemoveEmptyEntries);
                metadata.category = items ?? Array.Empty <string>();
            }

            Post result = new Post();

            metadata.ApplyTo(result);
            result.Content = new Document
            {
                Raw = content
            };

            if (!string.IsNullOrEmpty(metadata.password))
            {
                result.Content = await Protector.Protect(result.Content, new ProtectionKey
                {
                    Password = metadata.password
                });
            }

            return(result);
        }