<lambda>null1 package com.airbnb.lottie.samples
2
3 import android.graphics.Bitmap
4 import android.util.Log
5 import com.airbnb.lottie.L
6 import com.amazonaws.auth.BasicAWSCredentials
7 import com.amazonaws.mobileconnectors.s3.transferutility.TransferListener
8 import com.amazonaws.mobileconnectors.s3.transferutility.TransferObserver
9 import com.amazonaws.mobileconnectors.s3.transferutility.TransferState
10 import com.amazonaws.services.s3.AmazonS3Client
11 import com.amazonaws.services.s3.model.ListObjectsV2Request
12 import com.amazonaws.services.s3.model.S3ObjectSummary
13 import java.io.ByteArrayOutputStream
14 import java.lang.Exception
15 import java.math.BigInteger
16 import java.security.MessageDigest
17 import kotlin.coroutines.resume
18 import kotlin.coroutines.resumeWithException
19 import kotlin.coroutines.suspendCoroutine
20
21 val Bitmap.md5: String
22 get() {
23 val outputStream = ByteArrayOutputStream()
24 compress(Bitmap.CompressFormat.PNG, 100, outputStream)
25 val bytes = outputStream.toByteArray()
26 val digest = MessageDigest.getInstance("MD5")
27 digest.update(bytes, 0, bytes.size)
28 return BigInteger(1, digest.digest()).toString(16)
29 }
30
31
32 val String.md5: String
33 get() {
34 val md = MessageDigest.getInstance("MD5")
35 return BigInteger(1, md.digest(toByteArray())).toString(16).padStart(32, '0')
36 }
37
awaitnull38 suspend fun TransferObserver.await() = suspendCoroutine<TransferObserver> { continuation ->
39 val listener = object : TransferListener {
40 override fun onProgressChanged(id: Int, bytesCurrent: Long, bytesTotal: Long) {}
41
42 override fun onError(id: Int, ex: Exception) {
43 Log.e(L.TAG, "$id failed uploading!", ex)
44 continuation.resumeWithException(ex)
45 }
46
47 override fun onStateChanged(id: Int, state: TransferState) {
48 when (state) {
49 TransferState.COMPLETED -> {
50 continuation.resume(this@await)
51 }
52 TransferState.CANCELED, TransferState.FAILED -> {
53 Log.d(L.TAG, "$id failed uploading ($state).")
54 continuation.resume(this@await)
55 }
56 else -> Unit
57 }
58 }
59 }
60 setTransferListener(listener)
61 }
62
AmazonS3Clientnull63 fun AmazonS3Client.fetchAllObjects(bucket: String): List<S3ObjectSummary> {
64 val allObjects = mutableListOf<S3ObjectSummary>()
65 val s3Client = AmazonS3Client(BasicAWSCredentials(BuildConfig.S3AccessKey, BuildConfig.S3SecretKey))
66 var request = ListObjectsV2Request().apply {
67 bucketName = bucket
68 }
69 var result = s3Client.listObjectsV2(request)
70 allObjects.addAll(result.objectSummaries)
71 var startAfter = result.objectSummaries.lastOrNull()?.key
72 while (startAfter != null) {
73 request = ListObjectsV2Request().apply {
74 bucketName = bucket
75 this.startAfter = startAfter
76 }
77 result = s3Client.listObjectsV2(request)
78 allObjects.addAll(result.objectSummaries)
79 startAfter = result.objectSummaries.lastOrNull()?.key
80 }
81 return allObjects
82 }