import java.util.regex.Matcher;
import java.util.regex.Pattern;
+import net.pterodactylus.sone.data.Album;
import net.pterodactylus.sone.data.Post;
import net.pterodactylus.sone.data.Sone;
import net.pterodactylus.sone.data.impl.IdOnlySone;
+import net.pterodactylus.sone.database.AlbumProvider;
import net.pterodactylus.sone.database.PostProvider;
import net.pterodactylus.sone.database.SoneProvider;
import net.pterodactylus.util.io.Closer;
HTTP("http://", false),
HTTPS("https://", false),
SONE("sone://", false),
- POST("post://", false);
+ POST("post://", false),
+ ALBUM("album://", false);
private final String scheme;
private final boolean freenetLink;
}
- /** The Sone provider. */
private final SoneProvider soneProvider;
-
- /** The post provider. */
private final PostProvider postProvider;
+ private final AlbumProvider albumProvider;
- /**
- * Creates a new freenet link parser.
- *
- * @param soneProvider
- * The Sone provider
- * @param postProvider
- * The post provider
- */
- public SoneTextParser(SoneProvider soneProvider, PostProvider postProvider) {
+ public SoneTextParser(SoneProvider soneProvider, PostProvider postProvider, AlbumProvider albumProvider) {
this.soneProvider = soneProvider;
this.postProvider = postProvider;
+ this.albumProvider = albumProvider;
}
//
if (next > 0) {
parts.add(new PlainTextPart(line.substring(0, next)));
line = line.substring(next);
- next = 0;
}
lineComplete = false;
continue;
}
if (linkType == LinkType.POST) {
- if (line.length() >= (7 + 36)) {
- String postId = line.substring(7, 43);
- Optional<Post> post = postProvider.getPost(postId);
- if (post.isPresent()) {
- parts.add(new PostPart(post.get()));
- } else {
- parts.add(new PlainTextPart(line.substring(0, 43)));
- }
- line = line.substring(43);
+ Optional<Post> post = postProvider.getPost(link.substring(7));
+ if (post.isPresent()) {
+ parts.add(new PostPart(post.get(), link.substring(7).equals(post.get().getInternalId())));
} else {
- parts.add(new PlainTextPart(line));
- line = "";
+ parts.add(new PlainTextPart(link));
+ }
+ line = line.substring(link.length());
+ continue;
+ }
+ if (linkType == LinkType.ALBUM) {
+ Optional<Album> album = albumProvider.getAlbum(link.substring(linkType.getScheme().length()));
+ if (album.isPresent()) {
+ parts.add(new AlbumPart(album.get()));
+ } else {
+ parts.add(new PlainTextPart(link));
}
+ line = line.substring(link.length());
continue;
}
- if ((linkType == LinkType.KSK) || (linkType == LinkType.CHK) || (linkType == LinkType.SSK) || (linkType == LinkType.USK)) {
+ if (linkType.isFreenetLink()) {
FreenetURI uri;
if (name.indexOf('?') > -1) {
name = name.substring(0, name.indexOf('?'));
}
for (int partIndex = parts.size() - 1; partIndex >= 0; --partIndex) {
Part part = parts.getPart(partIndex);
- if (!(part instanceof PlainTextPart) || !"\n".equals(((PlainTextPart) part).getText())) {
+ if (!(part instanceof PlainTextPart) || !"\n".equals(part.getText())) {
break;
}
parts.removePart(partIndex);