1
0
mirror of https://github.com/tateisu/SubwayTooter synced 2025-01-26 16:56:28 +01:00

プロフ画面でnotes中のリンクのスキーマ部分が隠れないバグを修正

This commit is contained in:
tateisu 2019-07-29 01:51:48 +09:00
parent e6ca3dd8ef
commit 73ceb4acaa

View File

@ -457,7 +457,7 @@ object HTMLDecoder {
return sb
}
private val reNormalLink = Pattern.compile("""\A\w+://[^/]*""")
private val reNormalLink = Pattern.compile("""\A(\w+://)[^/]*""")
// URLの表記を短くする
// Punycode のデコードはサーバ側で行われる?ので、ここでは元リンクの表示テキストを元にURL短縮を試みる
@ -465,17 +465,29 @@ object HTMLDecoder {
try {
val m = reNormalLink.matcher(originalUrl)
if(m.find()) {
// 通常リンクはhttp,httpsだけでなく幾つかのスキーマ名が含まれる
// https://github.com/tootsuite/mastodon/pull/7810
// スキーマ名の直後には必ず :// が出現する
if(m.find()) return SpannableStringBuilder().apply {
// 文字装飾をそのまま残したいのでsubSequenceを返す
// WebUIでは非表示スパンに隠れているが、
// 通常のリンクなら スキーマ名 + :// が必ず出現する
val schema = m.group(1)
val start = if(schema.startsWith("http")) {
// http,https の場合はスキーマ表記を省略する
schema.length
} else {
// その他のスキーマもMastodonでは許容される
// この場合はスキーマ名を省略しない
// https://github.com/tootsuite/mastodon/pull/7810
0
}
val length = originalUrl.length
val limit = m.end() + 10 // 10 characters for ( path + query + fragment )
if(originalUrl.length > limit) {
// 文字装飾をそのまま残したい
return SpannableStringBuilder()
.append(originalUrl.subSequence(0, limit))
.append('…')
if(length > limit) {
append(originalUrl.subSequence(start, limit))
append('…')
} else {
append(originalUrl.subSequence(start, length))
}
}
} catch(ex : Throwable) {