diff --git a/nise-backend/src/main/kotlin/com/nisemoe/nise/database/ScoreService.kt b/nise-backend/src/main/kotlin/com/nisemoe/nise/database/ScoreService.kt index 54b6a3c..2f4e3b7 100644 --- a/nise-backend/src/main/kotlin/com/nisemoe/nise/database/ScoreService.kt +++ b/nise-backend/src/main/kotlin/com/nisemoe/nise/database/ScoreService.kt @@ -9,6 +9,7 @@ import com.nisemoe.nise.osu.Mod import com.nisemoe.nise.osu.OsuApi import com.nisemoe.nise.service.AuthService import com.nisemoe.nise.service.CompressReplay +import org.apache.commons.compress.compressors.lzma.LZMACompressorInputStream import org.jooq.Condition import org.jooq.DSLContext import org.jooq.Record @@ -19,6 +20,7 @@ import org.nisemoe.mari.judgements.Judgement import org.slf4j.LoggerFactory import org.springframework.stereotype.Service import java.time.LocalDateTime +import java.util.* import kotlin.math.roundToInt @Service @@ -64,6 +66,11 @@ class ScoreService( ) } + private fun decompressData(replayString: String): ByteArray = + Base64.getDecoder().decode(replayString).inputStream().use { byteStream -> + LZMACompressorInputStream(byteStream).readBytes() + } + fun getReplayViewerData(replayId: Long): ReplayViewerData? { val beatmapId = dslContext.select(SCORES.BEATMAP_ID) .from(SCORES) @@ -83,6 +90,7 @@ class ScoreService( val replayData = result.get(SCORES.REPLAY, ByteArray::class.java) ?: return null val replay = CompressReplay.decompressReplayToString(replayData) + val replayDecoded = decompressData(replay) var beatmapFile = result.get(BEATMAPS.BEATMAP_FILE, String::class.java) if(beatmapFile == null) { @@ -103,7 +111,7 @@ class ScoreService( return ReplayViewerData( beatmap = beatmapFile, - replay = replay, + replay = String(replayDecoded, Charsets.UTF_8).trimEnd(','), judgements = getJudgements(replayId), mods = mods )