mirror of
https://github.com/null2264/yokai.git
synced 2025-06-21 10:44:42 +00:00
refactor(archive): Move stuff around
Hopefully this makes it easier for me to make it KMM compatible in the future
This commit is contained in:
parent
7d4e3d7bbc
commit
e19d048bb1
4 changed files with 22 additions and 11 deletions
|
@ -43,7 +43,7 @@ class AndroidArchiveInputStream(buffer: Long, size: Long) : ArchiveInputStream()
|
||||||
Archive.readFree(archive)
|
Archive.readFree(archive)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun getNextEntry() = Archive.readNextHeader(archive).takeUnless { it == 0L }?.let { entry ->
|
override fun getNextEntry() = Archive.readNextHeader(archive).takeUnless { it == 0L }?.let { entry ->
|
||||||
val name = ArchiveEntry.pathnameUtf8(entry) ?: ArchiveEntry.pathname(entry)?.decodeToString() ?: return null
|
val name = ArchiveEntry.pathnameUtf8(entry) ?: ArchiveEntry.pathname(entry)?.decodeToString() ?: return null
|
||||||
val isFile = ArchiveEntry.filetype(entry) == ArchiveEntry.AE_IFREG
|
val isFile = ArchiveEntry.filetype(entry) == ArchiveEntry.AE_IFREG
|
||||||
ArchiveEntry(name, isFile)
|
ArchiveEntry(name, isFile)
|
||||||
|
|
|
@ -9,15 +9,17 @@ import eu.kanade.tachiyomi.util.system.openFileDescriptor
|
||||||
import me.zhanghai.android.libarchive.ArchiveException
|
import me.zhanghai.android.libarchive.ArchiveException
|
||||||
import java.io.InputStream
|
import java.io.InputStream
|
||||||
|
|
||||||
class AndroidArchiveReader(pfd: ParcelFileDescriptor) : ArchiveReader {
|
class AndroidArchiveReader(pfd: ParcelFileDescriptor) : ArchiveReader() {
|
||||||
val size = pfd.statSize
|
override val size =
|
||||||
val address = Os.mmap(0, size, OsConstants.PROT_READ, OsConstants.MAP_PRIVATE, pfd.fileDescriptor, 0)
|
pfd.statSize
|
||||||
|
override val address =
|
||||||
|
Os.mmap(0, size, OsConstants.PROT_READ, OsConstants.MAP_PRIVATE, pfd.fileDescriptor, 0)
|
||||||
|
|
||||||
override fun <T> useEntries(block: (Sequence<ArchiveEntry>) -> T): T =
|
override fun createInputStream(address: Long, size: Long): ArchiveInputStream =
|
||||||
AndroidArchiveInputStream(address, size).use { block(generateSequence { it.getNextEntry() }) }
|
AndroidArchiveInputStream(address, size)
|
||||||
|
|
||||||
override fun getInputStream(entryName: String): InputStream? {
|
override fun getInputStream(entryName: String): InputStream? {
|
||||||
val archive = AndroidArchiveInputStream(address, size)
|
val archive = createInputStream(address, size)
|
||||||
try {
|
try {
|
||||||
while (true) {
|
while (true) {
|
||||||
val entry = archive.getNextEntry() ?: break
|
val entry = archive.getNextEntry() ?: break
|
||||||
|
|
|
@ -3,4 +3,6 @@ package yokai.core.archive
|
||||||
import java.io.InputStream
|
import java.io.InputStream
|
||||||
|
|
||||||
// TODO: Use Okio's Source
|
// TODO: Use Okio's Source
|
||||||
abstract class ArchiveInputStream : InputStream()
|
abstract class ArchiveInputStream : InputStream() {
|
||||||
|
abstract fun getNextEntry(): ArchiveEntry?
|
||||||
|
}
|
||||||
|
|
|
@ -3,7 +3,14 @@ package yokai.core.archive
|
||||||
import java.io.Closeable
|
import java.io.Closeable
|
||||||
import java.io.InputStream
|
import java.io.InputStream
|
||||||
|
|
||||||
interface ArchiveReader : Closeable {
|
abstract class ArchiveReader : Closeable {
|
||||||
fun <T> useEntries(block: (Sequence<ArchiveEntry>) -> T): T
|
abstract val address: Long
|
||||||
fun getInputStream(entryName: String): InputStream?
|
abstract val size: Long
|
||||||
|
|
||||||
|
abstract fun createInputStream(address: Long, size: Long): ArchiveInputStream
|
||||||
|
|
||||||
|
inline fun <T> useEntries(block: (Sequence<ArchiveEntry>) -> T): T =
|
||||||
|
createInputStream(address, size).use { block(generateSequence { it.getNextEntry() }) }
|
||||||
|
|
||||||
|
abstract fun getInputStream(entryName: String): InputStream?
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue