Page.kt 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. package eu.kanade.tachiyomi.source.model
  2. import android.net.Uri
  3. import eu.kanade.tachiyomi.network.ProgressListener
  4. import kotlinx.serialization.Serializable
  5. import kotlinx.serialization.Transient
  6. import rx.subjects.Subject
  7. @Serializable
  8. open class Page(
  9. val index: Int,
  10. val url: String = "",
  11. var imageUrl: String? = null,
  12. @Transient var uri: Uri? = null, // Deprecated but can't be deleted due to extensions
  13. ) : ProgressListener {
  14. val number: Int
  15. get() = index + 1
  16. @Transient
  17. @Volatile
  18. var status: Int = 0
  19. set(value) {
  20. field = value
  21. statusSubject?.onNext(value)
  22. statusCallback?.invoke(this)
  23. }
  24. @Transient
  25. @Volatile
  26. var progress: Int = 0
  27. set(value) {
  28. field = value
  29. statusCallback?.invoke(this)
  30. }
  31. @Transient
  32. private var statusSubject: Subject<Int, Int>? = null
  33. @Transient
  34. private var statusCallback: ((Page) -> Unit)? = null
  35. override fun update(bytesRead: Long, contentLength: Long, done: Boolean) {
  36. progress = if (contentLength > 0) {
  37. (100 * bytesRead / contentLength).toInt()
  38. } else {
  39. -1
  40. }
  41. }
  42. fun setStatusSubject(subject: Subject<Int, Int>?) {
  43. this.statusSubject = subject
  44. }
  45. fun setStatusCallback(f: ((Page) -> Unit)?) {
  46. statusCallback = f
  47. }
  48. companion object {
  49. const val QUEUE = 0
  50. const val LOAD_PAGE = 1
  51. const val DOWNLOAD_IMAGE = 2
  52. const val READY = 3
  53. const val ERROR = 4
  54. }
  55. }