private async Task <Mastodon.Status> _translateStatus(CollectionTools.EntityCollectionItem item) { var isCreate = item.Entity.Data.Type.Contains("https://www.w3.org/ns/activitystreams#Create"); var isAnnounce = item.Entity.Data.Type.Contains("https://www.w3.org/ns/activitystreams#Announce"); if (!isCreate && !isAnnounce) { return(await _translateNote(item.Entity, null)); } var inner = await _translateNote(await _entityStore.GetEntity(item.Entity.Data["object"].First().Id, true), (isCreate && item.CollectionItemId >= 0)?item.CollectionItemId.ToString() : null); if (inner == null) { return(null); } if (isCreate) { return(inner); } return(new Mastodon.Status { id = item.CollectionItemId.ToString(), uri = inner.uri, url = inner.url, account = await _processAccount(await _entityStore.GetEntity(item.Entity.Data["actor"].First().Id, true)), in_reply_to_id = inner.in_reply_to_id, in_reply_to_account_id = inner.in_reply_to_account_id, reblog = inner, content = inner.content, created_at = DateTime.Parse((string)item.Entity.Data["published"].FirstOrDefault()?.Primitive ?? DateTime.Now.ToString()), emojis = inner.emojis, reblogs_count = inner.reblogs_count, favourites_count = inner.favourites_count, reblogged = inner.reblogged, favourited = inner.favourited, muted = inner.muted, sensitive = inner.sensitive, spoiler_text = inner.spoiler_text, visibility = inner.visibility, media_attachments = inner.media_attachments, mentions = inner.mentions, tags = inner.tags, application = inner.application, language = inner.language, pinned = inner.pinned }); }
public async Task <IActionResult> GetStatus(string id) { var userId = User.FindFirst(JwtTokenSettings.ActorClaim)?.Value; if (userId == null) { return(Unauthorized()); } CollectionTools.EntityCollectionItem item = null; if (int.TryParse(id, out var idInt)) { item = await _collectionTools.GetCollectionItem(idInt); } else { var ent = await _entityStore.GetEntity(Uri.UnescapeDataString(id), true); if (ent != null) { item = new CollectionTools.EntityCollectionItem { CollectionItemId = -1, Entity = ent } } ; } if (item == null) { return(NotFound()); } var translated = await _translateStatus(item); if (translated == null) { return(NotFound()); } return(Json(translated)); }
public async Task <IActionResult> GetStatusContext(string id) { var userId = User.FindFirst(JwtTokenSettings.ActorClaim)?.Value; if (userId == null) { return(Unauthorized()); } CollectionTools.EntityCollectionItem item = null; if (int.TryParse(id, out var idInt)) { item = await _collectionTools.GetCollectionItem(idInt); } else { var ent = await _entityStore.GetEntity(Uri.UnescapeDataString(id), true); if (ent != null) { item = new CollectionTools.EntityCollectionItem { CollectionItemId = -1, Entity = ent } } ; } if (item.Entity.Data["object"].Any()) { item.Entity = await _entityStore.GetEntity(item.Entity.Data["object"].First().Id, true); } if (item == null) { return(NotFound()); } var res = new Mastodon.Context { ancestors = new List <Mastodon.Status>(), descendants = new List <Mastodon.Status>() }; while (item.Entity.Data["inReplyTo"].Any()) { var replyPost = await _entityStore.GetEntity(item.Entity.Data["inReplyTo"].First().Id, false); if (replyPost == null) { break; } item.Entity = replyPost; var translated = await _translateStatus(item); if (translated != null) { res.ancestors.Add(translated); } } res.ancestors.Reverse(); return(Json(res)); }
private async Task <Mastodon.Notification> _translateNotification(CollectionTools.EntityCollectionItem item) { var userId = User.FindFirst(JwtTokenSettings.ActorClaim).Value; if (item.Entity.Data.Type.Contains("https://www.w3.org/ns/activitystreams#Follow")) { return(new Mastodon.Notification { id = item.CollectionItemId.ToString(), type = "follow", created_at = DateTime.Parse((string)item.Entity.Data["published"].FirstOrDefault()?.Primitive ?? item.Entity.Updated.ToString()), account = await _processAccount(await _entityStore.GetEntity(item.Entity.Data["actor"].First().Id, true)), status = null }); } else if (item.Entity.Data.Type.Contains("https://www.w3.org/ns/activitystreams#Announce") || item.Entity.Data.Type.Contains("https://www.w3.org/ns/activitystreams#Like")) { var note = await _entityStore.GetEntity(item.Entity.Data["object"].First().Id, true); if (note == null || !note.Data["attributedTo"].Any(a => a.Id == userId)) { return(null); } var status = await _translateNote(note, null); if (status == null) { return(null); } return(new Mastodon.Notification { id = item.CollectionItemId.ToString(), type = item.Entity.Data.Type.Contains("https://www.w3.org/ns/activitystreams#Announce") ? "reblog" : "favourite", created_at = DateTime.Parse((string)item.Entity.Data["published"].FirstOrDefault()?.Primitive ?? item.Entity.Updated.ToString()), account = await _processAccount(await _entityStore.GetEntity(item.Entity.Data["actor"].First().Id, true)), status = status }); } else if (item.Entity.Data.Type.Contains("https://www.w3.org/ns/activitystreams#Create")) { var note = await _entityStore.GetEntity(item.Entity.Data["object"].First().Id, true); if (note == null) { return(null); } var status = await _translateNote(note, null); if (status == null) { return(null); } return(new Mastodon.Notification { id = item.CollectionItemId.ToString(), type = "mention", created_at = DateTime.Parse((string)item.Entity.Data["published"].FirstOrDefault()?.Primitive ?? DateTime.Now.ToString()), account = await _processAccount(await _entityStore.GetEntity(item.Entity.Data["actor"].First().Id, true)), status = status }); } return(null); }