Convert some classes to Kotlin
Cette révision appartient à :
Parent
b1d7167112
révision
5cfd5da338
11 fichiers modifiés avec 118 ajouts et 199 suppressions
|
@ -187,7 +187,7 @@ class DownloadManager(
|
|||
private fun downloadChapter(download: Download): Observable<Download> {
|
||||
DiskUtils.createDirectory(download.directory)
|
||||
|
||||
val pageListObservable = if (download.pages == null)
|
||||
val pageListObservable: Observable<List<Page>> = if (download.pages == null)
|
||||
// Pull page list from network and add them to download object
|
||||
download.source.fetchPageListFromNetwork(download.chapter)
|
||||
.doOnNext { pages ->
|
||||
|
@ -324,7 +324,7 @@ class DownloadManager(
|
|||
var actualProgress = 0
|
||||
var status = Download.DOWNLOADED
|
||||
// If any page has an error, the download result will be error
|
||||
for (page in download.pages) {
|
||||
for (page in download.pages!!) {
|
||||
actualProgress += page.progress
|
||||
if (page.status != Page.READY) {
|
||||
status = Download.ERROR
|
||||
|
@ -377,7 +377,7 @@ class DownloadManager(
|
|||
|
||||
// Shortcut for the method above
|
||||
private fun savePageList(download: Download) {
|
||||
savePageList(download.source, download.manga, download.chapter, download.pages)
|
||||
savePageList(download.source, download.manga, download.chapter, download.pages!!)
|
||||
}
|
||||
|
||||
fun getAbsoluteMangaDirectory(source: Source, manga: Manga): File {
|
||||
|
|
|
@ -79,7 +79,7 @@ class DownloadNotifier(private val context: Context) {
|
|||
return
|
||||
}
|
||||
} else {
|
||||
if (download != null && download.pages.size == download.downloadedImages) {
|
||||
if (download != null && download.pages!!.size == download.downloadedImages) {
|
||||
onComplete(download)
|
||||
return
|
||||
}
|
||||
|
@ -107,8 +107,8 @@ class DownloadNotifier(private val context: Context) {
|
|||
setContentTitle(it.chapter.name)
|
||||
|
||||
setContentText(context.getString(R.string.chapter_downloading_progress)
|
||||
.format(it.downloadedImages, it.pages.size))
|
||||
setProgress(it.pages.size, it.downloadedImages, false)
|
||||
.format(it.downloadedImages, it.pages!!.size))
|
||||
setProgress(it.pages!!.size, it.downloadedImages, false)
|
||||
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,55 +0,0 @@
|
|||
package eu.kanade.tachiyomi.data.download.model;
|
||||
|
||||
import java.io.File;
|
||||
import java.util.List;
|
||||
|
||||
import eu.kanade.tachiyomi.data.database.models.Chapter;
|
||||
import eu.kanade.tachiyomi.data.database.models.Manga;
|
||||
import eu.kanade.tachiyomi.data.source.model.Page;
|
||||
import eu.kanade.tachiyomi.data.source.online.OnlineSource;
|
||||
import rx.subjects.PublishSubject;
|
||||
|
||||
public class Download {
|
||||
public OnlineSource source;
|
||||
public Manga manga;
|
||||
public Chapter chapter;
|
||||
public List<Page> pages;
|
||||
public File directory;
|
||||
|
||||
public transient volatile int totalProgress;
|
||||
public transient volatile int downloadedImages;
|
||||
private transient volatile int status;
|
||||
|
||||
private transient PublishSubject<Download> statusSubject;
|
||||
|
||||
public static final int NOT_DOWNLOADED = 0;
|
||||
public static final int QUEUE = 1;
|
||||
public static final int DOWNLOADING = 2;
|
||||
public static final int DOWNLOADED = 3;
|
||||
public static final int ERROR = 4;
|
||||
|
||||
|
||||
public Download(OnlineSource source, Manga manga, Chapter chapter) {
|
||||
this.source = source;
|
||||
this.manga = manga;
|
||||
this.chapter = chapter;
|
||||
}
|
||||
|
||||
public int getStatus() {
|
||||
return status;
|
||||
}
|
||||
|
||||
public void setStatus(int status) {
|
||||
this.status = status;
|
||||
notifyStatus();
|
||||
}
|
||||
|
||||
public void setStatusSubject(PublishSubject<Download> subject) {
|
||||
this.statusSubject = subject;
|
||||
}
|
||||
|
||||
private void notifyStatus() {
|
||||
if (statusSubject != null)
|
||||
statusSubject.onNext(this);
|
||||
}
|
||||
}
|
40
app/src/main/java/eu/kanade/tachiyomi/data/download/model/Download.kt
Fichier normal
40
app/src/main/java/eu/kanade/tachiyomi/data/download/model/Download.kt
Fichier normal
|
@ -0,0 +1,40 @@
|
|||
package eu.kanade.tachiyomi.data.download.model
|
||||
|
||||
import eu.kanade.tachiyomi.data.database.models.Chapter
|
||||
import eu.kanade.tachiyomi.data.database.models.Manga
|
||||
import eu.kanade.tachiyomi.data.source.model.Page
|
||||
import eu.kanade.tachiyomi.data.source.online.OnlineSource
|
||||
import rx.subjects.PublishSubject
|
||||
import java.io.File
|
||||
|
||||
class Download(val source: OnlineSource, val manga: Manga, val chapter: Chapter) {
|
||||
|
||||
lateinit var directory: File
|
||||
|
||||
var pages: List<Page>? = null
|
||||
|
||||
@Volatile @Transient var totalProgress: Int = 0
|
||||
|
||||
@Volatile @Transient var downloadedImages: Int = 0
|
||||
|
||||
@Volatile @Transient var status: Int = 0
|
||||
set(status) {
|
||||
field = status
|
||||
statusSubject?.onNext(this)
|
||||
}
|
||||
|
||||
@Transient private var statusSubject: PublishSubject<Download>? = null
|
||||
|
||||
fun setStatusSubject(subject: PublishSubject<Download>?) {
|
||||
statusSubject = subject
|
||||
}
|
||||
|
||||
companion object {
|
||||
|
||||
const val NOT_DOWNLOADED = 0
|
||||
const val QUEUE = 1
|
||||
const val DOWNLOADING = 2
|
||||
const val DOWNLOADED = 3
|
||||
const val ERROR = 4
|
||||
}
|
||||
}
|
|
@ -1,18 +0,0 @@
|
|||
package eu.kanade.tachiyomi.data.source.model;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import eu.kanade.tachiyomi.data.database.models.Manga;
|
||||
|
||||
public class MangasPage {
|
||||
|
||||
public List<Manga> mangas;
|
||||
public int page;
|
||||
public String url;
|
||||
public String nextPageUrl;
|
||||
|
||||
public MangasPage(int page) {
|
||||
this.page = page;
|
||||
}
|
||||
|
||||
}
|
13
app/src/main/java/eu/kanade/tachiyomi/data/source/model/MangasPage.kt
Fichier normal
13
app/src/main/java/eu/kanade/tachiyomi/data/source/model/MangasPage.kt
Fichier normal
|
@ -0,0 +1,13 @@
|
|||
package eu.kanade.tachiyomi.data.source.model
|
||||
|
||||
import eu.kanade.tachiyomi.data.database.models.Manga
|
||||
|
||||
class MangasPage(val page: Int) {
|
||||
|
||||
val mangas: MutableList<Manga> = mutableListOf()
|
||||
|
||||
lateinit var url: String
|
||||
|
||||
var nextPageUrl: String? = null
|
||||
|
||||
}
|
|
@ -1,99 +0,0 @@
|
|||
package eu.kanade.tachiyomi.data.source.model;
|
||||
|
||||
import eu.kanade.tachiyomi.data.network.ProgressListener;
|
||||
import eu.kanade.tachiyomi.ui.reader.ReaderChapter;
|
||||
import rx.subjects.PublishSubject;
|
||||
|
||||
public class Page implements ProgressListener {
|
||||
|
||||
private int pageNumber;
|
||||
private String url;
|
||||
private String imageUrl;
|
||||
private transient ReaderChapter chapter;
|
||||
private transient String imagePath;
|
||||
private transient volatile int status;
|
||||
private transient volatile int progress;
|
||||
|
||||
private transient PublishSubject<Integer> statusSubject;
|
||||
|
||||
public static final int QUEUE = 0;
|
||||
public static final int LOAD_PAGE = 1;
|
||||
public static final int DOWNLOAD_IMAGE = 2;
|
||||
public static final int READY = 3;
|
||||
public static final int ERROR = 4;
|
||||
|
||||
public Page(int pageNumber, String url) {
|
||||
this(pageNumber, url, null, null);
|
||||
}
|
||||
|
||||
public Page(int pageNumber, String url, String imageUrl) {
|
||||
this(pageNumber, url, imageUrl, null);
|
||||
}
|
||||
|
||||
public Page(int pageNumber, String url, String imageUrl, String imagePath) {
|
||||
this.pageNumber = pageNumber;
|
||||
this.url = url;
|
||||
this.imageUrl = imageUrl;
|
||||
this.imagePath = imagePath;
|
||||
}
|
||||
|
||||
public int getPageNumber() {
|
||||
return pageNumber;
|
||||
}
|
||||
|
||||
public String getUrl() {
|
||||
return url;
|
||||
}
|
||||
|
||||
public String getImageUrl() {
|
||||
return imageUrl;
|
||||
}
|
||||
|
||||
public void setImageUrl(String imageUrl) {
|
||||
this.imageUrl = imageUrl;
|
||||
}
|
||||
|
||||
public String getImagePath() {
|
||||
return imagePath;
|
||||
}
|
||||
|
||||
public void setImagePath(String imagePath) {
|
||||
this.imagePath = imagePath;
|
||||
}
|
||||
|
||||
public int getStatus() {
|
||||
return status;
|
||||
}
|
||||
|
||||
public void setStatus(int status) {
|
||||
this.status = status;
|
||||
if (statusSubject != null)
|
||||
statusSubject.onNext(status);
|
||||
}
|
||||
|
||||
public int getProgress() {
|
||||
return progress;
|
||||
}
|
||||
|
||||
public void setProgress(int value) {
|
||||
progress = value;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void update(long bytesRead, long contentLength, boolean done) {
|
||||
progress = (int) ((100 * bytesRead) / contentLength);
|
||||
}
|
||||
|
||||
public void setStatusSubject(PublishSubject<Integer> subject) {
|
||||
this.statusSubject = subject;
|
||||
}
|
||||
|
||||
public ReaderChapter getChapter() {
|
||||
return chapter;
|
||||
}
|
||||
|
||||
public void setChapter(ReaderChapter chapter) {
|
||||
this.chapter = chapter;
|
||||
}
|
||||
|
||||
}
|
43
app/src/main/java/eu/kanade/tachiyomi/data/source/model/Page.kt
Fichier normal
43
app/src/main/java/eu/kanade/tachiyomi/data/source/model/Page.kt
Fichier normal
|
@ -0,0 +1,43 @@
|
|||
package eu.kanade.tachiyomi.data.source.model
|
||||
|
||||
import eu.kanade.tachiyomi.data.network.ProgressListener
|
||||
import eu.kanade.tachiyomi.ui.reader.ReaderChapter
|
||||
import rx.subjects.PublishSubject
|
||||
|
||||
class Page(
|
||||
val pageNumber: Int,
|
||||
val url: String,
|
||||
var imageUrl: String? = null,
|
||||
@Transient var imagePath: String? = null
|
||||
) : ProgressListener {
|
||||
|
||||
@Transient lateinit var chapter: ReaderChapter
|
||||
|
||||
@Transient @Volatile var status: Int = 0
|
||||
set(value) {
|
||||
field = value
|
||||
statusSubject?.onNext(value)
|
||||
}
|
||||
|
||||
@Transient @Volatile var progress: Int = 0
|
||||
|
||||
@Transient private var statusSubject: PublishSubject<Int>? = null
|
||||
|
||||
override fun update(bytesRead: Long, contentLength: Long, done: Boolean) {
|
||||
progress = (100 * bytesRead / contentLength).toInt()
|
||||
}
|
||||
|
||||
fun setStatusSubject(subject: PublishSubject<Int>?) {
|
||||
this.statusSubject = subject
|
||||
}
|
||||
|
||||
companion object {
|
||||
|
||||
const val QUEUE = 0
|
||||
const val LOAD_PAGE = 1
|
||||
const val DOWNLOAD_IMAGE = 2
|
||||
const val READY = 3
|
||||
const val ERROR = 4
|
||||
}
|
||||
|
||||
}
|
|
@ -84,10 +84,8 @@ abstract class OnlineSource(context: Context) : Source {
|
|||
.newCall(popularMangaRequest(page))
|
||||
.asObservable()
|
||||
.map { response ->
|
||||
page.apply {
|
||||
mangas = mutableListOf<Manga>()
|
||||
popularMangaParse(response, this)
|
||||
}
|
||||
popularMangaParse(response, page)
|
||||
page
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -129,10 +127,8 @@ abstract class OnlineSource(context: Context) : Source {
|
|||
.newCall(searchMangaRequest(page, query))
|
||||
.asObservable()
|
||||
.map { response ->
|
||||
page.apply {
|
||||
mangas = mutableListOf<Manga>()
|
||||
searchMangaParse(response, this, query)
|
||||
}
|
||||
searchMangaParse(response, page, query)
|
||||
page
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -358,7 +354,7 @@ abstract class OnlineSource(context: Context) : Source {
|
|||
* @param page the chapter whose page list has to be fetched
|
||||
*/
|
||||
open protected fun imageRequest(page: Page): Request {
|
||||
return GET(page.imageUrl, headers)
|
||||
return GET(page.imageUrl!!, headers)
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -368,20 +364,18 @@ abstract class OnlineSource(context: Context) : Source {
|
|||
* @param page the page.
|
||||
*/
|
||||
fun getCachedImage(page: Page): Observable<Page> {
|
||||
val pageObservable = Observable.just(page)
|
||||
if (page.imageUrl.isNullOrEmpty())
|
||||
return pageObservable
|
||||
val imageUrl = page.imageUrl ?: return Observable.just(page)
|
||||
|
||||
return pageObservable
|
||||
return Observable.just(page)
|
||||
.flatMap {
|
||||
if (!chapterCache.isImageInCache(page.imageUrl)) {
|
||||
if (!chapterCache.isImageInCache(imageUrl)) {
|
||||
cacheImage(page)
|
||||
} else {
|
||||
Observable.just(page)
|
||||
}
|
||||
}
|
||||
.doOnNext {
|
||||
page.imagePath = chapterCache.getImagePath(page.imageUrl)
|
||||
page.imagePath = chapterCache.getImagePath(imageUrl)
|
||||
page.status = Page.READY
|
||||
}
|
||||
.doOnError { page.status = Page.ERROR }
|
||||
|
@ -396,7 +390,7 @@ abstract class OnlineSource(context: Context) : Source {
|
|||
private fun cacheImage(page: Page): Observable<Page> {
|
||||
page.status = Page.DOWNLOAD_IMAGE
|
||||
return imageResponse(page)
|
||||
.doOnNext { chapterCache.putImageToCache(page.imageUrl, it, preferences.reencodeImage()) }
|
||||
.doOnNext { chapterCache.putImageToCache(page.imageUrl!!, it, preferences.reencodeImage()) }
|
||||
.map { page }
|
||||
}
|
||||
|
||||
|
|
|
@ -220,7 +220,7 @@ class CataloguePresenter : BasePresenter<CatalogueFragment>() {
|
|||
private fun getMangasPageObservable(page: Int): Observable<List<Manga>> {
|
||||
val nextMangasPage = MangasPage(page)
|
||||
if (page != 1) {
|
||||
nextMangasPage.url = lastMangasPage!!.nextPageUrl
|
||||
nextMangasPage.url = lastMangasPage!!.nextPageUrl!!
|
||||
}
|
||||
|
||||
val observable = if (query.isEmpty())
|
||||
|
|
|
@ -32,12 +32,13 @@ class DownloadHolder(private val view: View) : RecyclerView.ViewHolder(view) {
|
|||
view.manga_title.text = download.manga.title
|
||||
|
||||
// Update the progress bar and the number of downloaded pages
|
||||
if (download.pages == null) {
|
||||
val pages = download.pages
|
||||
if (pages == null) {
|
||||
view.download_progress.progress = 0
|
||||
view.download_progress.max = 1
|
||||
view.download_progress_text.text = ""
|
||||
} else {
|
||||
view.download_progress.max = download.pages.size * 100
|
||||
view.download_progress.max = pages.size * 100
|
||||
notifyProgress()
|
||||
notifyDownloadedPages()
|
||||
}
|
||||
|
@ -48,7 +49,7 @@ class DownloadHolder(private val view: View) : RecyclerView.ViewHolder(view) {
|
|||
*/
|
||||
fun notifyProgress() {
|
||||
if (view.download_progress.max == 1) {
|
||||
view.download_progress.max = download.pages.size * 100
|
||||
view.download_progress.max = download.pages!!.size * 100
|
||||
}
|
||||
view.download_progress.progress = download.totalProgress
|
||||
}
|
||||
|
@ -57,7 +58,7 @@ class DownloadHolder(private val view: View) : RecyclerView.ViewHolder(view) {
|
|||
* Updates the text field of the number of downloaded pages.
|
||||
*/
|
||||
fun notifyDownloadedPages() {
|
||||
view.download_progress_text.text = "${download.downloadedImages}/${download.pages.size}"
|
||||
view.download_progress_text.text = "${download.downloadedImages}/${download.pages!!.size}"
|
||||
}
|
||||
|
||||
}
|
||||
|
|
Référencer dans un nouveau ticket