diff --git a/app/src/main/java/jp/juggler/subwaytooter/ActMain.kt b/app/src/main/java/jp/juggler/subwaytooter/ActMain.kt index 2f3adbe3..431b7455 100644 --- a/app/src/main/java/jp/juggler/subwaytooter/ActMain.kt +++ b/app/src/main/java/jp/juggler/subwaytooter/ActMain.kt @@ -158,6 +158,8 @@ class ActMain : AppCompatActivity(), lateinit var sideMenuAdapter: SideMenuAdapter + var subscriptionUpdaterCalled = false + ////////////////////////////////////////////////////////////////// // 読み取り専用のプロパティ diff --git a/app/src/main/java/jp/juggler/subwaytooter/actmain/ActMainActions.kt b/app/src/main/java/jp/juggler/subwaytooter/actmain/ActMainActions.kt index 463ded45..71a85702 100644 --- a/app/src/main/java/jp/juggler/subwaytooter/actmain/ActMainActions.kt +++ b/app/src/main/java/jp/juggler/subwaytooter/actmain/ActMainActions.kt @@ -253,7 +253,12 @@ fun ActMain.launchDialogs() { if (!prNotification.checkOrLaunch()) return@launchAndShowError } - afterNotificationGranted() + // 画面を作成したあと一度だけ行う + // 画像ビューアから戻ってきたときなどは行わない + if(!subscriptionUpdaterCalled){ + subscriptionUpdaterCalled=true + afterNotificationGranted() + } } } diff --git a/app/src/main/java/jp/juggler/subwaytooter/notification/PollingChecker.kt b/app/src/main/java/jp/juggler/subwaytooter/notification/PollingChecker.kt index 4747984d..4e3b9c1f 100644 --- a/app/src/main/java/jp/juggler/subwaytooter/notification/PollingChecker.kt +++ b/app/src/main/java/jp/juggler/subwaytooter/notification/PollingChecker.kt @@ -183,7 +183,7 @@ class PollingChecker( account.acct, null ) - log.i("notification check not required.") + log.i("[${account.acct}]pull check not required.") return@withLock } diff --git a/app/src/main/java/jp/juggler/subwaytooter/notification/PollingUtils.kt b/app/src/main/java/jp/juggler/subwaytooter/notification/PollingUtils.kt index 18b88688..ae68f38e 100644 --- a/app/src/main/java/jp/juggler/subwaytooter/notification/PollingUtils.kt +++ b/app/src/main/java/jp/juggler/subwaytooter/notification/PollingUtils.kt @@ -57,7 +57,7 @@ fun AppCompatActivity.resetNotificationTracking(account: SavedAccount) { return } launchAndShowError { - withContext(AppDispatchers.IO){ + withContext(AppDispatchers.IO) { daoNotificationShown.cleayByAcct(account.acct) PollingChecker.accountMutex(account.db_id).withLock { daoNotificationTracking.resetTrackingState(account.db_id) @@ -204,7 +204,7 @@ suspend fun checkNoticifationAll( // 進捗表示 // 複数アカウントの状態をマップにまとめる suspend fun updateStatus(a: SavedAccount, s: PollingState) { - log.i("$logPrefix[${a.acct.pretty}]${s.desc}") + if (s != PollingState.Complete) log.i("$logPrefix[${a.acct.pretty}]${s.desc}") when (s) { PollingState.CheckNotifications, -> nextPollingRequired = true @@ -235,6 +235,15 @@ suspend fun checkNoticifationAll( daoSavedAccount.loadRealAccounts().mapNotNull { sa -> when { sa.isPseudo || !sa.isConfirmed -> null + !sa.isRequiredPullCheck() -> { + // 通知チェックの定期実行が不要なら + // 通知表示のエラーをクリアする + daoAccountNotificationStatus.updateNotificationError( + sa.acct, + null + ) + null + } else -> EmptyScope.launch(AppDispatchers.DEFAULT) { try { PollingChecker( diff --git a/app/src/main/java/jp/juggler/subwaytooter/push/PushMastodon.kt b/app/src/main/java/jp/juggler/subwaytooter/push/PushMastodon.kt index b03c5500..6325389c 100644 --- a/app/src/main/java/jp/juggler/subwaytooter/push/PushMastodon.kt +++ b/app/src/main/java/jp/juggler/subwaytooter/push/PushMastodon.kt @@ -73,8 +73,6 @@ class PushMastodon( throw ex } } - log.i("${account.acct} oldSubscription=${oldSubscription}") - val oldEndpointUrl = oldSubscription?.string("endpoint") when (oldEndpointUrl) { // 購読がない。作ってもよい @@ -94,7 +92,6 @@ class PushMastodon( } if (params["dh"] != deviceHash && !isOldSubscription(account, oldEndpointUrl)) { // この端末で作成した購読ではない。 - // TODO: 古い形式のURLを移行できないか? log.w("deviceHash not match. keep it for other devices. ${account.acct} $oldEndpointUrl") return context.getString( R.string.push_subscription_exists_but_not_created_by_this_device @@ -145,6 +142,8 @@ class PushMastodon( return null } + log.i("${account.acct} oldSubscription=${oldSubscription}") + if (newUrl == oldEndpointUrl) { subLog.i(R.string.push_subscription_exists_updateing) api.updatePushSubscriptionData( diff --git a/app/src/main/java/jp/juggler/subwaytooter/push/PushRepo.kt b/app/src/main/java/jp/juggler/subwaytooter/push/PushRepo.kt index 7f05b92f..63dfdd1a 100644 --- a/app/src/main/java/jp/juggler/subwaytooter/push/PushRepo.kt +++ b/app/src/main/java/jp/juggler/subwaytooter/push/PushRepo.kt @@ -268,6 +268,7 @@ class PushRepo( val now = System.currentTimeMillis() if (now - lastUpdated < TimeUnit.DAYS.toMillis(3)) { log.i("lazeMode: skip re-registration.") + return } } diff --git a/app/src/main/java/jp/juggler/subwaytooter/table/AccountNotificationStatus.kt b/app/src/main/java/jp/juggler/subwaytooter/table/AccountNotificationStatus.kt index 63c87cdb..3d087e70 100644 --- a/app/src/main/java/jp/juggler/subwaytooter/table/AccountNotificationStatus.kt +++ b/app/src/main/java/jp/juggler/subwaytooter/table/AccountNotificationStatus.kt @@ -50,17 +50,17 @@ class AccountNotificationStatus( private const val COL_LAST_SUBSCRIPTION_ERROR = "last_subscription_error" val columnList = MetaColumns(table = TABLE, initialVersion = 65).apply { - column( 0, COL_ID, MetaColumns.TS_INT_PRIMARY_KEY_NOT_NULL) - column( 0, COL_ACCT, MetaColumns.TS_EMPTY_NOT_NULL) - column( 0, COL_ACCT_HASH, MetaColumns.TS_EMPTY_NOT_NULL) - column( 0, COL_APP_SERVER_HASH, MetaColumns.TS_TEXT_NULL) - column( 0, COL_PUSH_KEY_PRIVATE, MetaColumns.TS_BLOB_NULL) - column( 0, COL_PUSH_KEY_PUBLIC, MetaColumns.TS_BLOB_NULL) - column( 0, COL_PUSH_AUTH_SECRET, MetaColumns.TS_BLOB_NULL) - column( 0, COL_PUSH_SERVER_KEY, MetaColumns.TS_BLOB_NULL) - column( 0, COL_LAST_PUSH_ENDPOINT, MetaColumns.TS_TEXT_NULL) - column( 0, COL_LAST_NOTIFICATION_ERROR, MetaColumns.TS_TEXT_NULL) - column( 0, COL_LAST_SUBSCRIPTION_ERROR, MetaColumns.TS_TEXT_NULL) + column(0, COL_ID, MetaColumns.TS_INT_PRIMARY_KEY_NOT_NULL) + column(0, COL_ACCT, MetaColumns.TS_EMPTY_NOT_NULL) + column(0, COL_ACCT_HASH, MetaColumns.TS_EMPTY_NOT_NULL) + column(0, COL_APP_SERVER_HASH, MetaColumns.TS_TEXT_NULL) + column(0, COL_PUSH_KEY_PRIVATE, MetaColumns.TS_BLOB_NULL) + column(0, COL_PUSH_KEY_PUBLIC, MetaColumns.TS_BLOB_NULL) + column(0, COL_PUSH_AUTH_SECRET, MetaColumns.TS_BLOB_NULL) + column(0, COL_PUSH_SERVER_KEY, MetaColumns.TS_BLOB_NULL) + column(0, COL_LAST_PUSH_ENDPOINT, MetaColumns.TS_TEXT_NULL) + column(0, COL_LAST_NOTIFICATION_ERROR, MetaColumns.TS_TEXT_NULL) + column(0, COL_LAST_SUBSCRIPTION_ERROR, MetaColumns.TS_TEXT_NULL) createExtra = { arrayOf( @@ -240,17 +240,20 @@ class AccountNotificationStatus( put(COL_APP_SERVER_HASH, appServerHash) }.updateTo(db, TABLE, id.toString()) - - private fun updateSingleString(acct:Acct, col: String, value: String?) { - ContentValues().apply{ - put(col, value) - }.updateTo(db, TABLE,acct.ascii, COL_ACCT) + private fun updateSingleString(acct: Acct, col: String, value: String?) { + db.update( + TABLE, + ContentValues().apply { put(col, value) }, + "$COL_ACCT=? and $col!=?", + arrayOf(acct.ascii, value) + ) } - fun updateNotificationError(acct:Acct, text: String?) { + + fun updateNotificationError(acct: Acct, text: String?) { updateSingleString(acct, COL_LAST_NOTIFICATION_ERROR, text) } - fun updateSubscriptionError(acct:Acct, text: String?) { + fun updateSubscriptionError(acct: Acct, text: String?) { updateSingleString(acct, COL_LAST_SUBSCRIPTION_ERROR, text) } }