Fix cleaning saved chapters
This commit is contained in:
@@ -93,7 +93,13 @@ abstract class CoroutineIntentService : BaseService() {
|
||||
|
||||
fun stop() {
|
||||
synchronized(this) {
|
||||
cancelReceiver?.let { unregisterReceiver(it) }
|
||||
cancelReceiver?.let {
|
||||
try {
|
||||
unregisterReceiver(it)
|
||||
} catch (e: IllegalArgumentException) {
|
||||
e.printStackTraceDebug()
|
||||
}
|
||||
}
|
||||
isStopped = true
|
||||
}
|
||||
if (isForeground) {
|
||||
|
||||
@@ -166,8 +166,9 @@ abstract class ChaptersPagesViewModel(
|
||||
|
||||
fun download(chaptersIds: Set<Long>?, allowMeteredNetwork: Boolean) {
|
||||
launchJob(Dispatchers.Default) {
|
||||
val manga = requireManga()
|
||||
val task = DownloadTask(
|
||||
mangaId = requireManga().id,
|
||||
mangaId = manga.id,
|
||||
isPaused = false,
|
||||
isSilent = false,
|
||||
chaptersIds = chaptersIds?.toLongArray(),
|
||||
@@ -175,7 +176,7 @@ abstract class ChaptersPagesViewModel(
|
||||
format = null,
|
||||
allowMeteredNetwork = allowMeteredNetwork,
|
||||
)
|
||||
downloadScheduler.schedule(setOf(task))
|
||||
downloadScheduler.schedule(setOf(manga to task))
|
||||
onDownloadStarted.call(Unit)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -13,7 +13,6 @@ import kotlinx.coroutines.flow.MutableStateFlow
|
||||
import org.koitharu.kotatsu.R
|
||||
import org.koitharu.kotatsu.core.model.getPreferredBranch
|
||||
import org.koitharu.kotatsu.core.model.parcelable.ParcelableManga
|
||||
import org.koitharu.kotatsu.core.parser.MangaDataRepository
|
||||
import org.koitharu.kotatsu.core.parser.MangaRepository
|
||||
import org.koitharu.kotatsu.core.prefs.AppSettings
|
||||
import org.koitharu.kotatsu.core.prefs.DownloadFormat
|
||||
@@ -38,7 +37,6 @@ import javax.inject.Inject
|
||||
@HiltViewModel
|
||||
class DownloadDialogViewModel @Inject constructor(
|
||||
savedStateHandle: SavedStateHandle,
|
||||
private val mangaDataRepository: MangaDataRepository,
|
||||
private val scheduler: DownloadWorker.Scheduler,
|
||||
private val localStorageManager: LocalStorageManager,
|
||||
private val localMangaRepository: LocalMangaRepository,
|
||||
@@ -94,8 +92,7 @@ class DownloadDialogViewModel @Inject constructor(
|
||||
launchLoadingJob(Dispatchers.Default) {
|
||||
val tasks = mangaDetails.get().map { m ->
|
||||
val chapters = checkNotNull(m.chapters) { "Manga \"${m.title}\" cannot be loaded" }
|
||||
mangaDataRepository.storeManga(m)
|
||||
DownloadTask(
|
||||
m to DownloadTask(
|
||||
mangaId = m.id,
|
||||
isPaused = !startNow,
|
||||
isSilent = false,
|
||||
|
||||
@@ -433,6 +433,7 @@ class DownloadWorker @AssistedInject constructor(
|
||||
@Reusable
|
||||
class Scheduler @Inject constructor(
|
||||
@ApplicationContext private val context: Context,
|
||||
private val mangaDataRepository: MangaDataRepository,
|
||||
private val workManager: WorkManager,
|
||||
) {
|
||||
|
||||
@@ -507,11 +508,12 @@ class DownloadWorker @AssistedInject constructor(
|
||||
}
|
||||
}
|
||||
|
||||
suspend fun schedule(tasks: Collection<DownloadTask>) {
|
||||
suspend fun schedule(tasks: Collection<Pair<Manga, DownloadTask>>) {
|
||||
if (tasks.isEmpty()) {
|
||||
return
|
||||
}
|
||||
val requests = tasks.map { task ->
|
||||
val requests = tasks.map { (manga, task) ->
|
||||
mangaDataRepository.storeManga(manga)
|
||||
OneTimeWorkRequestBuilder<DownloadWorker>()
|
||||
.setConstraints(createConstraints(task.allowMeteredNetwork))
|
||||
.addTag(TAG)
|
||||
|
||||
@@ -77,7 +77,7 @@ class DeleteReadChaptersUseCase @Inject constructor(
|
||||
return null
|
||||
}
|
||||
val branch = (chapters.findById(history.chapterId) ?: return null).branch
|
||||
val filteredChapters = manga.manga.getChapters(branch).takeWhile { it.id != history.chapterId }
|
||||
val filteredChapters = chapters.filter { x -> x.branch == branch }.takeWhile { it.id != history.chapterId }
|
||||
return if (filteredChapters.isEmpty()) {
|
||||
null
|
||||
} else {
|
||||
|
||||
@@ -8,6 +8,7 @@ import android.view.View
|
||||
import androidx.activity.result.ActivityResultCallback
|
||||
import androidx.activity.result.contract.ActivityResultContracts
|
||||
import androidx.appcompat.app.AppCompatDelegate
|
||||
import androidx.collection.ArraySet
|
||||
import androidx.core.view.postDelayed
|
||||
import androidx.fragment.app.viewModels
|
||||
import androidx.preference.ListPreference
|
||||
@@ -15,6 +16,7 @@ import androidx.preference.MultiSelectListPreference
|
||||
import androidx.preference.Preference
|
||||
import androidx.preference.TwoStatePreference
|
||||
import androidx.preference.forEach
|
||||
import androidx.preference.get
|
||||
import com.google.android.material.dialog.MaterialAlertDialogBuilder
|
||||
import com.google.android.material.snackbar.Snackbar
|
||||
import dagger.hilt.android.AndroidEntryPoint
|
||||
@@ -54,6 +56,7 @@ class UserDataSettingsFragment : BasePreferenceFragment(R.string.data_and_privac
|
||||
lateinit var activityRecreationHandle: ActivityRecreationHandle
|
||||
|
||||
private val viewModel: UserDataSettingsViewModel by viewModels()
|
||||
private val loadingPrefs = HashSet<String>()
|
||||
|
||||
private val backupSelectCall = registerForActivityResult(
|
||||
ActivityResultContracts.OpenDocument(),
|
||||
@@ -106,8 +109,9 @@ class UserDataSettingsFragment : BasePreferenceFragment(R.string.data_and_privac
|
||||
pref.values = settings.searchSuggestionTypes.mapToSet { it.name }
|
||||
}
|
||||
viewModel.loadingKeys.observe(viewLifecycleOwner) { keys ->
|
||||
preferenceScreen.forEach { pref ->
|
||||
pref.isEnabled = pref.key !in keys
|
||||
loadingPrefs.addAll(keys)
|
||||
loadingPrefs.forEach { prefKey ->
|
||||
findPreference<Preference>(prefKey)!!.isEnabled = prefKey !in keys
|
||||
}
|
||||
}
|
||||
viewModel.onError.observeEvent(viewLifecycleOwner, SnackbarErrorObserver(listView, this))
|
||||
|
||||
@@ -4,6 +4,7 @@ import dagger.hilt.android.lifecycle.HiltViewModel
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
import kotlinx.coroutines.Job
|
||||
import kotlinx.coroutines.cancelAndJoin
|
||||
import kotlinx.coroutines.delay
|
||||
import kotlinx.coroutines.flow.MutableStateFlow
|
||||
import kotlinx.coroutines.flow.flatMapLatest
|
||||
import kotlinx.coroutines.flow.flowOf
|
||||
|
||||
@@ -262,7 +262,7 @@ class TrackWorker @AssistedInject constructor(
|
||||
format = null,
|
||||
allowMeteredNetwork = settings.allowDownloadOnMeteredNetwork != TriStateOption.DISABLED,
|
||||
)
|
||||
downloadSchedulerLazy.get().schedule(setOf(task))
|
||||
downloadSchedulerLazy.get().schedule(setOf(mangaUpdates.manga to task))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user