Skip to content

Commit

Permalink
Merge pull request #51 from GregHib/compressors
Browse files Browse the repository at this point in the history
Convert compressor objects to reused classes
  • Loading branch information
Displee committed Jan 11, 2024
2 parents 5d82d09 + fa2de82 commit b84062b
Show file tree
Hide file tree
Showing 18 changed files with 917 additions and 905 deletions.
627 changes: 0 additions & 627 deletions src/main/java/com/displee/cache/compress/type/BZIP2Compressor.java

This file was deleted.

191 changes: 0 additions & 191 deletions src/main/java/com/displee/util/Whirlpool.java

This file was deleted.

6 changes: 5 additions & 1 deletion src/main/kotlin/com/displee/cache/CacheLibrary.kt
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,10 @@ import com.displee.cache.index.ReferenceTable.Companion.FLAG_NAME
import com.displee.cache.index.ReferenceTable.Companion.FLAG_WHIRLPOOL
import com.displee.cache.index.archive.Archive
import com.displee.compress.CompressionType
import com.displee.compress.type.Compressors
import com.displee.io.Buffer
import com.displee.io.impl.OutputBuffer
import com.displee.util.Whirlpool
import com.displee.util.generateWhirlpool
import java.io.File
import java.io.FileNotFoundException
Expand All @@ -26,6 +28,8 @@ open class CacheLibrary(val path: String, val clearDataAfterUpdate: Boolean = fa
lateinit var mainFile: RandomAccessFile

private val indices: SortedMap<Int, Index> = TreeMap<Int, Index>()
internal val compressors = Compressors()
internal val whirlpool = Whirlpool()
var index255: Index255? = null
private var rs3 = false

Expand Down Expand Up @@ -282,7 +286,7 @@ open class CacheLibrary(val path: String, val clearDataAfterUpdate: Boolean = fa
val indexData = buffer.array()
val whirlpoolBuffer = OutputBuffer(WHIRLPOOL_SIZE + 1)
.writeByte(0)
.writeBytes(indexData.generateWhirlpool(5, indexData.size - 5))
.writeBytes(indexData.generateWhirlpool(whirlpool, 5, indexData.size - 5))
if (exponent != null && modulus != null) {
buffer.writeBytes(Buffer.cryptRSA(whirlpoolBuffer.array(), exponent, modulus))
}
Expand Down
16 changes: 10 additions & 6 deletions src/main/kotlin/com/displee/cache/index/Index.kt
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,8 @@ import com.displee.cache.index.archive.ArchiveSector
import com.displee.compress.CompressionType
import com.displee.compress.compress
import com.displee.compress.decompress
import com.displee.compress.type.Compressor
import com.displee.compress.type.EmptyCompressor
import com.displee.io.impl.InputBuffer
import com.displee.io.impl.OutputBuffer
import com.displee.util.generateCrc
Expand All @@ -18,6 +20,7 @@ open class Index(origin: CacheLibrary, id: Int, val raf: RandomAccessFile) : Ref
var crc = 0
var whirlpool: ByteArray? = null
var compressionType: CompressionType = CompressionType.NONE
var compressor: Compressor = EmptyCompressor
private var cached = false
protected var closed = false

Expand All @@ -34,9 +37,10 @@ open class Index(origin: CacheLibrary, id: Int, val raf: RandomAccessFile) : Ref
val archiveSector = origin.index255?.readArchiveSector(id) ?: return
val archiveSectorData = archiveSector.data
crc = archiveSectorData.generateCrc()
whirlpool = archiveSectorData.generateWhirlpool()
read(InputBuffer(archiveSector.decompress()))
whirlpool = archiveSectorData.generateWhirlpool(origin.whirlpool)
read(InputBuffer(archiveSector.decompress(origin.compressors)))
compressionType = archiveSector.compressionType
compressor = archiveSector.compressor
}

fun cache() {
Expand Down Expand Up @@ -71,9 +75,9 @@ open class Index(origin: CacheLibrary, id: Int, val raf: RandomAccessFile) : Ref
it.revision++
it.unFlag()
listener?.notify((i / flaggedArchives.size) * 0.80, "Repacking archive ${it.id}...")
val compressed = it.write().compress(it.compressionType ?: CompressionType.GZIP, it.xtea, it.revision)
val compressed = it.write().compress(it.compressionType, it.compressor, it.xtea, it.revision)
it.crc = compressed.generateCrc(length = compressed.size - 2)
it.whirlpool = compressed.generateWhirlpool(length = compressed.size - 2)
it.whirlpool = compressed.generateWhirlpool(origin.whirlpool, length = compressed.size - 2)
val written = writeArchiveSector(it.id, compressed)
check(written) { "Unable to write data to archive sector. Your cache may be corrupt." }
if (origin.clearDataAfterUpdate) {
Expand All @@ -87,9 +91,9 @@ open class Index(origin: CacheLibrary, id: Int, val raf: RandomAccessFile) : Ref
if (flagged()) {
unFlag()
revision++
val indexData = write().compress(compressionType)
val indexData = write().compress(compressionType, compressor)
crc = indexData.generateCrc()
whirlpool = indexData.generateWhirlpool()
whirlpool = indexData.generateWhirlpool(origin.whirlpool)
val written = origin.index255?.writeArchiveSector(this.id, indexData) ?: false
check(written) { "Unable to write data to checksum table. Your cache may be corrupt." }
}
Expand Down
4 changes: 2 additions & 2 deletions src/main/kotlin/com/displee/cache/index/Index317.kt
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ class Index317(origin: CacheLibrary, id: Int, raf: RandomAccessFile) : Index(ori
crcs = readArchiveProperties(CRC_FILES[id - 1], BufferType.INT)
}
for (i in 0 until archiveLength) {
val archive = Archive317(i)
val archive = Archive317(origin.compressors.bzip2, i)
archives[i] = archive
if (versions == null || crcs == null || i >= versions.size) {
continue
Expand Down Expand Up @@ -59,7 +59,7 @@ class Index317(origin: CacheLibrary, id: Int, raf: RandomAccessFile) : Index(ori
listener?.notify((i / flaggedArchives.size) * 0.80, "Repacking archive ${it.id}...")
val compressed = it.write()
it.crc = compressed.generateCrc()
it.whirlpool = compressed.generateWhirlpool()
it.whirlpool = compressed.generateWhirlpool(origin.whirlpool)
val written = writeArchiveSector(it.id, compressed)
check(written) { "Unable to write data to archive sector. Your cache may be corrupt." }
if (origin.clearDataAfterUpdate) {
Expand Down
10 changes: 7 additions & 3 deletions src/main/kotlin/com/displee/cache/index/ReferenceTable.kt
Original file line number Diff line number Diff line change
Expand Up @@ -229,13 +229,15 @@ open class ReferenceTable(protected val origin: CacheLibrary, val id: Int) : Com
}
if (existing == null) {
if (this is Index317) {
existing = Archive317(id, if (hashName == -1) 0 else hashName)
existing = Archive317(origin.compressors.bzip2, id, if (hashName == -1) 0 else hashName)
if (this.id != 0) {
existing.compressionType = CompressionType.GZIP
existing.compressor = origin.compressors.gzip
}
} else {
existing = Archive(id, if (hashName == -1) 0 else hashName, xtea)
existing.compressionType = CompressionType.GZIP
existing.compressor = origin.compressors.gzip
}
if (hashName != -1) {
archiveNames.add(existing.hashName)
Expand Down Expand Up @@ -294,11 +296,13 @@ open class ReferenceTable(protected val origin: CacheLibrary, val id: Int) : Com
} else {
val is317 = is317()
if (is317) {
(archive as Archive317).compressionType = if (this.id == 0) CompressionType.BZIP2 else CompressionType.GZIP
archive.compressionType = if (this.id == 0) CompressionType.BZIP2 else CompressionType.GZIP
archive.compressor = origin.compressors.get(archive.compressionType)
archive.read(InputBuffer(sector.data))
} else {
val decompressed = sector.decompress(xtea)
val decompressed = sector.decompress(origin.compressors, xtea)
archive.compressionType = sector.compressionType
archive.compressor = sector.compressor
if (decompressed.isNotEmpty()) {
archive.read(InputBuffer(decompressed))
archive.xtea = xtea
Expand Down
10 changes: 8 additions & 2 deletions src/main/kotlin/com/displee/cache/index/archive/Archive.kt
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,18 @@ package com.displee.cache.index.archive

import com.displee.cache.index.archive.file.File
import com.displee.compress.CompressionType
import com.displee.compress.type.Compressor
import com.displee.compress.type.Compressors
import com.displee.compress.type.EmptyCompressor
import com.displee.compress.type.GZIPCompressor
import com.displee.io.impl.InputBuffer
import com.displee.io.impl.OutputBuffer
import java.util.*

open class Archive(val id: Int, var hashName: Int = 0, internal var xtea: IntArray? = null) : Comparable<Archive> {

var compressionType: CompressionType? = null
var compressionType: CompressionType = CompressionType.GZIP
var compressor: Compressor = EmptyCompressor

var revision = 0
private var needUpdate = false
Expand Down Expand Up @@ -85,7 +90,7 @@ open class Archive(val id: Int, var hashName: Int = 0, internal var xtea: IntArr
var size = 0
files.forEach { size += it.data?.size ?: 0 }
val buffer = OutputBuffer(size + files.size * 4)
val emptyByteArray = byteArrayOf()
val emptyByteArray = byteArrayOf()
if (files.size == 1) {
return first()?.data ?: emptyByteArray
} else {
Expand Down Expand Up @@ -273,6 +278,7 @@ open class Archive(val id: Int, var hashName: Int = 0, internal var xtea: IntArr
if (read) {
//bzip2 compression fails when xteas are set for some reason, cheap fix
compressionType = CompressionType.GZIP
compressor = GZIPCompressor()
flag()
}
}
Expand Down
Loading

0 comments on commit b84062b

Please sign in to comment.