Convert some classes to Kotlin

This commit is contained in:
len 2016-06-15 16:37:48 +02:00
parent b1d7167112
commit 5cfd5da338
11 changed files with 118 additions and 199 deletions

View File

@ -187,7 +187,7 @@ class DownloadManager(
private fun downloadChapter(download: Download): Observable<Download> { private fun downloadChapter(download: Download): Observable<Download> {
DiskUtils.createDirectory(download.directory) 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 // Pull page list from network and add them to download object
download.source.fetchPageListFromNetwork(download.chapter) download.source.fetchPageListFromNetwork(download.chapter)
.doOnNext { pages -> .doOnNext { pages ->
@ -324,7 +324,7 @@ class DownloadManager(
var actualProgress = 0 var actualProgress = 0
var status = Download.DOWNLOADED var status = Download.DOWNLOADED
// If any page has an error, the download result will be error // 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 actualProgress += page.progress
if (page.status != Page.READY) { if (page.status != Page.READY) {
status = Download.ERROR status = Download.ERROR
@ -377,7 +377,7 @@ class DownloadManager(
// Shortcut for the method above // Shortcut for the method above
private fun savePageList(download: Download) { 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 { fun getAbsoluteMangaDirectory(source: Source, manga: Manga): File {

View File

@ -79,7 +79,7 @@ class DownloadNotifier(private val context: Context) {
return return
} }
} else { } else {
if (download != null && download.pages.size == download.downloadedImages) { if (download != null && download.pages!!.size == download.downloadedImages) {
onComplete(download) onComplete(download)
return return
} }
@ -107,8 +107,8 @@ class DownloadNotifier(private val context: Context) {
setContentTitle(it.chapter.name) setContentTitle(it.chapter.name)
setContentText(context.getString(R.string.chapter_downloading_progress) setContentText(context.getString(R.string.chapter_downloading_progress)
.format(it.downloadedImages, it.pages.size)) .format(it.downloadedImages, it.pages!!.size))
setProgress(it.pages.size, it.downloadedImages, false) setProgress(it.pages!!.size, it.downloadedImages, false)
} }
} }

View File

@ -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);
}
}

View File

@ -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
}
}

View File

@ -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;
}
}

View File

@ -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
}

View File

@ -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;
}
}

View File

@ -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
}
}

View File

@ -84,10 +84,8 @@ abstract class OnlineSource(context: Context) : Source {
.newCall(popularMangaRequest(page)) .newCall(popularMangaRequest(page))
.asObservable() .asObservable()
.map { response -> .map { response ->
page.apply { popularMangaParse(response, page)
mangas = mutableListOf<Manga>() page
popularMangaParse(response, this)
}
} }
/** /**
@ -129,10 +127,8 @@ abstract class OnlineSource(context: Context) : Source {
.newCall(searchMangaRequest(page, query)) .newCall(searchMangaRequest(page, query))
.asObservable() .asObservable()
.map { response -> .map { response ->
page.apply { searchMangaParse(response, page, query)
mangas = mutableListOf<Manga>() page
searchMangaParse(response, this, query)
}
} }
/** /**
@ -358,7 +354,7 @@ abstract class OnlineSource(context: Context) : Source {
* @param page the chapter whose page list has to be fetched * @param page the chapter whose page list has to be fetched
*/ */
open protected fun imageRequest(page: Page): Request { 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. * @param page the page.
*/ */
fun getCachedImage(page: Page): Observable<Page> { fun getCachedImage(page: Page): Observable<Page> {
val pageObservable = Observable.just(page) val imageUrl = page.imageUrl ?: return Observable.just(page)
if (page.imageUrl.isNullOrEmpty())
return pageObservable
return pageObservable return Observable.just(page)
.flatMap { .flatMap {
if (!chapterCache.isImageInCache(page.imageUrl)) { if (!chapterCache.isImageInCache(imageUrl)) {
cacheImage(page) cacheImage(page)
} else { } else {
Observable.just(page) Observable.just(page)
} }
} }
.doOnNext { .doOnNext {
page.imagePath = chapterCache.getImagePath(page.imageUrl) page.imagePath = chapterCache.getImagePath(imageUrl)
page.status = Page.READY page.status = Page.READY
} }
.doOnError { page.status = Page.ERROR } .doOnError { page.status = Page.ERROR }
@ -396,7 +390,7 @@ abstract class OnlineSource(context: Context) : Source {
private fun cacheImage(page: Page): Observable<Page> { private fun cacheImage(page: Page): Observable<Page> {
page.status = Page.DOWNLOAD_IMAGE page.status = Page.DOWNLOAD_IMAGE
return imageResponse(page) return imageResponse(page)
.doOnNext { chapterCache.putImageToCache(page.imageUrl, it, preferences.reencodeImage()) } .doOnNext { chapterCache.putImageToCache(page.imageUrl!!, it, preferences.reencodeImage()) }
.map { page } .map { page }
} }

View File

@ -220,7 +220,7 @@ class CataloguePresenter : BasePresenter<CatalogueFragment>() {
private fun getMangasPageObservable(page: Int): Observable<List<Manga>> { private fun getMangasPageObservable(page: Int): Observable<List<Manga>> {
val nextMangasPage = MangasPage(page) val nextMangasPage = MangasPage(page)
if (page != 1) { if (page != 1) {
nextMangasPage.url = lastMangasPage!!.nextPageUrl nextMangasPage.url = lastMangasPage!!.nextPageUrl!!
} }
val observable = if (query.isEmpty()) val observable = if (query.isEmpty())

View File

@ -32,12 +32,13 @@ class DownloadHolder(private val view: View) : RecyclerView.ViewHolder(view) {
view.manga_title.text = download.manga.title view.manga_title.text = download.manga.title
// Update the progress bar and the number of downloaded pages // 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.progress = 0
view.download_progress.max = 1 view.download_progress.max = 1
view.download_progress_text.text = "" view.download_progress_text.text = ""
} else { } else {
view.download_progress.max = download.pages.size * 100 view.download_progress.max = pages.size * 100
notifyProgress() notifyProgress()
notifyDownloadedPages() notifyDownloadedPages()
} }
@ -48,7 +49,7 @@ class DownloadHolder(private val view: View) : RecyclerView.ViewHolder(view) {
*/ */
fun notifyProgress() { fun notifyProgress() {
if (view.download_progress.max == 1) { 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 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. * Updates the text field of the number of downloaded pages.
*/ */
fun notifyDownloadedPages() { fun notifyDownloadedPages() {
view.download_progress_text.text = "${download.downloadedImages}/${download.pages.size}" view.download_progress_text.text = "${download.downloadedImages}/${download.pages!!.size}"
} }
} }