From 8e6d764d6bb4391532e5376c795f634ee3898872 Mon Sep 17 00:00:00 2001 From: Vitaly Takmazov Date: Wed, 10 Oct 2018 00:09:58 +0300 Subject: ActivityPub: Mentions and Hashtags --- .../java/com/juick/server/ActivityPubManager.java | 29 +++++++++++++++++++--- 1 file changed, 25 insertions(+), 4 deletions(-) (limited to 'juick-server/src/main/java/com/juick/server/ActivityPubManager.java') diff --git a/juick-server/src/main/java/com/juick/server/ActivityPubManager.java b/juick-server/src/main/java/com/juick/server/ActivityPubManager.java index d494154c..4a6ed7be 100644 --- a/juick-server/src/main/java/com/juick/server/ActivityPubManager.java +++ b/juick-server/src/main/java/com/juick/server/ActivityPubManager.java @@ -4,9 +4,7 @@ import com.juick.Message; import com.juick.User; import com.juick.formatters.PlainTextFormatter; import com.juick.server.api.activity.model.Context; -import com.juick.server.api.activity.model.Image; -import com.juick.server.api.activity.model.Note; -import com.juick.server.api.activity.model.Person; +import com.juick.server.api.activity.model.objects.*; import com.juick.server.api.activity.model.activities.Accept; import com.juick.server.api.activity.model.activities.Announce; import com.juick.server.api.activity.model.activities.Create; @@ -31,6 +29,7 @@ import java.io.IOException; import java.net.URI; import java.util.Collections; import java.util.Optional; +import java.util.stream.Collectors; @Component public class ActivityPubManager implements ActivityListener, NotificationListener { @@ -184,6 +183,10 @@ public class ActivityPubManager implements ActivityListener, NotificationListene uri.replacePath(String.format("/n/%d-%d", mid, rid)); return uri.toUriString(); } + public String tagUri(com.juick.Tag tag) { + UriComponentsBuilder uri = UriComponentsBuilder.fromUriString(baseUri); + return uri.replacePath(String.format("/t/%s", tag.getName())).toUriString(); + } public Note makeNote(Message msg) { Note note = new Note(); @@ -204,7 +207,8 @@ public class ActivityPubManager implements ActivityListener, NotificationListene note.setCc(Collections.singletonList(followersUri(msg.getUser()))); } note.setPublished(msg.getTimestamp()); - note.setContent(msg.isHtml() ? msg.getText() : MessageUtils.formatMessage(msg.getText())); + note.setContent(msg.isHtml() ? msg.getText() + : MessageUtils.formatMessage(StringUtils.defaultString(msg.getText()))); if (StringUtils.isNotBlank(msg.getAttachmentType())) { Image attachment = new Image(); attachment.setId(msg.getAttachment().getMedium().getUrl()); @@ -212,6 +216,23 @@ public class ActivityPubManager implements ActivityListener, NotificationListene attachment.setMediaType(HttpUtils.mediaType(msg.getAttachmentType())); note.setAttachment(attachment); } + note.setTags(msg.getTags().stream().map(t -> { + Hashtag hashtag = new Hashtag(); + hashtag.setId(tagUri(t)); + hashtag.setName("#" + t.getName()); + return hashtag; + }).collect(Collectors.toList())); + if (msg.getReplyToUri().toASCIIString().length() > 0) { + Optional createContext = signatureManager.getContext(msg.getReplyToUri()); + if (createContext.isPresent()) { + Create activity = (Create) createContext.get(); + Optional personContext = signatureManager.getContext(URI.create(activity.getActor())); + if (personContext.isPresent()) { + Person person = (Person) personContext.get(); + note.getTags().add(new Mention(person.getUrl(), person.getPreferredUsername())); + } + } + } return note; } -- cgit v1.2.3