Fix DownloadPageLoader resource leak (#8905)

The underlying ZipFile is leaking. To fix, store a reference to the
ZipPageLoader and recycle it on recycle.
This commit is contained in:
Two-Ai 2023-01-13 22:30:47 -05:00 committed by GitHub
parent 8cea78de83
commit 8c494f314c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -29,6 +29,13 @@ class DownloadPageLoader(
// Needed to open input streams // Needed to open input streams
private val context: Application by injectLazy() private val context: Application by injectLazy()
private var zipPageLoader: ZipPageLoader? = null
override fun recycle() {
super.recycle()
zipPageLoader?.recycle()
}
/** /**
* Returns an observable containing the pages found on this downloaded chapter. * Returns an observable containing the pages found on this downloaded chapter.
*/ */
@ -43,7 +50,7 @@ class DownloadPageLoader(
} }
private fun getPagesFromArchive(chapterPath: UniFile): Observable<List<ReaderPage>> { private fun getPagesFromArchive(chapterPath: UniFile): Observable<List<ReaderPage>> {
val loader = ZipPageLoader(File(chapterPath.filePath!!)) val loader = ZipPageLoader(File(chapterPath.filePath!!)).also { zipPageLoader = it }
return loader.getPages() return loader.getPages()
} }
@ -61,6 +68,6 @@ class DownloadPageLoader(
} }
override fun getPage(page: ReaderPage): Observable<Page.State> { override fun getPage(page: ReaderPage): Observable<Page.State> {
return Observable.just(Page.State.READY) return zipPageLoader?.getPage(page) ?: Observable.just(Page.State.READY)
} }
} }