using MongoDB.Entities; using PrivaPub.StaticServices; using PostEntity = PrivaPub.Models.Post.Post; namespace PrivaPub.Federation.Inbox { public static class Communities { // the remote community a post was made in: its own audience, or the first one its thread names on the way up (a // comment fetched for its thread, or delivered to a persona, may name none) public static async Task Of(PostEntity post, DbEntities dbEntities, CancellationToken token) { for (var depth = 0; post != default && depth < RemotePosts.MaxDepth; depth++) { if (!string.IsNullOrEmpty(post.AudienceURI)) return post.AudienceURI; post = string.IsNullOrEmpty(post.AnsweringToPostId) ? default : await dbEntities.Posts.MatchID(post.AnsweringToPostId).ExecuteFirstAsync(token); } return default; } } }