diff --git a/app/src/main/java/ani/dantotsu/connections/anilist/AnilistMutations.kt b/app/src/main/java/ani/dantotsu/connections/anilist/AnilistMutations.kt index 96d50dcf..a8bd8904 100644 --- a/app/src/main/java/ani/dantotsu/connections/anilist/AnilistMutations.kt +++ b/app/src/main/java/ani/dantotsu/connections/anilist/AnilistMutations.kt @@ -81,7 +81,7 @@ class AnilistMutations { } suspend fun postActivity(text:String): String { - val encodedText = Gson().toJson(text) + val encodedText = text.stringSanitizer() val query = "mutation{SaveTextActivity(text:$encodedText){siteUrl}}" val result = executeQuery(query) val errors = result?.get("errors") @@ -90,8 +90,8 @@ class AnilistMutations { } suspend fun postReview(summary: String, body: String, mediaId: Int, score: Int): String { - val encodedSummary = Gson().toJson(summary) - val encodedBody = Gson().toJson(body) + val encodedSummary = summary.stringSanitizer() + val encodedBody = body.stringSanitizer() val query = "mutation{SaveReview(mediaId:$mediaId,summary:$encodedSummary,body:$encodedBody,score:$score){siteUrl}}" val result = executeQuery(query) val errors = result?.get("errors") @@ -100,11 +100,27 @@ class AnilistMutations { } suspend fun postReply(activityId: Int, text: String): String { - val encodedText = Gson().toJson(text) + val encodedText = text.stringSanitizer() val query = "mutation{SaveActivityReply(activityId:$activityId,text:$encodedText){id}}" val result = executeQuery(query) val errors = result?.get("errors") return errors?.toString() ?: (currContext()?.getString(ani.dantotsu.R.string.success) ?: "Success") } + + private fun String.stringSanitizer(): String { + val sb = StringBuilder() + var i = 0 + while (i < this.length) { + val codePoint = this.codePointAt(i) + if (codePoint > 0xFFFF) { + sb.append("&#").append(codePoint).append(";") + i += 2 + } else { + sb.append(this[i]) + i++ + } + } + return Gson().toJson(sb.toString()) + } } \ No newline at end of file