From 2c6c00b24fc0921336b4f2cf2e49f6b23db61bbd Mon Sep 17 00:00:00 2001 From: Nishant Mishra Date: Sat, 12 Jul 2025 10:30:29 +0530 Subject: [PATCH] fix(internal): ensure continuous history on app startup --- app/src/main/java/org/nsh07/pomodoro/data/StatDao.kt | 3 +++ .../java/org/nsh07/pomodoro/data/StatRepository.kt | 8 ++++++++ .../ui/timerScreen/viewModel/TimerViewModel.kt | 11 +++++++++++ 3 files changed, 22 insertions(+) diff --git a/app/src/main/java/org/nsh07/pomodoro/data/StatDao.kt b/app/src/main/java/org/nsh07/pomodoro/data/StatDao.kt index a2610ea..cd448a5 100644 --- a/app/src/main/java/org/nsh07/pomodoro/data/StatDao.kt +++ b/app/src/main/java/org/nsh07/pomodoro/data/StatDao.kt @@ -44,4 +44,7 @@ interface StatDao { @Query("SELECT EXISTS (SELECT * FROM stat WHERE date = :date)") suspend fun statExists(date: String): Boolean + + @Query("SELECT date FROM stat ORDER BY date DESC LIMIT 1") + suspend fun getLastDate(): String? } \ No newline at end of file diff --git a/app/src/main/java/org/nsh07/pomodoro/data/StatRepository.kt b/app/src/main/java/org/nsh07/pomodoro/data/StatRepository.kt index 0453d3d..f9b41ce 100644 --- a/app/src/main/java/org/nsh07/pomodoro/data/StatRepository.kt +++ b/app/src/main/java/org/nsh07/pomodoro/data/StatRepository.kt @@ -20,6 +20,8 @@ import java.time.LocalTime * ViewModel */ interface StatRepository { + suspend fun insertStat(stat: Stat) + suspend fun addFocusTime(focusTime: Long) suspend fun addBreakTime(breakTime: Long) @@ -29,6 +31,8 @@ interface StatRepository { fun getLastWeekStatsSummary(): Flow> fun getAverageFocusTimes(): Flow + + suspend fun getLastDate(): String? } /** @@ -38,6 +42,8 @@ class AppStatRepository( private val statDao: StatDao, private val ioDispatcher: CoroutineDispatcher = Dispatchers.IO ) : StatRepository { + override suspend fun insertStat(stat: Stat) = statDao.insertStat(stat) + override suspend fun addFocusTime(focusTime: Long) = withContext(ioDispatcher) { val currentDate = LocalDate.now().toString() val currentTime = LocalTime.now().toSecondOfDay() @@ -99,4 +105,6 @@ class AppStatRepository( statDao.getLastWeekStatsSummary() override fun getAverageFocusTimes(): Flow = statDao.getAvgFocusTimes() + + override suspend fun getLastDate(): String? = statDao.getLastDate() } \ No newline at end of file diff --git a/app/src/main/java/org/nsh07/pomodoro/ui/timerScreen/viewModel/TimerViewModel.kt b/app/src/main/java/org/nsh07/pomodoro/ui/timerScreen/viewModel/TimerViewModel.kt index 03efc81..2cad2ed 100644 --- a/app/src/main/java/org/nsh07/pomodoro/ui/timerScreen/viewModel/TimerViewModel.kt +++ b/app/src/main/java/org/nsh07/pomodoro/ui/timerScreen/viewModel/TimerViewModel.kt @@ -25,9 +25,11 @@ import kotlinx.coroutines.flow.update import kotlinx.coroutines.launch import org.nsh07.pomodoro.TomatoApplication import org.nsh07.pomodoro.data.PreferenceRepository +import org.nsh07.pomodoro.data.Stat import org.nsh07.pomodoro.data.StatRepository import org.nsh07.pomodoro.data.TimerRepository import org.nsh07.pomodoro.utils.millisecondsToStr +import java.time.LocalDate @OptIn(FlowPreview::class) class TimerViewModel( @@ -83,6 +85,15 @@ class TimerViewModel( resetTimer() + var lastDate = LocalDate.parse(statRepository.getLastDate()) + val today = LocalDate.now() + + // Fills dates between today and lastDate with 0s to ensure continuous history + while (lastDate.until(today).days > 0) { + lastDate = lastDate.plusDays(1) + statRepository.insertStat(Stat(lastDate.toString(), 0, 0, 0, 0, 0)) + } + delay(1500) _timerState.update { currentState ->