mirror of
				https://github.com/mihonapp/mihon.git
				synced 2025-11-03 23:58:55 +01:00 
			
		
		
		
	Convert some classes to Kotlin
This commit is contained in:
		@@ -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);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@@ -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;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
@@ -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;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
@@ -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}"
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user