SubwayTooter-Android-App/app/src/main/java/jp/juggler/subwaytooter/actmain/ActMainAccount.kt

71 lines
2.6 KiB
Kotlin

package jp.juggler.subwaytooter.actmain
import jp.juggler.subwaytooter.ActMain
import jp.juggler.subwaytooter.column.fireShowColumnHeader
import jp.juggler.subwaytooter.pref.PrefL
import jp.juggler.subwaytooter.table.SavedAccount
import jp.juggler.subwaytooter.table.daoSavedAccount
// デフォルトの投稿先アカウントを探す。アカウント選択が必要な状況ならnull
val ActMain.currentPostTarget: SavedAccount?
get() {
val dbId = PrefL.lpDefaultPostAccount.value
if (dbId != -1L) {
val a = daoSavedAccount.loadAccount(dbId)
if (a != null && !a.isPseudo) return a
}
phoneTab(
{ env ->
val c = env.pagerAdapter.getColumn(env.pager.currentItem)
return when {
c == null || c.accessInfo.isPseudo -> null
else -> c.accessInfo
}
},
{ env ->
val accounts = ArrayList<SavedAccount>()
for (c in env.visibleColumns) {
try {
val a = c.accessInfo
// 画面内に疑似アカウントがあれば常にアカウント選択が必要
if (a.isPseudo) {
accounts.clear()
break
}
// 既出でなければ追加する
if (accounts.none { it == a }) accounts.add(a)
} catch (ignored: Throwable) {
}
}
return when (accounts.size) {
// 候補が1つだけならアカウント選択は不要
1 -> accounts.first()
// 候補が2つ以上ならアカウント選択は必要
else -> null
}
})
}
fun ActMain.reloadAccountSetting(
newAccounts: List<SavedAccount>,
) {
for (column in appState.columnList) {
val a = column.accessInfo
val b = newAccounts.find { it.acct == a.acct }
if (!a.isNA && b != null) daoSavedAccount.reloadSetting(a, b)
column.fireShowColumnHeader()
}
}
fun ActMain.reloadAccountSetting(account: SavedAccount) {
val newData = daoSavedAccount.loadAccount(account.db_id)
?: return
for (column in appState.columnList) {
val a = column.accessInfo
if (a.acct != newData.acct) continue
if (!a.isNA) daoSavedAccount.reloadSetting(a, newData)
column.fireShowColumnHeader()
}
}