fix: mutation variable

This commit is contained in:
sneazy-ibo
2024-06-13 03:18:04 +02:00
parent ba373bef34
commit 9332dfddc6
2 changed files with 45 additions and 26 deletions

View File

@@ -154,16 +154,29 @@ class AnilistMutations {
}
suspend fun saveUserAvatar(base64Avatar: String): JsonObject? {
val query = "mutation(\$avatar: String) { SaveUserAvatar(avatar: \$avatar) { id avatar { large medium } } }"
val variables = """{"avatar":"$base64Avatar"}"""
return executeQuery(query, variables)
}
val imageFormat = getImageFormat(base64Avatar)
val base64WithPrefix = "data:image/$imageFormat;base64,${base64Avatar.removePrefix("data:image/$imageFormat;base64,")}"
val query = "mutation(\$avatar: String) { SaveUserAvatar(avatar: \$avatar) { id avatar { large medium } } }"
val variables = """{"avatar":"$base64WithPrefix"}"""
return executeQuery(query, variables)
}
suspend fun saveUserBanner(base64Banner: String): JsonObject? {
val query = "mutation(\$banner: String) { SaveUserBanner(banner: \$banner) { id bannerImage } }"
val variables = """{"banner":"$base64Banner"}"""
return executeQuery(query, variables)
val imageFormat = getImageFormat(base64Banner)
val base64WithPrefix = "data:image/$imageFormat;base64,${base64Banner.removePrefix("data:image/$imageFormat;base64,")}"
val query = "mutation(\$banner: String) { SaveUserBanner(banner: \$banner) { id bannerImage } }"
val variables = """{"banner":"$base64WithPrefix"}"""
return executeQuery(query, variables)
}
private fun getImageFormat(base64String: String): String {
val prefix = base64String.substringBefore(",").substringAfterLast(":")
return when (prefix) {
"jpeg" -> "jpeg"
"png" -> "png"
else -> "jpeg"
}
}
private fun String.stringSanitizer(): String {
val sb = StringBuilder()

View File

@@ -28,7 +28,6 @@ import androidx.viewpager2.adapter.FragmentStateAdapter
import ani.dantotsu.R
import ani.dantotsu.blurImage
import ani.dantotsu.connections.anilist.Anilist
import ani.dantotsu.connections.anilist.Anilist.executeQuery
import ani.dantotsu.connections.anilist.api.Query
import ani.dantotsu.databinding.ActivityProfileBinding
import ani.dantotsu.databinding.ItemProfileAppBarBinding
@@ -47,7 +46,6 @@ import ani.dantotsu.statusBarHeight
import ani.dantotsu.themes.ThemeManager
import ani.dantotsu.toast
import com.google.android.material.appbar.AppBarLayout
import com.google.gson.JsonObject
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext
@@ -308,7 +306,7 @@ class ProfileActivity : AppCompatActivity(), AppBarLayout.OnOffsetChangedListene
registerForActivityResult(ActivityResultContracts.PickVisualMedia()) { uri: Uri? ->
if (uri != null) {
val bitmap = getBitmapFromUri(uri)
uploadAvatar(bitmap)
bindingProfileAppBar.profileUserAvatar.setImageBitmap(bitmap)
}
}
@@ -316,7 +314,7 @@ class ProfileActivity : AppCompatActivity(), AppBarLayout.OnOffsetChangedListene
registerForActivityResult(ActivityResultContracts.PickVisualMedia()) { uri: Uri? ->
if (uri != null) {
val bitmap = getBitmapFromUri(uri)
uploadBanner(bitmap)
bindingProfileAppBar.profileBannerImage.setImageBitmap(bitmap)
}
}
@@ -336,8 +334,19 @@ class ProfileActivity : AppCompatActivity(), AppBarLayout.OnOffsetChangedListene
return image
}
private fun saveProfileImages() {
val avatarBitmap = (bindingProfileAppBar.profileUserAvatar.drawable as? BitmapDrawable)?.bitmap
val bannerBitmap = (bindingProfileAppBar.profileBannerImage.drawable as? BitmapDrawable)?.bitmap
if (avatarBitmap != null && bannerBitmap != null) {
uploadAvatar(avatarBitmap)
uploadBanner(bannerBitmap)
} else {
toast("Please select both avatar and banner images")
}
}
private fun uploadAvatar(bitmap: Bitmap) {
bindingProfileAppBar.profileUserAvatar.setImageBitmap(bitmap)
val base64Avatar = bitmapToBase64(bitmap)
lifecycleScope.launch(Dispatchers.IO) {
val response = Anilist.mutation.saveUserAvatar(base64Avatar)
@@ -348,7 +357,6 @@ class ProfileActivity : AppCompatActivity(), AppBarLayout.OnOffsetChangedListene
}
private fun uploadBanner(bitmap: Bitmap) {
bindingProfileAppBar.profileBannerImage.setImageBitmap(bitmap)
val base64Banner = bitmapToBase64(bitmap)
lifecycleScope.launch(Dispatchers.IO) {
val response = Anilist.mutation.saveUserBanner(base64Banner)
@@ -358,12 +366,17 @@ class ProfileActivity : AppCompatActivity(), AppBarLayout.OnOffsetChangedListene
}
}
private fun saveProfileImages() {
val avatarBitmap = (bindingProfileAppBar.profileUserAvatar.drawable as BitmapDrawable).bitmap
val bannerBitmap = (bindingProfileAppBar.profileBannerImage.drawable as BitmapDrawable).bitmap
uploadAvatar(avatarBitmap)
uploadBanner(bannerBitmap)
toast("Uploading avatar and banner images...")
private fun bitmapToBase64(bitmap: Bitmap): String {
val outputStream = ByteArrayOutputStream()
bitmap.compress(Bitmap.CompressFormat.PNG, 100, outputStream)
val base64 = Base64.encodeToString(outputStream.toByteArray(), Base64.NO_WRAP)
val imageFormat = when (bitmap.config) {
Bitmap.Config.ARGB_8888 -> "png"
Bitmap.Config.RGB_565 -> "png"
Bitmap.Config.ALPHA_8 -> "png"
else -> "jpeg"
}
return "data:image/$imageFormat;base64,$base64"
}
private fun handleApiResponse(response: kotlinx.serialization.json.JsonObject?, type: String) {
@@ -376,13 +389,6 @@ class ProfileActivity : AppCompatActivity(), AppBarLayout.OnOffsetChangedListene
}
}
private fun bitmapToBase64(bitmap: Bitmap): String {
val outputStream = ByteArrayOutputStream()
bitmap.compress(Bitmap.CompressFormat.PNG, 100, outputStream)
return Base64.encodeToString(outputStream.toByteArray(), Base64.NO_WRAP)
}
private var isCollapsed = false
private val percent = 65
private var mMaxScrollSize = 0