From 6e6429db822f76ef93d2e29366a94a8837406128 Mon Sep 17 00:00:00 2001 From: rebelonion <87634197+rebelonion@users.noreply.github.com> Date: Thu, 29 Feb 2024 18:52:27 -0600 Subject: [PATCH] fix: keep user data up to date --- .../connections/comments/CommentsAPI.kt | 63 ++++++++++++++++--- 1 file changed, 53 insertions(+), 10 deletions(-) diff --git a/app/src/main/java/ani/dantotsu/connections/comments/CommentsAPI.kt b/app/src/main/java/ani/dantotsu/connections/comments/CommentsAPI.kt index 63211580..9406597c 100644 --- a/app/src/main/java/ani/dantotsu/connections/comments/CommentsAPI.kt +++ b/app/src/main/java/ani/dantotsu/connections/comments/CommentsAPI.kt @@ -21,7 +21,6 @@ import okhttp3.OkHttpClient import okio.IOException import uy.kohesive.injekt.Injekt import uy.kohesive.injekt.api.get -import java.io.File object CommentsAPI { val address: String = "https://1224665.xyz:443" @@ -130,7 +129,7 @@ object CommentsAPI { body.add("parent_comment_id", it.toString()) } val request = requestBuilder() - val json = try{ + val json = try { request.post(url, requestBody = body.build()) } catch (e: IOException) { snackString("Failed to comment") @@ -168,7 +167,7 @@ object CommentsAPI { suspend fun deleteComment(commentId: Int): Boolean { val url = "$address/comments/$commentId" val request = requestBuilder() - val json = try{ + val json = try { request.delete(url) } catch (e: IOException) { snackString("Failed to delete comment") @@ -203,7 +202,7 @@ object CommentsAPI { suspend fun banUser(userId: String): Boolean { val url = "$address/ban/$userId" val request = requestBuilder() - val json = try{ + val json = try { request.post(url) } catch (e: IOException) { snackString("Failed to ban user") @@ -216,7 +215,12 @@ object CommentsAPI { return res } - suspend fun reportComment(commentId: Int, username: String, mediaTitle: String, reportedId: String): Boolean { + suspend fun reportComment( + commentId: Int, + username: String, + mediaTitle: String, + reportedId: String + ): Boolean { val url = "$address/report/$commentId" val body = FormBody.Builder() .add("username", username) @@ -225,7 +229,7 @@ object CommentsAPI { .add("reportedId", reportedId) .build() val request = requestBuilder() - val json = try{ + val json = try { request.post(url, requestBody = body) } catch (e: IOException) { snackString("Failed to report comment") @@ -259,13 +263,38 @@ object CommentsAPI { return parsed } + private suspend fun getUserDetails(client: OkHttpClient? = null): User? { + val url = "$address/user" + val request = if (client != null) requestBuilder(client) else requestBuilder() + val json = try { + request.get(url) + } catch (e: IOException) { + return null + } + if (json.code == 200) { + val parsed = try { + Json.decodeFromString(json.text) + } catch (e: Exception) { + e.printStackTrace() + return null + } + isBanned = parsed.user.isBanned ?: false + isAdmin = parsed.user.isAdmin ?: false + isMod = parsed.user.isMod ?: false + totalVotes = parsed.user.totalVotes + return parsed.user + } + return null + } + suspend fun fetchAuthToken(client: OkHttpClient? = null) { if (authToken != null) return val MAX_RETRIES = 5 val tokenLifetime: Long = 1000 * 60 * 60 * 24 * 6 // 6 days val tokenExpiry = PrefManager.getVal(PrefName.CommentTokenExpiry) if (tokenExpiry < System.currentTimeMillis() + tokenLifetime) { - val commentResponse = PrefManager.getNullableVal(PrefName.CommentAuthResponse, null) + val commentResponse = + PrefManager.getNullableVal(PrefName.CommentAuthResponse, null) if (commentResponse != null) { authToken = commentResponse.authToken userId = commentResponse.user.id @@ -273,8 +302,9 @@ object CommentsAPI { isAdmin = commentResponse.user.isAdmin ?: false isMod = commentResponse.user.isMod ?: false totalVotes = commentResponse.user.totalVotes - return + if (getUserDetails(client) != null) return } + } val url = "$address/authenticate" val token = PrefManager.getVal(PrefName.AnilistToken, null as String?) ?: return @@ -290,7 +320,10 @@ object CommentsAPI { return } PrefManager.setVal(PrefName.CommentAuthResponse, parsed) - PrefManager.setVal(PrefName.CommentTokenExpiry, System.currentTimeMillis() + tokenLifetime) + PrefManager.setVal( + PrefName.CommentTokenExpiry, + System.currentTimeMillis() + tokenLifetime + ) authToken = parsed.authToken userId = parsed.user.id isBanned = parsed.user.isBanned ?: false @@ -311,7 +344,11 @@ object CommentsAPI { snackString("Failed to login after multiple attempts") } - private suspend fun authRequest(token: String, url: String, client: OkHttpClient? = null): NiceResponse { + private suspend fun authRequest( + token: String, + url: String, + client: OkHttpClient? = null + ): NiceResponse { val body: FormBody = FormBody.Builder() .add("token", token) .build() @@ -387,6 +424,12 @@ data class AuthResponse( } } +@Serializable +data class UserResponse( + @SerialName("user") + val user: User +) + @Serializable data class User( @SerialName("user_id")