Commit 5f56dc1
fix: タブ復帰時にダッシュボードの時刻・日付・ゴミ表示を即時更新 (#186)
* fix: タブ復帰時に時刻・日付・ゴミ表示を即時更新する
ブラウザが非アクティブタブの setTimeout を throttle(最低 1 分)・または
Page Lifecycle で freeze した状態から復帰しても、ポーリングループの
delay(10_000) が続行されるまでダッシュボードの時刻カードとゴミバッジが
古いまま残る問題を修正。
ポーリング本体を tick() に切り出し、TabResumedEvent の受信時にも
即時に tick() を走らせて表示を追い付かせる。
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
* refactor: tick() を refreshClockAndSchedules() に改名
tick だけでは何を更新するのか伝わりにくいため、onRefreshFeeding
と一貫性のある名前へ変更し、役割を示す KDoc を追加する。
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
* fix: タブ復帰時にポーリングジョブを再起動し給餌再取得の二重起動を回避
- pollingJob を保持し、タブ復帰時に cancel → 再 launch してブラウザの
throttle / freeze により事実上停止した delay サイクルを確実にリセット
- 日跨ぎ復帰時は refreshClockAndSchedules 内で onRefreshFeeding が呼ばれ、
直後のハンドラからも再呼び出しされて 2 回ローディングが走っていた問題を
trackedFeedingDate 比較で解消
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
* fix: 給餌再取得の二重起動を refetch 発火フラグで確実に回避
- refreshClockAndSchedules が onRefreshFeeding / silentRefreshFeeding を
内部で呼んだかを Boolean で返すように変更
- TabResumedEvent ハンドラは戻り値を見て、再取得未発火時のみ
onRefreshFeeding を呼ぶ構造に変更
(半時間跨ぎ復帰時の silentRefreshFeeding + onRefreshFeeding 二重起動を解消)
- ポーリング再起動時に cancelAndJoin で古いジョブを確実に停止してから launch
- startDateChangePolling の即時同期責務はハンドラ側に寄せ、delay から開始
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
* docs: startDateChangePolling の呼び出し契約を KDoc に明示
本関数は cancel を行わないため、再起動時は呼び出し側で
cancelAndJoin を完了してから呼ぶ必要がある旨を明記する。
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
* refactor: 時刻/ゴミと給餌を別関数に分割し二重起動抑止の戻り値を廃止
- refreshClockAndSchedules (Boolean 戻り値) を以下に分割:
- refreshTimeAndGarbage: 時刻カード・年月日・ゴミバッジ
- autoRefreshFeedingOnTick: 日跨ぎ・半時間跨ぎ検知による給餌自動再取得
- onRefreshFeeding に trackedFeedingDate / lastFeedingHalfHour の同期を内包し、
手動更新・タブ復帰後に autoRefreshFeedingOnTick が誤発火しないようにする
- autoRefreshFeedingOnTick は日跨ぎ検知時に半時間判定を return でスキップ、
日跨ぎ+半時間跨ぎ同時成立時の getFeedingLog 二重 fetch を構造的に解消
- タブ復帰ハンドラは戻り値判定を使わず refreshTimeAndGarbage + onRefreshFeeding
を順に呼ぶだけのシンプルな形に
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
* refactor: ポーリング再起動関数で cancelAndJoin を内包化し呼び出し契約を廃止
startDateChangePolling (fun) を restartDateChangePolling (suspend fun) に
変更し、内部で pollingJob?.cancelAndJoin() を実施。呼び出し側で cancel を
書き忘れるとジョブがリークする暗黙的契約を排除する。
init 側では viewModelScope.launch { restartDateChangePolling() } で呼ぶ。
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
---------
Co-authored-by: ptkNktq <ptkNktq@users.noreply.github.com>
Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>1 parent 7e7775a commit 5f56dc1
1 file changed
Lines changed: 80 additions & 42 deletions
Lines changed: 80 additions & 42 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
18 | 18 | | |
19 | 19 | | |
20 | 20 | | |
| 21 | + | |
| 22 | + | |
21 | 23 | | |
22 | 24 | | |
23 | 25 | | |
| |||
53 | 55 | | |
54 | 56 | | |
55 | 57 | | |
| 58 | + | |
56 | 59 | | |
57 | 60 | | |
58 | 61 | | |
| |||
76 | 79 | | |
77 | 80 | | |
78 | 81 | | |
79 | | - | |
80 | | - | |
| 82 | + | |
| 83 | + | |
| 84 | + | |
81 | 85 | | |
82 | | - | |
| 86 | + | |
| 87 | + | |
| 88 | + | |
| 89 | + | |
| 90 | + | |
83 | 91 | | |
84 | 92 | | |
85 | 93 | | |
86 | | - | |
87 | | - | |
88 | | - | |
89 | | - | |
90 | | - | |
91 | | - | |
92 | | - | |
93 | | - | |
94 | | - | |
95 | | - | |
96 | | - | |
97 | | - | |
98 | | - | |
99 | | - | |
100 | | - | |
101 | | - | |
102 | | - | |
103 | | - | |
104 | | - | |
105 | | - | |
106 | | - | |
107 | | - | |
108 | | - | |
109 | | - | |
110 | | - | |
111 | | - | |
112 | | - | |
113 | | - | |
114 | | - | |
115 | | - | |
116 | | - | |
117 | | - | |
118 | | - | |
119 | | - | |
120 | | - | |
121 | | - | |
122 | | - | |
123 | | - | |
124 | | - | |
| 94 | + | |
| 95 | + | |
| 96 | + | |
| 97 | + | |
| 98 | + | |
| 99 | + | |
| 100 | + | |
| 101 | + | |
| 102 | + | |
| 103 | + | |
| 104 | + | |
| 105 | + | |
| 106 | + | |
| 107 | + | |
125 | 108 | | |
126 | 109 | | |
| 110 | + | |
| 111 | + | |
| 112 | + | |
| 113 | + | |
| 114 | + | |
| 115 | + | |
| 116 | + | |
| 117 | + | |
| 118 | + | |
| 119 | + | |
| 120 | + | |
| 121 | + | |
| 122 | + | |
| 123 | + | |
| 124 | + | |
| 125 | + | |
| 126 | + | |
| 127 | + | |
| 128 | + | |
| 129 | + | |
| 130 | + | |
127 | 131 | | |
128 | 132 | | |
129 | 133 | | |
| 134 | + | |
| 135 | + | |
| 136 | + | |
| 137 | + | |
| 138 | + | |
| 139 | + | |
| 140 | + | |
| 141 | + | |
| 142 | + | |
| 143 | + | |
| 144 | + | |
| 145 | + | |
| 146 | + | |
| 147 | + | |
| 148 | + | |
| 149 | + | |
| 150 | + | |
| 151 | + | |
| 152 | + | |
| 153 | + | |
| 154 | + | |
| 155 | + | |
| 156 | + | |
| 157 | + | |
| 158 | + | |
| 159 | + | |
| 160 | + | |
| 161 | + | |
130 | 162 | | |
131 | 163 | | |
132 | 164 | | |
| |||
167 | 199 | | |
168 | 200 | | |
169 | 201 | | |
| 202 | + | |
| 203 | + | |
| 204 | + | |
| 205 | + | |
170 | 206 | | |
171 | 207 | | |
172 | 208 | | |
| 209 | + | |
| 210 | + | |
173 | 211 | | |
174 | 212 | | |
175 | 213 | | |
| |||
0 commit comments