Hitomi: fix animated webp & potential oom (#9600)
* animated images can be webp closes https://github.com/keiyoushi/extensions-source/issues/9554 * avoid internal resize overhead of HashSet * bump * import
This commit is contained in:
parent
d773d2692b
commit
296a7bf55d
@ -1,7 +1,7 @@
|
|||||||
ext {
|
ext {
|
||||||
extName = 'Hitomi'
|
extName = 'Hitomi'
|
||||||
extClass = '.HitomiFactory'
|
extClass = '.HitomiFactory'
|
||||||
extVersionCode = 40
|
extVersionCode = 41
|
||||||
isNsfw = true
|
isNsfw = true
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -32,6 +32,7 @@ import java.nio.ByteBuffer
|
|||||||
import java.nio.ByteOrder
|
import java.nio.ByteOrder
|
||||||
import java.security.MessageDigest
|
import java.security.MessageDigest
|
||||||
import java.text.SimpleDateFormat
|
import java.text.SimpleDateFormat
|
||||||
|
import java.util.LinkedHashSet
|
||||||
import java.util.LinkedList
|
import java.util.LinkedList
|
||||||
import java.util.Locale
|
import java.util.Locale
|
||||||
import kotlin.math.min
|
import kotlin.math.min
|
||||||
@ -308,8 +309,6 @@ class Hitomi(
|
|||||||
|
|
||||||
val inbuf = getRangedResponse(url, offset.until(offset + length))
|
val inbuf = getRangedResponse(url, offset.until(offset + length))
|
||||||
|
|
||||||
val galleryIDs = mutableSetOf<Int>()
|
|
||||||
|
|
||||||
val buffer =
|
val buffer =
|
||||||
ByteBuffer
|
ByteBuffer
|
||||||
.wrap(inbuf)
|
.wrap(inbuf)
|
||||||
@ -326,6 +325,9 @@ class Hitomi(
|
|||||||
"inbuf.byteLength ${inbuf.size} != expected_length $expectedLength"
|
"inbuf.byteLength ${inbuf.size} != expected_length $expectedLength"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// we know total number so avoid internal resize overhead
|
||||||
|
val galleryIDs = LinkedHashSet<Int>(numberOfGalleryIDs, 1.0f)
|
||||||
|
|
||||||
for (i in 0.until(numberOfGalleryIDs))
|
for (i in 0.until(numberOfGalleryIDs))
|
||||||
galleryIDs.add(buffer.int)
|
galleryIDs.add(buffer.int)
|
||||||
|
|
||||||
@ -404,12 +406,16 @@ class Hitomi(
|
|||||||
}
|
}
|
||||||
|
|
||||||
val bytes = getRangedResponse(nozomiAddress, range)
|
val bytes = getRangedResponse(nozomiAddress, range)
|
||||||
val nozomi = mutableSetOf<Int>()
|
|
||||||
|
|
||||||
val arrayBuffer = ByteBuffer
|
val arrayBuffer = ByteBuffer
|
||||||
.wrap(bytes)
|
.wrap(bytes)
|
||||||
.order(ByteOrder.BIG_ENDIAN)
|
.order(ByteOrder.BIG_ENDIAN)
|
||||||
|
|
||||||
|
val size = arrayBuffer.remaining() / Int.SIZE_BYTES
|
||||||
|
|
||||||
|
// we know total number so avoid internal resize overhead
|
||||||
|
val nozomi = LinkedHashSet<Int>(size, 1.0f)
|
||||||
|
|
||||||
while (arrayBuffer.hasRemaining())
|
while (arrayBuffer.hasRemaining())
|
||||||
nozomi.add(arrayBuffer.int)
|
nozomi.add(arrayBuffer.int)
|
||||||
|
|
||||||
|
@ -24,7 +24,7 @@ class ImageFile(
|
|||||||
val hash: String,
|
val hash: String,
|
||||||
private val name: String,
|
private val name: String,
|
||||||
) {
|
) {
|
||||||
val isGif get() = name.endsWith(".gif")
|
val isGif get() = name.endsWith(".gif") || name.endsWith(".webp")
|
||||||
}
|
}
|
||||||
|
|
||||||
@Serializable
|
@Serializable
|
||||||
|
Loading…
x
Reference in New Issue
Block a user