BackupUtil.kt 1.0 KB

1234567891011121314151617181920212223242526272829303132
  1. package eu.kanade.tachiyomi.util
  2. import android.content.Context
  3. import android.net.Uri
  4. import eu.kanade.tachiyomi.data.backup.create.BackupCreator
  5. import eu.kanade.tachiyomi.data.backup.models.Backup
  6. import eu.kanade.tachiyomi.data.backup.models.BackupSerializer
  7. import okio.buffer
  8. import okio.gzip
  9. import okio.source
  10. object BackupUtil {
  11. /**
  12. * Decode a potentially-gzipped backup.
  13. */
  14. fun decodeBackup(context: Context, uri: Uri): Backup {
  15. val backupCreator = BackupCreator(context)
  16. val backupStringSource = context.contentResolver.openInputStream(uri)!!.source().buffer()
  17. val peeked = backupStringSource.peek()
  18. peeked.require(2)
  19. val id1id2 = peeked.readShort()
  20. val backupString = if (id1id2.toInt() == 0x1f8b) { // 0x1f8b is gzip magic bytes
  21. backupStringSource.gzip().buffer()
  22. } else {
  23. backupStringSource
  24. }.use { it.readByteArray() }
  25. return backupCreator.parser.decodeFromByteArray(BackupSerializer, backupString)
  26. }
  27. }