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); }
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); }
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); }