package tachiyomi.presentation.widget import android.content.Context import androidx.glance.appwidget.updateAll import androidx.lifecycle.LifecycleCoroutineScope import eu.kanade.tachiyomi.core.security.SecurityPreferences import kotlinx.coroutines.flow.combine import kotlinx.coroutines.flow.distinctUntilChanged import kotlinx.coroutines.flow.launchIn import kotlinx.coroutines.flow.onEach import logcat.LogPriority import tachiyomi.core.common.util.system.logcat import tachiyomi.domain.updates.interactor.GetUpdates class WidgetManager( private val getUpdates: GetUpdates, private val securityPreferences: SecurityPreferences, ) { fun Context.init(scope: LifecycleCoroutineScope) { combine( getUpdates.subscribe(read = false, after = BaseUpdatesGridGlanceWidget.DateLimit.toEpochMilli()), securityPreferences.useAuthenticator().changes(), transform = { a, _ -> a }, ) .distinctUntilChanged() .onEach { try { UpdatesGridGlanceWidget().updateAll(this) UpdatesGridCoverScreenGlanceWidget().updateAll(this) } catch (e: Exception) { logcat(LogPriority.ERROR, e) { "Failed to update widget" } } } .launchIn(scope) } }