[Backups] Handle uncompressed backups (cherry picked from commit c892c793a82c0349a3001954fd3a4fda9fece0dd) # Conflicts: # app/src/main/java/eu/kanade/tachiyomi/data/backup/BackupRestorer.kt
33 lines
1.0 KiB
Kotlin
33 lines
1.0 KiB
Kotlin
package eu.kanade.tachiyomi.util
|
|
|
|
import android.content.Context
|
|
import android.net.Uri
|
|
import eu.kanade.tachiyomi.data.backup.BackupManager
|
|
import eu.kanade.tachiyomi.data.backup.models.Backup
|
|
import eu.kanade.tachiyomi.data.backup.models.BackupSerializer
|
|
import okio.buffer
|
|
import okio.gzip
|
|
import okio.source
|
|
|
|
object BackupUtil {
|
|
/**
|
|
* Decode a potentially-gzipped backup.
|
|
*/
|
|
fun decodeBackup(context: Context, uri: Uri): Backup {
|
|
val backupManager = BackupManager(context)
|
|
|
|
val backupStringSource = context.contentResolver.openInputStream(uri)!!.source().buffer()
|
|
|
|
val peeked = backupStringSource.peek()
|
|
peeked.require(2)
|
|
val id1id2 = peeked.readShort()
|
|
val backupString = if (id1id2.toInt() == 0x1f8b) { // 0x1f8b is gzip magic bytes
|
|
backupStringSource.gzip().buffer()
|
|
} else {
|
|
backupStringSource
|
|
}.use { it.readByteArray() }
|
|
|
|
return backupManager.parser.decodeFromByteArray(BackupSerializer, backupString)
|
|
}
|
|
}
|