Option to automatically clean read chapters

master
Koitharu 2 years ago
parent 8313d6966f
commit b8e48d8b8a

@ -424,6 +424,9 @@ class AppSettings @Inject constructor(@ApplicationContext context: Context) {
val isStatsEnabled: Boolean val isStatsEnabled: Boolean
get() = prefs.getBoolean(KEY_STATS_ENABLED, false) get() = prefs.getBoolean(KEY_STATS_ENABLED, false)
val isAutoLocalChaptersCleanupEnabled: Boolean
get() = prefs.getBoolean(KEY_CHAPTERS_CLEAR_AUTO, false)
fun isTipEnabled(tip: String): Boolean { fun isTipEnabled(tip: String): Boolean {
return prefs.getStringSet(KEY_TIPS_CLOSED, emptySet())?.contains(tip) != true return prefs.getStringSet(KEY_TIPS_CLOSED, emptySet())?.contains(tip) != true
} }
@ -508,6 +511,7 @@ class AppSettings @Inject constructor(@ApplicationContext context: Context) {
const val KEY_HTTP_CACHE_CLEAR = "http_cache_clear" const val KEY_HTTP_CACHE_CLEAR = "http_cache_clear"
const val KEY_COOKIES_CLEAR = "cookies_clear" const val KEY_COOKIES_CLEAR = "cookies_clear"
const val KEY_CHAPTERS_CLEAR = "chapters_clear" const val KEY_CHAPTERS_CLEAR = "chapters_clear"
const val KEY_CHAPTERS_CLEAR_AUTO = "chapters_clear_auto"
const val KEY_THUMBS_CACHE_CLEAR = "thumbs_cache_clear" const val KEY_THUMBS_CACHE_CLEAR = "thumbs_cache_clear"
const val KEY_SEARCH_HISTORY_CLEAR = "search_history_clear" const val KEY_SEARCH_HISTORY_CLEAR = "search_history_clear"
const val KEY_UPDATES_FEED_CLEAR = "updates_feed_clear" const val KEY_UPDATES_FEED_CLEAR = "updates_feed_clear"

@ -13,18 +13,25 @@ import androidx.work.await
import dagger.assisted.Assisted import dagger.assisted.Assisted
import dagger.assisted.AssistedInject import dagger.assisted.AssistedInject
import org.koitharu.kotatsu.core.parser.MangaDataRepository import org.koitharu.kotatsu.core.parser.MangaDataRepository
import org.koitharu.kotatsu.core.prefs.AppSettings
import org.koitharu.kotatsu.local.data.LocalMangaRepository import org.koitharu.kotatsu.local.data.LocalMangaRepository
import org.koitharu.kotatsu.local.domain.DeleteReadChaptersUseCase
import java.util.concurrent.TimeUnit import java.util.concurrent.TimeUnit
@HiltWorker @HiltWorker
class LocalStorageCleanupWorker @AssistedInject constructor( class LocalStorageCleanupWorker @AssistedInject constructor(
@Assisted appContext: Context, @Assisted appContext: Context,
@Assisted params: WorkerParameters, @Assisted params: WorkerParameters,
private val settings: AppSettings,
private val localMangaRepository: LocalMangaRepository, private val localMangaRepository: LocalMangaRepository,
private val dataRepository: MangaDataRepository, private val dataRepository: MangaDataRepository,
private val deleteReadChaptersUseCase: DeleteReadChaptersUseCase,
) : CoroutineWorker(appContext, params) { ) : CoroutineWorker(appContext, params) {
override suspend fun doWork(): Result { override suspend fun doWork(): Result {
if (settings.isAutoLocalChaptersCleanupEnabled) {
deleteReadChaptersUseCase.invoke()
}
return if (localMangaRepository.cleanup()) { return if (localMangaRepository.cleanup()) {
dataRepository.cleanupLocalManga() dataRepository.cleanupLocalManga()
Result.success() Result.success()
@ -44,7 +51,7 @@ class LocalStorageCleanupWorker @AssistedInject constructor(
val request = OneTimeWorkRequestBuilder<ImportWorker>() val request = OneTimeWorkRequestBuilder<ImportWorker>()
.setConstraints(constraints) .setConstraints(constraints)
.addTag(TAG) .addTag(TAG)
.setBackoffCriteria(BackoffPolicy.LINEAR, 1, TimeUnit.MINUTES) .setBackoffCriteria(BackoffPolicy.LINEAR, 10, TimeUnit.MINUTES)
.build() .build()
WorkManager.getInstance(context).enqueueUniqueWork(TAG, ExistingWorkPolicy.KEEP, request).await() WorkManager.getInstance(context).enqueueUniqueWork(TAG, ExistingWorkPolicy.KEEP, request).await()
} }

@ -628,4 +628,6 @@
<string name="chapters_deleted_pattern">Removed %1$s, cleared %2$s</string> <string name="chapters_deleted_pattern">Removed %1$s, cleared %2$s</string>
<string name="delete_read_chapters_summary">Delete chapters you have already read from local storage to free up space</string> <string name="delete_read_chapters_summary">Delete chapters you have already read from local storage to free up space</string>
<string name="delete_read_chapters_prompt">This will permanently delete all chapters marked as read from your local storage. You can re-download it later, but the imported chapters may be lost forever</string> <string name="delete_read_chapters_prompt">This will permanently delete all chapters marked as read from your local storage. You can re-download it later, but the imported chapters may be lost forever</string>
<string name="delete_read_chapters_auto">Delete read chapters automatically</string>
<string name="runs_on_app_start">Runs when the application starts</string>
</resources> </resources>

@ -89,6 +89,12 @@
android:summary="@string/delete_read_chapters_summary" android:summary="@string/delete_read_chapters_summary"
android:title="@string/delete_read_chapters" /> android:title="@string/delete_read_chapters" />
<SwitchPreferenceCompat
android:defaultValue="false"
android:key="chapters_clear_auto"
android:summary="@string/runs_on_app_start"
android:title="@string/delete_read_chapters_auto" />
</PreferenceCategory> </PreferenceCategory>
</PreferenceScreen> </PreferenceScreen>

Loading…
Cancel
Save