mirror of
				https://github.com/mihonapp/mihon.git
				synced 2025-11-04 08:08:55 +01:00 
			
		
		
		
	Remove background extensions updates check
Same reasoning as removing app update check. It gets kicked off in the foreground now too.
This commit is contained in:
		@@ -16,8 +16,6 @@ class BasePreferences(
 | 
			
		||||
 | 
			
		||||
    fun incognitoMode() = preferenceStore.getBoolean("incognito_mode", false)
 | 
			
		||||
 | 
			
		||||
    fun automaticExtUpdates() = preferenceStore.getBoolean("automatic_ext_updates", true)
 | 
			
		||||
 | 
			
		||||
    fun extensionInstaller() = ExtensionInstallerPreference(context, preferenceStore)
 | 
			
		||||
 | 
			
		||||
    fun acraEnabled() = preferenceStore.getBoolean("acra.enable", isPreviewBuildType || isReleaseBuildType)
 | 
			
		||||
 
 | 
			
		||||
@@ -7,11 +7,9 @@ import androidx.compose.runtime.remember
 | 
			
		||||
import androidx.compose.ui.platform.LocalContext
 | 
			
		||||
import androidx.compose.ui.res.stringResource
 | 
			
		||||
import androidx.fragment.app.FragmentActivity
 | 
			
		||||
import eu.kanade.domain.base.BasePreferences
 | 
			
		||||
import eu.kanade.domain.source.service.SourcePreferences
 | 
			
		||||
import eu.kanade.presentation.more.settings.Preference
 | 
			
		||||
import eu.kanade.tachiyomi.R
 | 
			
		||||
import eu.kanade.tachiyomi.extension.ExtensionUpdateJob
 | 
			
		||||
import eu.kanade.tachiyomi.util.system.AuthenticatorUtil.authenticate
 | 
			
		||||
import uy.kohesive.injekt.Injekt
 | 
			
		||||
import uy.kohesive.injekt.api.get
 | 
			
		||||
@@ -27,21 +25,7 @@ object SettingsBrowseScreen : SearchableSettings {
 | 
			
		||||
    override fun getPreferences(): List<Preference> {
 | 
			
		||||
        val context = LocalContext.current
 | 
			
		||||
        val sourcePreferences = remember { Injekt.get<SourcePreferences>() }
 | 
			
		||||
        val preferences = remember { Injekt.get<BasePreferences>() }
 | 
			
		||||
        return listOf(
 | 
			
		||||
            Preference.PreferenceGroup(
 | 
			
		||||
                title = stringResource(R.string.label_extensions),
 | 
			
		||||
                preferenceItems = listOf(
 | 
			
		||||
                    Preference.PreferenceItem.SwitchPreference(
 | 
			
		||||
                        pref = preferences.automaticExtUpdates(),
 | 
			
		||||
                        title = stringResource(R.string.pref_enable_automatic_extension_updates),
 | 
			
		||||
                        onValueChanged = {
 | 
			
		||||
                            ExtensionUpdateJob.setupTask(context, it)
 | 
			
		||||
                            true
 | 
			
		||||
                        },
 | 
			
		||||
                    ),
 | 
			
		||||
                ),
 | 
			
		||||
            ),
 | 
			
		||||
            Preference.PreferenceGroup(
 | 
			
		||||
                title = stringResource(R.string.label_sources),
 | 
			
		||||
                preferenceItems = listOf(
 | 
			
		||||
 
 | 
			
		||||
@@ -15,7 +15,6 @@ import eu.kanade.tachiyomi.data.library.LibraryUpdateJob
 | 
			
		||||
import eu.kanade.tachiyomi.data.preference.MANGA_NON_COMPLETED
 | 
			
		||||
import eu.kanade.tachiyomi.data.preference.PreferenceValues
 | 
			
		||||
import eu.kanade.tachiyomi.data.track.TrackManager
 | 
			
		||||
import eu.kanade.tachiyomi.extension.ExtensionUpdateJob
 | 
			
		||||
import eu.kanade.tachiyomi.network.NetworkPreferences
 | 
			
		||||
import eu.kanade.tachiyomi.network.PREF_DOH_CLOUDFLARE
 | 
			
		||||
import eu.kanade.tachiyomi.ui.reader.setting.OrientationType
 | 
			
		||||
@@ -55,7 +54,6 @@ object Migrations {
 | 
			
		||||
            lastVersionCode.set(BuildConfig.VERSION_CODE)
 | 
			
		||||
 | 
			
		||||
            // Always set up background tasks to ensure they're running
 | 
			
		||||
            ExtensionUpdateJob.setupTask(context)
 | 
			
		||||
            LibraryUpdateJob.setupTask(context)
 | 
			
		||||
            BackupCreatorJob.setupTask(context)
 | 
			
		||||
 | 
			
		||||
@@ -100,9 +98,6 @@ object Migrations {
 | 
			
		||||
                // Restore jobs after migrating from Evernote's job scheduler to WorkManager.
 | 
			
		||||
                LibraryUpdateJob.setupTask(context)
 | 
			
		||||
                BackupCreatorJob.setupTask(context)
 | 
			
		||||
 | 
			
		||||
                // New extension update check job
 | 
			
		||||
                ExtensionUpdateJob.setupTask(context)
 | 
			
		||||
            }
 | 
			
		||||
            if (oldVersion < 44) {
 | 
			
		||||
                // Reset sorting preference if using removed sort by source
 | 
			
		||||
@@ -333,7 +328,12 @@ object Migrations {
 | 
			
		||||
                LibraryUpdateJob.setupTask(context)
 | 
			
		||||
            }
 | 
			
		||||
            if (oldVersion < 97) {
 | 
			
		||||
                // Removed background jobs
 | 
			
		||||
                WorkManager.getInstance(context).cancelAllWorkByTag("UpdateChecker")
 | 
			
		||||
                WorkManager.getInstance(context).cancelAllWorkByTag("ExtensionUpdate")
 | 
			
		||||
                prefs.edit {
 | 
			
		||||
                    remove("automatic_ext_updates")
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            return true
 | 
			
		||||
        }
 | 
			
		||||
 
 | 
			
		||||
@@ -1,94 +0,0 @@
 | 
			
		||||
package eu.kanade.tachiyomi.extension
 | 
			
		||||
 | 
			
		||||
import android.content.Context
 | 
			
		||||
import androidx.core.app.NotificationCompat
 | 
			
		||||
import androidx.core.app.NotificationManagerCompat
 | 
			
		||||
import androidx.work.Constraints
 | 
			
		||||
import androidx.work.CoroutineWorker
 | 
			
		||||
import androidx.work.ExistingPeriodicWorkPolicy
 | 
			
		||||
import androidx.work.NetworkType
 | 
			
		||||
import androidx.work.PeriodicWorkRequestBuilder
 | 
			
		||||
import androidx.work.WorkManager
 | 
			
		||||
import androidx.work.WorkerParameters
 | 
			
		||||
import eu.kanade.domain.base.BasePreferences
 | 
			
		||||
import eu.kanade.tachiyomi.R
 | 
			
		||||
import eu.kanade.tachiyomi.data.notification.NotificationReceiver
 | 
			
		||||
import eu.kanade.tachiyomi.data.notification.Notifications
 | 
			
		||||
import eu.kanade.tachiyomi.extension.api.ExtensionGithubApi
 | 
			
		||||
import eu.kanade.tachiyomi.util.system.notification
 | 
			
		||||
import kotlinx.coroutines.coroutineScope
 | 
			
		||||
import logcat.LogPriority
 | 
			
		||||
import tachiyomi.core.util.system.logcat
 | 
			
		||||
import uy.kohesive.injekt.Injekt
 | 
			
		||||
import uy.kohesive.injekt.api.get
 | 
			
		||||
import java.util.concurrent.TimeUnit
 | 
			
		||||
 | 
			
		||||
class ExtensionUpdateJob(private val context: Context, workerParams: WorkerParameters) :
 | 
			
		||||
    CoroutineWorker(context, workerParams) {
 | 
			
		||||
 | 
			
		||||
    override suspend fun doWork(): Result = coroutineScope {
 | 
			
		||||
        val pendingUpdates = try {
 | 
			
		||||
            ExtensionGithubApi().checkForUpdates(context)
 | 
			
		||||
        } catch (e: Exception) {
 | 
			
		||||
            logcat(LogPriority.ERROR, e)
 | 
			
		||||
            return@coroutineScope Result.failure()
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        if (!pendingUpdates.isNullOrEmpty()) {
 | 
			
		||||
            createUpdateNotification(pendingUpdates.map { it.name })
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        Result.success()
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private fun createUpdateNotification(names: List<String>) {
 | 
			
		||||
        NotificationManagerCompat.from(context).apply {
 | 
			
		||||
            notify(
 | 
			
		||||
                Notifications.ID_UPDATES_TO_EXTS,
 | 
			
		||||
                context.notification(Notifications.CHANNEL_EXTENSIONS_UPDATE) {
 | 
			
		||||
                    setContentTitle(
 | 
			
		||||
                        context.resources.getQuantityString(
 | 
			
		||||
                            R.plurals.update_check_notification_ext_updates,
 | 
			
		||||
                            names.size,
 | 
			
		||||
                            names.size,
 | 
			
		||||
                        ),
 | 
			
		||||
                    )
 | 
			
		||||
                    val extNames = names.joinToString(", ")
 | 
			
		||||
                    setContentText(extNames)
 | 
			
		||||
                    setStyle(NotificationCompat.BigTextStyle().bigText(extNames))
 | 
			
		||||
                    setSmallIcon(R.drawable.ic_extension_24dp)
 | 
			
		||||
                    setContentIntent(NotificationReceiver.openExtensionsPendingActivity(context))
 | 
			
		||||
                    setAutoCancel(true)
 | 
			
		||||
                },
 | 
			
		||||
            )
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    companion object {
 | 
			
		||||
        private const val TAG = "ExtensionUpdate"
 | 
			
		||||
 | 
			
		||||
        fun setupTask(context: Context, forceAutoUpdateJob: Boolean? = null) {
 | 
			
		||||
            val preferences = Injekt.get<BasePreferences>()
 | 
			
		||||
            val autoUpdateJob = forceAutoUpdateJob ?: preferences.automaticExtUpdates().get()
 | 
			
		||||
            if (autoUpdateJob) {
 | 
			
		||||
                val constraints = Constraints(
 | 
			
		||||
                    requiredNetworkType = NetworkType.CONNECTED,
 | 
			
		||||
                )
 | 
			
		||||
 | 
			
		||||
                val request = PeriodicWorkRequestBuilder<ExtensionUpdateJob>(
 | 
			
		||||
                    2,
 | 
			
		||||
                    TimeUnit.DAYS,
 | 
			
		||||
                    3,
 | 
			
		||||
                    TimeUnit.HOURS,
 | 
			
		||||
                )
 | 
			
		||||
                    .addTag(TAG)
 | 
			
		||||
                    .setConstraints(constraints)
 | 
			
		||||
                    .build()
 | 
			
		||||
 | 
			
		||||
                WorkManager.getInstance(context).enqueueUniquePeriodicWork(TAG, ExistingPeriodicWorkPolicy.UPDATE, request)
 | 
			
		||||
            } else {
 | 
			
		||||
                WorkManager.getInstance(context).cancelAllWorkByTag(TAG)
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@@ -18,7 +18,7 @@ import tachiyomi.core.util.lang.withIOContext
 | 
			
		||||
import tachiyomi.core.util.system.logcat
 | 
			
		||||
import uy.kohesive.injekt.injectLazy
 | 
			
		||||
import java.util.Date
 | 
			
		||||
import java.util.concurrent.TimeUnit
 | 
			
		||||
import kotlin.time.Duration.Companion.days
 | 
			
		||||
 | 
			
		||||
internal class ExtensionGithubApi {
 | 
			
		||||
 | 
			
		||||
@@ -69,7 +69,7 @@ internal class ExtensionGithubApi {
 | 
			
		||||
 | 
			
		||||
    suspend fun checkForUpdates(context: Context, fromAvailableExtensionList: Boolean = false): List<Extension.Installed>? {
 | 
			
		||||
        // Limit checks to once a day at most
 | 
			
		||||
        if (fromAvailableExtensionList.not() && Date().time < lastExtCheck.get() + TimeUnit.DAYS.toMillis(1)) {
 | 
			
		||||
        if (!fromAvailableExtensionList && Date().time < lastExtCheck.get() + 1.days.inWholeMilliseconds) {
 | 
			
		||||
            return null
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
@@ -95,6 +95,10 @@ internal class ExtensionGithubApi {
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        if (extensionsWithUpdate.isNotEmpty()) {
 | 
			
		||||
            ExtensionUpdateNotifier(context).promptUpdates(extensionsWithUpdate.map { it.name })
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        return extensionsWithUpdate
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -0,0 +1,42 @@
 | 
			
		||||
package eu.kanade.tachiyomi.extension.api
 | 
			
		||||
 | 
			
		||||
import android.Manifest
 | 
			
		||||
import android.content.Context
 | 
			
		||||
import android.content.pm.PackageManager
 | 
			
		||||
import androidx.core.app.ActivityCompat
 | 
			
		||||
import androidx.core.app.NotificationCompat
 | 
			
		||||
import androidx.core.app.NotificationManagerCompat
 | 
			
		||||
import eu.kanade.tachiyomi.R
 | 
			
		||||
import eu.kanade.tachiyomi.data.notification.NotificationReceiver
 | 
			
		||||
import eu.kanade.tachiyomi.data.notification.Notifications
 | 
			
		||||
import eu.kanade.tachiyomi.util.system.notification
 | 
			
		||||
 | 
			
		||||
class ExtensionUpdateNotifier(private val context: Context) {
 | 
			
		||||
 | 
			
		||||
    fun promptUpdates(names: List<String>) {
 | 
			
		||||
        if (ActivityCompat.checkSelfPermission(context, Manifest.permission.POST_NOTIFICATIONS) != PackageManager.PERMISSION_GRANTED) {
 | 
			
		||||
            return
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        NotificationManagerCompat.from(context).apply {
 | 
			
		||||
            notify(
 | 
			
		||||
                Notifications.ID_UPDATES_TO_EXTS,
 | 
			
		||||
                context.notification(Notifications.CHANNEL_EXTENSIONS_UPDATE) {
 | 
			
		||||
                    setContentTitle(
 | 
			
		||||
                        context.resources.getQuantityString(
 | 
			
		||||
                            R.plurals.update_check_notification_ext_updates,
 | 
			
		||||
                            names.size,
 | 
			
		||||
                            names.size,
 | 
			
		||||
                        ),
 | 
			
		||||
                    )
 | 
			
		||||
                    val extNames = names.joinToString(", ")
 | 
			
		||||
                    setContentText(extNames)
 | 
			
		||||
                    setStyle(NotificationCompat.BigTextStyle().bigText(extNames))
 | 
			
		||||
                    setSmallIcon(R.drawable.ic_extension_24dp)
 | 
			
		||||
                    setContentIntent(NotificationReceiver.openExtensionsPendingActivity(context))
 | 
			
		||||
                    setAutoCancel(true)
 | 
			
		||||
                },
 | 
			
		||||
            )
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@@ -71,6 +71,7 @@ import eu.kanade.tachiyomi.data.notification.NotificationReceiver
 | 
			
		||||
import eu.kanade.tachiyomi.data.updater.AppUpdateChecker
 | 
			
		||||
import eu.kanade.tachiyomi.data.updater.AppUpdateResult
 | 
			
		||||
import eu.kanade.tachiyomi.data.updater.RELEASE_URL
 | 
			
		||||
import eu.kanade.tachiyomi.extension.api.ExtensionGithubApi
 | 
			
		||||
import eu.kanade.tachiyomi.ui.base.activity.BaseActivity
 | 
			
		||||
import eu.kanade.tachiyomi.ui.browse.source.browse.BrowseSourceScreen
 | 
			
		||||
import eu.kanade.tachiyomi.ui.browse.source.globalsearch.GlobalSearchScreen
 | 
			
		||||
@@ -256,7 +257,7 @@ class MainActivity : BaseActivity() {
 | 
			
		||||
                        .launchIn(this)
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                CheckForUpdate()
 | 
			
		||||
                CheckForUpdates()
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            var showChangelog by remember { mutableStateOf(didMigration && !BuildConfig.DEBUG) }
 | 
			
		||||
@@ -320,11 +321,12 @@ class MainActivity : BaseActivity() {
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Composable
 | 
			
		||||
    private fun CheckForUpdate() {
 | 
			
		||||
    private fun CheckForUpdates() {
 | 
			
		||||
        val context = LocalContext.current
 | 
			
		||||
        val navigator = LocalNavigator.currentOrThrow
 | 
			
		||||
 | 
			
		||||
        // App updates
 | 
			
		||||
        LaunchedEffect(Unit) {
 | 
			
		||||
            // App updates
 | 
			
		||||
            if (BuildConfig.INCLUDE_UPDATER) {
 | 
			
		||||
                try {
 | 
			
		||||
                    val result = AppUpdateChecker().checkForUpdate(context)
 | 
			
		||||
@@ -342,6 +344,15 @@ class MainActivity : BaseActivity() {
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        // Extensions updates
 | 
			
		||||
        LaunchedEffect(Unit) {
 | 
			
		||||
            try {
 | 
			
		||||
                ExtensionGithubApi().checkForUpdates(context)
 | 
			
		||||
            } catch (e: Exception) {
 | 
			
		||||
                logcat(LogPriority.ERROR, e)
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user