• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download

<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 }