Fanout writes a TimelineEntry for every persona a post should reach: the author, local followers of a local author, local followers of a remote one, the members of a direct conversation or a circle. Mastodon's home rules apply when it is written: a reply shows only to followers of both sides (or to the one replied to), a reblog only where reblogs are wanted. A mention of a local persona becomes a Mention notification. Inbound posts are now also kept when a persona follows their author. RemotePosts holds what CreateHandler and backfill share: building a Post from a note, and fetching a public parent the first time a reply to it arrives, so its author is known (a reply to an unknown or non-public parent stays out of home timelines). Each fetched ancestor queues a FetchAncestors job for the next one, up to ten deep. /clientapi/timeline/home and /clientapi/notifications (with /notifications/read) page by max_id for the persona's own root only. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_012CzABvBkbcFqoHdmi8b9WB
29 lines
850 B
C#
29 lines
850 B
C#
namespace PrivaPub.ClientModels.Post
|
|
{
|
|
public class ViewPost
|
|
{
|
|
public string Id { get; set; }
|
|
public string ObjectURI { get; set; }
|
|
public string AuthorAvatarId { get; set; }
|
|
public string AuthorActorURI { get; set; }
|
|
public string GroupId { get; set; }
|
|
public string DmGroupId { get; set; }
|
|
public string Visibility { get; set; }
|
|
public string AnsweringToPostId { get; set; }
|
|
public string Title { get; set; }
|
|
public string Text { get; set; }
|
|
public string ContentHtml { get; set; }
|
|
public bool HasContentWarning { get; set; }
|
|
public bool IsFederatedCopy { get; set; }
|
|
public DateTime CreationDate { get; set; }
|
|
public ViewPost ReblogOf { get; set; }
|
|
}
|
|
|
|
public class ViewDmGroup
|
|
{
|
|
public string Id { get; set; }
|
|
public List<string> Members { get; set; } = new();
|
|
public DateTime UpdatedAt { get; set; }
|
|
}
|
|
}
|