🚸 Show USK path when no meta strings present
authorDavid ‘Bombe’ Roden <bombe@pterodactylus.net>
Thu, 28 Mar 2019 09:35:18 +0000 (10:35 +0100)
committerDavid ‘Bombe’ Roden <bombe@pterodactylus.net>
Thu, 28 Mar 2019 09:35:18 +0000 (10:35 +0100)
src/main/kotlin/net/pterodactylus/sone/text/SoneTextParser.kt
src/test/java/net/pterodactylus/sone/text/SoneTextParserTest.java

index 0063148..ad9bca4 100644 (file)
@@ -69,8 +69,12 @@ class SoneTextParser @Inject constructor(private val soneProvider: SoneProvider?
                SSK, USK ->
                        try {
                                FreenetURI(link).let { uri ->
-                                       uri.allMetaStrings?.lastOrNull() ?: uri.docName ?: "${uri.keyType}@${uri.routingKey.freenetBase64}"
-                               }.let { FreenetLinkPart(link, it, trusted = context?.routingKey?.contentEquals(FreenetURI(link).routingKey) == true) }
+                                       uri.allMetaStrings
+                                                       ?.takeIf { (it.size > 1) || ((it.size == 1) && (it.single() != ""))}
+                                                       ?.lastOrNull()
+                                                       ?: uri.docName
+                                                       ?: "${uri.keyType}@${uri.routingKey.freenetBase64}"
+                               }.let { FreenetLinkPart(link.removeSuffix("/"), it, trusted = context?.routingKey?.contentEquals(FreenetURI(link).routingKey) == true) }
                        } catch (e: MalformedURLException) {
                                PlainTextPart(link)
                        }
index 69cc658..446ef1b 100644 (file)
@@ -313,6 +313,12 @@ public class SoneTextParserTest {
        }
 
        @Test
+       public void uskLinkWithoutFilenameButEndingInSlashShowsThePath() {
+               Iterable<Part> parts = soneTextParser.parse("Some link (USK@qM1nmgU-YUnIttmEhqjTl7ifAF3Z6o~5EPwQW03uEQU,aztSUkT-VT1dWvfSUt9YpfyW~Flmf5yXpBnIE~v8sAg,AAMC--8/test/0/). Nice", null);
+               assertThat("Part Text", convertText(parts), is("Some link ([USK@qM1nmgU-YUnIttmEhqjTl7ifAF3Z6o~5EPwQW03uEQU,aztSUkT-VT1dWvfSUt9YpfyW~Flmf5yXpBnIE~v8sAg,AAMC--8/test/0|USK@qM1nmgU-YUnIttmEhqjTl7ifAF3Z6o~5EPwQW03uEQU,aztSUkT-VT1dWvfSUt9YpfyW~Flmf5yXpBnIE~v8sAg,AAMC--8/test/0|test]). Nice"));
+       }
+
+       @Test
        public void httpLinkWithOpenedAndClosedParensEndsAtNextClosingParen() {
                Iterable<Part> parts = soneTextParser.parse("Some text (and a link: http://example.sone/abc_(def)) â€“ nice!", null);
                assertThat("Part Text", convertText(parts, PlainTextPart.class, LinkPart.class), is("Some text (and a link: [http://example.sone/abc_(def)|http://example.sone/abc_(def)|example.sone/abc_(def)]) â€“ nice!"));