From fe4d004083d19a32d212083cbe4fb8f09715e3b1 Mon Sep 17 00:00:00 2001 From: FooIbar <118464521+FooIbar@users.noreply.github.com> Date: Sat, 6 Jan 2024 20:17:13 +0800 Subject: [PATCH] Fix request news --- app/src/main/kotlin/com/hippo/ehviewer/Settings.kt | 3 +-- .../com/hippo/ehviewer/dailycheck/DailyCheckWork.kt | 10 ++-------- .../kotlin/com/hippo/ehviewer/ui/settings/EhScreen.kt | 11 ++++------- 3 files changed, 7 insertions(+), 17 deletions(-) diff --git a/app/src/main/kotlin/com/hippo/ehviewer/Settings.kt b/app/src/main/kotlin/com/hippo/ehviewer/Settings.kt index 1ed8ec4e6..b9b16a6a2 100644 --- a/app/src/main/kotlin/com/hippo/ehviewer/Settings.kt +++ b/app/src/main/kotlin/com/hippo/ehviewer/Settings.kt @@ -154,8 +154,7 @@ object Settings : DataStorePreferences(null) { var securityDelay by intPref("require_unlock_delay", 0) var clipboardTextHashCode by intPref("clipboard_text_hash_code", 0) var searchCategory by intPref("search_pref", EhUtils.ALL_CATEGORY) - var requestNewsTimerHour by intPref("request_news_timer_hour", -1) - var requestNewsTimerMinute by intPref("request_news_timer_minute", -1) + var requestNewsTime by intPref("request_news_time", 0).observed { updateWhenRequestNewsChanges() } var updateIntervalDays by intPref("update_interval_days", 7) var recentToplist by stringPref("recent_toplist", "11") var userAgent by stringPref("user_agent", CHROME_USER_AGENT) diff --git a/app/src/main/kotlin/com/hippo/ehviewer/dailycheck/DailyCheckWork.kt b/app/src/main/kotlin/com/hippo/ehviewer/dailycheck/DailyCheckWork.kt index eb4a95478..376103d06 100644 --- a/app/src/main/kotlin/com/hippo/ehviewer/dailycheck/DailyCheckWork.kt +++ b/app/src/main/kotlin/com/hippo/ehviewer/dailycheck/DailyCheckWork.kt @@ -48,18 +48,12 @@ class DailyCheckWork(context: Context, workerParams: WorkerParameters) : } } -val schedHour - get() = Settings.requestNewsTimerHour.takeUnless { it == -1 } ?: 0 - -val schedMinute - get() = Settings.requestNewsTimerMinute.takeUnless { it == -1 } ?: 0 - private fun getDailyCheckWorkRequest(): PeriodicWorkRequest { val now = Clock.System.now() val timeZone = TimeZone.currentSystemDefault() val whenToWork = LocalDateTime( now.toLocalDateTime(timeZone).date, - LocalTime(schedHour, schedMinute), + LocalTime.fromSecondOfDay(Settings.requestNewsTime), ).toInstant(timeZone) val initialDelay = (whenToWork - now).run { if (isNegative()) plus(1.days) else this } val constraints = Constraints.Builder() @@ -77,7 +71,7 @@ fun updateDailyCheckWork(context: Context) { if (Settings.requestNews) { WorkManager.getInstance(context).enqueueUniquePeriodicWork( WORK_NAME, - ExistingPeriodicWorkPolicy.UPDATE, + ExistingPeriodicWorkPolicy.CANCEL_AND_REENQUEUE, getDailyCheckWorkRequest(), ) } else { diff --git a/app/src/main/kotlin/com/hippo/ehviewer/ui/settings/EhScreen.kt b/app/src/main/kotlin/com/hippo/ehviewer/ui/settings/EhScreen.kt index f43ae7372..d27e1dad0 100644 --- a/app/src/main/kotlin/com/hippo/ehviewer/ui/settings/EhScreen.kt +++ b/app/src/main/kotlin/com/hippo/ehviewer/ui/settings/EhScreen.kt @@ -39,9 +39,6 @@ import com.hippo.ehviewer.client.EhTagDatabase import com.hippo.ehviewer.client.EhUrl import com.hippo.ehviewer.client.EhUtils import com.hippo.ehviewer.client.parser.HomeParser -import com.hippo.ehviewer.dailycheck.schedHour -import com.hippo.ehviewer.dailycheck.schedMinute -import com.hippo.ehviewer.dailycheck.updateDailyCheckWork import com.hippo.ehviewer.ui.destinations.FilterScreenDestination import com.hippo.ehviewer.ui.destinations.MyTagsScreenDestination import com.hippo.ehviewer.ui.destinations.SignInScreenDestination @@ -59,6 +56,7 @@ import io.ktor.http.Url import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.async import kotlinx.coroutines.launch +import kotlinx.datetime.LocalTime import moe.tarsin.coroutines.runSuspendCatching @Destination @@ -325,10 +323,9 @@ fun EhScreen(navigator: DestinationsNavigator) { val pickerTitle = stringResource(id = R.string.settings_eh_request_news_timepicker) Preference(title = pickerTitle) { coroutineScope.launch { - val (hour, minute) = dialogState.showTimePicker(pickerTitle, schedHour, schedMinute) - Settings.requestNewsTimerHour = hour - Settings.requestNewsTimerMinute = minute - updateDailyCheckWork(context) + val time = LocalTime.fromSecondOfDay(Settings.requestNewsTime) + val (hour, minute) = dialogState.showTimePicker(pickerTitle, time.hour, time.minute) + Settings.requestNewsTime = LocalTime(hour, minute).toSecondOfDay() } } }