From 890377e9014a00fe6a733fea2fbc2a9d466903a0 Mon Sep 17 00:00:00 2001 From: tateisu Date: Wed, 3 Jul 2019 20:37:30 +0900 Subject: [PATCH] force full acct mention in delete & redraft. --- .../java/jp/juggler/subwaytooter/ActPost.kt | 2 +- .../subwaytooter/util/DecodeOptions.kt | 3 +- .../juggler/subwaytooter/util/HTMLDecoder.kt | 43 ++++++++++++------- 3 files changed, 30 insertions(+), 18 deletions(-) diff --git a/app/src/main/java/jp/juggler/subwaytooter/ActPost.kt b/app/src/main/java/jp/juggler/subwaytooter/ActPost.kt index 9702e335..88229957 100644 --- a/app/src/main/java/jp/juggler/subwaytooter/ActPost.kt +++ b/app/src/main/java/jp/juggler/subwaytooter/ActPost.kt @@ -765,7 +765,7 @@ class ActPost : AppCompatActivity(), // 再編集の場合はdefault_textは反映されない - val decodeOptions = DecodeOptions(this) + val decodeOptions = DecodeOptions(this, mentionFullAcct = true) var text : Spannable diff --git a/app/src/main/java/jp/juggler/subwaytooter/util/DecodeOptions.kt b/app/src/main/java/jp/juggler/subwaytooter/util/DecodeOptions.kt index bcce26fd..99acab3b 100644 --- a/app/src/main/java/jp/juggler/subwaytooter/util/DecodeOptions.kt +++ b/app/src/main/java/jp/juggler/subwaytooter/util/DecodeOptions.kt @@ -23,7 +23,8 @@ class DecodeOptions( var highlightTrie : WordTrieTree? = null, var unwrapEmojiImageTag :Boolean = false, var enlargeCustomEmoji :Float = 1f, - var forceHtml : Boolean = false // force use HTML instead of Misskey Markdown + var forceHtml : Boolean = false, // force use HTML instead of Misskey Markdown + var mentionFullAcct : Boolean = false ) { internal fun isMediaAttachment(url : String?) : Boolean { diff --git a/app/src/main/java/jp/juggler/subwaytooter/util/HTMLDecoder.kt b/app/src/main/java/jp/juggler/subwaytooter/util/HTMLDecoder.kt index b175c6c3..543dc1ee 100644 --- a/app/src/main/java/jp/juggler/subwaytooter/util/HTMLDecoder.kt +++ b/app/src/main/java/jp/juggler/subwaytooter/util/HTMLDecoder.kt @@ -315,7 +315,7 @@ object HTMLDecoder { val start = sb.length - sb.append( encodeUrl(options, sb_tmp.toString(), href) ) + sb.append(encodeUrl(options, sb_tmp.toString(), href)) val end = sb.length @@ -392,15 +392,33 @@ object HTMLDecoder { href : String? ) : CharSequence { + if(display_url.isNotEmpty()) { + when(display_url[0]) { + '@' -> { + // @mention + if(href != null && (options.mentionFullAcct || Pref.bpMentionFullAcct(App1.pref))) { + val acct = TootAccount.getAcctFromUrl(href) + if(acct != null) return "@$acct" + } + return display_url + } + + '#' -> { + // #hashtag + return display_url + } + } + } + val context = options.context - - if(context == null || ! options.short){ + + if(context == null || ! options.short) { return display_url } // 添付メディアのURLなら絵文字に変換する - if( options.isMediaAttachment(href)){ - return SpannableString(href).apply{ + if(options.isMediaAttachment(href)) { + return SpannableString(href).apply { setSpan( EmojiImageSpan(context, R.drawable.emj_1f5bc_fe0f), 0, @@ -412,11 +430,11 @@ object HTMLDecoder { // ニコニコ大百科のURLを変える val m = reNicodic.matcher(href) - if( m.find() ){ - return SpannableString("${m.group(1).decodePercent() }:nicodic:").apply{ + if(m.find()) { + return SpannableString("${m.group(1).decodePercent()}:nicodic:").apply { setSpan( EmojiImageSpan(context, R.drawable.nicodic), - length -9, + length - 9, length, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE ) @@ -426,17 +444,10 @@ object HTMLDecoder { // 通常リンクはhttp,httpsだけでなく幾つかのスキーマ名が含まれる // スキーマ名の直後には必ず :// が出現する // https://github.com/tootsuite/mastodon/pull/7810 - if( reNormalLink.matcher(display_url).find() ){ + if(reNormalLink.matcher(display_url).find()) { return shortenUrl(display_url) } - // メンションをfull acct にする - if( display_url.startsWith("@") && href != null && Pref.bpMentionFullAcct(App1.pref) ){ - val acct = TootAccount.getAcctFromUrl(href) - if(acct != null) return "@$acct" - } - - // ハッシュタグやメンションはURLの短縮表示の対象外 return display_url } }