From f6b78c029a1e9e4f09b600131e99bbc13c65f30a Mon Sep 17 00:00:00 2001 From: Vitaly Takmazov Date: Mon, 9 Jan 2023 09:45:12 +0300 Subject: Mastodon API: statuses --- src/main/java/com/juick/www/api/Mastodon.java | 31 +++++++++++++++++++++++---- 1 file changed, 27 insertions(+), 4 deletions(-) (limited to 'src/main/java/com/juick/www/api/Mastodon.java') diff --git a/src/main/java/com/juick/www/api/Mastodon.java b/src/main/java/com/juick/www/api/Mastodon.java index af1c5ef7..5982209e 100644 --- a/src/main/java/com/juick/www/api/Mastodon.java +++ b/src/main/java/com/juick/www/api/Mastodon.java @@ -17,6 +17,7 @@ package com.juick.www.api; +import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.databind.PropertyNamingStrategies; import com.fasterxml.jackson.databind.annotation.JsonNaming; @@ -298,11 +299,11 @@ public class Mastodon { )) : List.of(); return new Status( - String.valueOf(message.getMid()), + ProfileUriBuilder.messageId(message), message.getCreated(), toAccount(message.getUser()), - null, - null, + message.getReplyto() > 0 ? ProfileUriBuilder.messageId(message.getMid(), message.getReplyto()) : null, + message.getTo().getUid() > 0 ? String.valueOf(message.getTo().getUid()) : null, MessageUtils.isSensitive(message), "", "public", @@ -314,9 +315,16 @@ public class Mastodon { @GetMapping("/api/v1/timelines/{timeline}") public List publicTimeline(@ModelAttribute User visitor, @PathVariable String timeline, - @RequestParam(value = "max_id", required = false, defaultValue = "0") int before, + @RequestParam(value = "max_id", required = false) String maxId, @RequestParam(value = "only_media", required = false, defaultValue = "false") Boolean media) { List mids = List.of(); + int before = 0; + if (maxId != null) { + var lastMessage = activityPubManager.findMessage(maxId); + if (lastMessage != null) { + before = lastMessage.getMid(); + } + } if (timeline.equals("public")) { if (media) { mids = messagesService.getPhotos(visitor.getUid(), before); @@ -333,4 +341,19 @@ public class Mastodon { }) .collect(Collectors.toList()); } + @GetMapping("/api/v1/statuses/{mid}-{rid}") + public Status status(@PathVariable int mid, @PathVariable int rid) { + return toStatus(activityPubManager.findMessage(mid, rid)); + } + public record Context(@JsonInclude List ancestors, @JsonInclude List descendants) { + + } + @GetMapping("/api/v1/statuses/{mid}-{rid}/context") + public Context thread(@ModelAttribute User visitor, @PathVariable int mid, @PathVariable int rid) { + var thread = messagesService.getReplies(visitor, mid).stream() + .filter(m -> m.getRid() > rid) + .peek(msg -> msg.getUser().setAvatar(webApp.getAvatarUrl(msg.getUser()))) + .map(this::toStatus).toList(); + return new Context(List.of(), thread); + } } -- cgit v1.2.3