Parse album:// links
[Sone.git] / src / main / java / net / pterodactylus / sone / text / SoneTextParser.java
index 1573d1c..9fcce7a 100644 (file)
@@ -28,9 +28,11 @@ import java.util.logging.Logger;
 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;
@@ -66,7 +68,8 @@ public class SoneTextParser implements Parser<SoneTextParserContext> {
                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;
@@ -91,23 +94,14 @@ public class SoneTextParser implements Parser<SoneTextParserContext> {
 
        }
 
-       /** 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;
        }
 
        //
@@ -213,6 +207,16 @@ public class SoneTextParser implements Parser<SoneTextParserContext> {
                                                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.isFreenetLink()) {
                                                FreenetURI uri;