diff options
author | Vitaly Takmazov | 2018-10-10 00:09:58 +0300 |
---|---|---|
committer | Vitaly Takmazov | 2018-10-24 00:00:46 +0300 |
commit | 8e6d764d6bb4391532e5376c795f634ee3898872 (patch) | |
tree | 99c5266ff0e1395b99ac5a70d2eca1e97865c856 /juick-server/src/main/java/com/juick/server/ActivityPubManager.java | |
parent | ee62ef1659604a373cb1c94d3cf0b1a6fd3946e8 (diff) |
ActivityPub: Mentions and Hashtags
Diffstat (limited to 'juick-server/src/main/java/com/juick/server/ActivityPubManager.java')
-rw-r--r-- | juick-server/src/main/java/com/juick/server/ActivityPubManager.java | 29 |
1 files changed, 25 insertions, 4 deletions
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<Context> createContext = signatureManager.getContext(msg.getReplyToUri()); + if (createContext.isPresent()) { + Create activity = (Create) createContext.get(); + Optional<Context> 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; } |