Show progress of new chapters checking

This commit is contained in:
Koitharu
2021-01-22 18:26:02 +02:00
parent 951a0db3f2
commit 510c5b70c9
5 changed files with 53 additions and 2 deletions

View File

@@ -8,6 +8,7 @@
<w>koin</w>
<w>kotatsu</w>
<w>manga</w>
<w>snackbar</w>
<w>upsert</w>
<w>webtoon</w>
</words>

View File

@@ -19,6 +19,7 @@ import org.koitharu.kotatsu.list.ui.model.ListModel
import org.koitharu.kotatsu.tracker.ui.adapter.FeedAdapter
import org.koitharu.kotatsu.tracker.work.TrackWorker
import org.koitharu.kotatsu.utils.ext.getDisplayMessage
import org.koitharu.kotatsu.utils.progress.Progress
class FeedFragment : BaseFragment<FragmentFeedBinding>(), PaginationScrollListener.Callback,
OnListItemClickListener<Manga> {
@@ -26,6 +27,7 @@ class FeedFragment : BaseFragment<FragmentFeedBinding>(), PaginationScrollListen
private val viewModel by viewModel<FeedViewModel>()
private var feedAdapter: FeedAdapter? = null
private var updateStatusSnackbar: Snackbar? = null
override fun getTitle() = context?.getString(R.string.updates)
@@ -53,6 +55,8 @@ class FeedFragment : BaseFragment<FragmentFeedBinding>(), PaginationScrollListen
viewModel.content.observe(viewLifecycleOwner, this::onListChanged)
viewModel.onError.observe(viewLifecycleOwner, this::onError)
TrackWorker.getProgressLiveData(view.context.applicationContext)
.observe(viewLifecycleOwner, this::onUpdateProgressChanged)
}
override fun onCreateOptionsMenu(menu: Menu, inflater: MenuInflater) {
@@ -66,7 +70,7 @@ class FeedFragment : BaseFragment<FragmentFeedBinding>(), PaginationScrollListen
Snackbar.make(
binding.recyclerView,
R.string.feed_will_update_soon,
Snackbar.LENGTH_LONG
Snackbar.LENGTH_SHORT
).show()
true
}
@@ -75,6 +79,7 @@ class FeedFragment : BaseFragment<FragmentFeedBinding>(), PaginationScrollListen
override fun onDestroyView() {
feedAdapter = null
updateStatusSnackbar = null
super.onDestroyView()
}
@@ -98,6 +103,25 @@ class FeedFragment : BaseFragment<FragmentFeedBinding>(), PaginationScrollListen
).show()
}
private fun onUpdateProgressChanged(progress: Progress?) {
if (progress == null) {
updateStatusSnackbar?.dismiss()
updateStatusSnackbar = null
return
}
val summaryText = getString(
R.string.chapers_checking_progress,
progress.value + 1,
progress.total
)
updateStatusSnackbar?.setText(summaryText) ?: run {
val snackbar =
Snackbar.make(binding.recyclerView, summaryText, Snackbar.LENGTH_INDEFINITE)
updateStatusSnackbar = snackbar
snackbar.show()
}
}
override fun onScrolledToEnd() {
viewModel.loadList(append = true)
}

View File

@@ -8,6 +8,8 @@ import android.os.Build
import androidx.annotation.RequiresApi
import androidx.core.app.NotificationCompat
import androidx.core.content.ContextCompat
import androidx.lifecycle.LiveData
import androidx.lifecycle.map
import androidx.work.*
import coil.ImageLoader
import coil.request.ImageRequest
@@ -24,6 +26,7 @@ import org.koitharu.kotatsu.tracker.domain.TrackingRepository
import org.koitharu.kotatsu.utils.ext.mangaRepositoryOf
import org.koitharu.kotatsu.utils.ext.toBitmapOrNull
import org.koitharu.kotatsu.utils.ext.toUriOrNull
import org.koitharu.kotatsu.utils.progress.Progress
import java.util.concurrent.TimeUnit
class TrackWorker(context: Context, workerParams: WorkerParameters) :
@@ -50,10 +53,14 @@ class TrackWorker(context: Context, workerParams: WorkerParameters) :
return Result.success()
}
var success = 0
for (track in tracks) {
val workData = Data.Builder()
.putInt(DATA_TOTAL, tracks.size)
for ((index, track) in tracks.withIndex()) {
val details = runCatching {
mangaRepositoryOf(track.manga.source).getDetails(track.manga)
}.getOrNull()
workData.putInt(DATA_PROGRESS, index)
setProgress(workData.build())
val chapters = details?.chapters ?: continue
when {
track.knownChaptersCount == -1 -> { //first check
@@ -194,6 +201,8 @@ class TrackWorker(context: Context, workerParams: WorkerParameters) :
companion object {
const val CHANNEL_ID = "tracking"
private const val DATA_PROGRESS = "progress"
private const val DATA_TOTAL = "total"
private const val TAG = "tracking"
@RequiresApi(Build.VERSION_CODES.O)
@@ -240,5 +249,20 @@ class TrackWorker(context: Context, workerParams: WorkerParameters) :
WorkManager.getInstance(context)
.enqueue(request)
}
fun getProgressLiveData(context: Context): LiveData<Progress?> {
return WorkManager.getInstance(context)
.getWorkInfosByTagLiveData(TAG)
.map { list ->
list.find { work ->
work.state == WorkInfo.State.RUNNING
}?.let { workInfo ->
Progress(
value = workInfo.progress.getInt(DATA_PROGRESS, 0),
total = workInfo.progress.getInt(DATA_TOTAL, -1)
).takeUnless { it.isIndeterminate }
}
}
}
}
}

View File

@@ -192,4 +192,5 @@
<string name="resolve">Resolve</string>
<string name="clear_cookies">Очистить куки</string>
<string name="cookies_cleared">Все куки удалены</string>
<string name="chapers_checking_progress">Проверка новых глав: %1$d из %2$d</string>
</resources>

View File

@@ -194,4 +194,5 @@
<string name="resolve">Resolve</string>
<string name="clear_cookies">Clear cookies</string>
<string name="cookies_cleared">All cookies was removed</string>
<string name="chapers_checking_progress">Checking for new chapters: %1$d of %2$d</string>
</resources>