Mastodonのクライアント情報再利用チェックでAPIがエラーを返した際のフォールバックが不足していた

This commit is contained in:
tateisu 2023-03-03 09:42:16 +09:00
parent 953cdea115
commit c4150b1ff1
2 changed files with 44 additions and 40 deletions

View File

@ -104,6 +104,7 @@ class AuthMastodon(override val client: TootApiClient) : AuthBase() {
// スコープ一覧を取得する // スコープ一覧を取得する
val scopeString = mastodonScope(tootInstance) val scopeString = mastodonScope(tootInstance)
try {
when { when {
// 古いクライアント情報は使わない。削除もしない。 // 古いクライアント情報は使わない。削除もしない。
AUTH_VERSION != clientInfo?.int(KEY_AUTH_VERSION) -> Unit AUTH_VERSION != clientInfo?.int(KEY_AUTH_VERSION) -> Unit
@ -127,7 +128,7 @@ class AuthMastodon(override val client: TootApiClient) : AuthBase() {
// クライアント情報を再利用する // クライアント情報を再利用する
!forceUpdateClient && oldScope == scopeString -> return clientInfo !forceUpdateClient && oldScope == scopeString -> return clientInfo
else -> try { else -> {
// マストドン2.4でスコープが追加された // マストドン2.4でスコープが追加された
// 取得時のスコープ指定がマッチしない(もしくは記録されていない)ならクライアント情報を再利用してはいけない // 取得時のスコープ指定がマッチしない(もしくは記録されていない)ならクライアント情報を再利用してはいけない
daoClientInfo.delete(apiHost, clientName) daoClientInfo.delete(apiHost, clientName)
@ -142,13 +143,14 @@ class AuthMastodon(override val client: TootApiClient) : AuthBase() {
?: error("revokeClientCredential: missing client_secret"), ?: error("revokeClientCredential: missing client_secret"),
clientCredential = clientCredential, clientCredential = clientCredential,
) )
}
}
}
}
}
} catch (ex: Throwable) { } catch (ex: Throwable) {
// クライアント情報の削除処理はエラーが起きても無視する // クライアント再利用チェックやクライアント情報の削除処理はエラーが起きても無視する
log.w(ex, "can't delete client information.") log.w(ex, "can't verify/delete client information.")
}
}
}
}
} }
clientInfo = api.registerClient(apiHost, scopeString, clientName, callbackUrl).apply { clientInfo = api.registerClient(apiHost, scopeString, clientName, callbackUrl).apply {

View File

@ -204,7 +204,6 @@ private class EmojiPicker(
} }
private inner class VhCategory( private inner class VhCategory(
parent: ViewGroup,
view: FrameLayout = FrameLayout(activity), view: FrameLayout = FrameLayout(activity),
) : ViewHolderBase(view) { ) : ViewHolderBase(view) {
var lastItem: PickerItemCategory? = null var lastItem: PickerItemCategory? = null
@ -212,12 +211,15 @@ private class EmojiPicker(
val tv = AppCompatTextView(activity).apply { val tv = AppCompatTextView(activity).apply {
layoutParams = FrameLayout.LayoutParams(matchParent, wrapContent) layoutParams = FrameLayout.LayoutParams(matchParent, wrapContent)
minHeightCompat = (density * 48f + 0.5f).toInt() minHeightCompat = (density * 48f + 0.5f).toInt()
gravity = Gravity.START or Gravity.CENTER_VERTICAL
includeFontPadding = false
background = ContextCompat.getDrawable( background = ContextCompat.getDrawable(
this@EmojiPicker.activity, this@EmojiPicker.activity,
R.drawable.btn_bg_transparent_round6dp R.drawable.btn_bg_transparent_round6dp
) )
gravity = Gravity.START or Gravity.CENTER_VERTICAL
includeFontPadding = false
val paddingH = (density * 4f + 0.5f).toInt()
val paddingV = (density * 2f + 0.5f).toInt()
setPadding(paddingH,paddingV,paddingH,paddingV)
compoundDrawablePadding = (density * 4f + 0.5f).toInt() compoundDrawablePadding = (density * 4f + 0.5f).toInt()
setOnClickListener { setOnClickListener {
@ -401,7 +403,7 @@ private class EmojiPicker(
override fun onCreateViewHolder(viewGroup: ViewGroup, viewType: Int) = override fun onCreateViewHolder(viewGroup: ViewGroup, viewType: Int) =
when (viewType) { when (viewType) {
VT_CATEGORY -> VhCategory(viewGroup) VT_CATEGORY -> VhCategory()
VT_CUSTOM_EMOJI -> VhCustomEmoji() VT_CUSTOM_EMOJI -> VhCustomEmoji()
VT_TWEMOJI -> VhTwemoji() VT_TWEMOJI -> VhTwemoji()
VT_COMPAT_EMOJI -> VhAppCompatEmoji() VT_COMPAT_EMOJI -> VhAppCompatEmoji()