Avoids crashing the app in weird urls.
This commit is contained in:
+27
-20
@@ -22,9 +22,11 @@ package com.vitorpamplona.amethyst.commons.richtext
|
|||||||
|
|
||||||
import androidx.compose.runtime.Stable
|
import androidx.compose.runtime.Stable
|
||||||
import com.vitorpamplona.quartz.utils.DualCase
|
import com.vitorpamplona.quartz.utils.DualCase
|
||||||
|
import com.vitorpamplona.quartz.utils.Log
|
||||||
import com.vitorpamplona.quartz.utils.startsWithAny
|
import com.vitorpamplona.quartz.utils.startsWithAny
|
||||||
import com.vitorpamplona.quartz.utils.urldetector.Url
|
import com.vitorpamplona.quartz.utils.urldetector.Url
|
||||||
import com.vitorpamplona.quartz.utils.urldetector.detection.UrlDetector
|
import com.vitorpamplona.quartz.utils.urldetector.detection.UrlDetector
|
||||||
|
import kotlinx.coroutines.CancellationException
|
||||||
|
|
||||||
@Stable
|
@Stable
|
||||||
class Urls(
|
class Urls(
|
||||||
@@ -77,30 +79,35 @@ class UrlParser {
|
|||||||
val blossom = mutableSetOf<String>()
|
val blossom = mutableSetOf<String>()
|
||||||
|
|
||||||
urls.forEach { url ->
|
urls.forEach { url ->
|
||||||
if (url.isValidTopLevelDomain()) {
|
try {
|
||||||
if (url.wroteWithSchema()) {
|
if (url.isValidTopLevelDomain()) {
|
||||||
if (url.originalUrl.startsWithAny(httpScheme)) {
|
if (url.wroteWithSchema()) {
|
||||||
// quick exit
|
if (url.originalUrl.startsWithAny(httpScheme)) {
|
||||||
completeUrls.add(url.originalUrl)
|
// quick exit
|
||||||
} else if (url.originalUrl.startsWithAny(nostrScheme)) {
|
completeUrls.add(url.originalUrl)
|
||||||
bech32.add(url.originalUrl)
|
} else if (url.originalUrl.startsWithAny(nostrScheme)) {
|
||||||
} else if (url.originalUrl.startsWithAny(websocketScheme)) {
|
bech32.add(url.originalUrl)
|
||||||
relays.add(url.originalUrl)
|
} else if (url.originalUrl.startsWithAny(websocketScheme)) {
|
||||||
} else if (url.originalUrl.startsWithAny(blossomScheme)) {
|
relays.add(url.originalUrl)
|
||||||
blossom.add(url.originalUrl)
|
} else if (url.originalUrl.startsWithAny(blossomScheme)) {
|
||||||
} else {
|
blossom.add(url.originalUrl)
|
||||||
completeUrls.add(url.originalUrl)
|
} else {
|
||||||
}
|
completeUrls.add(url.originalUrl)
|
||||||
} else {
|
|
||||||
// emails are understood as urls from the detector.
|
|
||||||
if (url.isEmail()) {
|
|
||||||
Patterns.EMAIL_ADDRESS.findAll(url.originalUrl).forEach {
|
|
||||||
emails.add(it.value)
|
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
urlsWithoutScheme.add(url.originalUrl)
|
// emails are understood as urls from the detector.
|
||||||
|
if (url.isEmail()) {
|
||||||
|
Patterns.EMAIL_ADDRESS.findAll(url.originalUrl).forEach {
|
||||||
|
emails.add(it.value)
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
urlsWithoutScheme.add(url.originalUrl)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
} catch (e: Exception) {
|
||||||
|
if (e is CancellationException) throw e
|
||||||
|
Log.e("UrlParser", "Trying to parse url `${url.originalUrl}` from `$content`", e)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user