diff --git a/app/build.gradle b/app/build.gradle index 4240077a..db475477 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -44,7 +44,7 @@ android { applicationIdSuffix ".beta" // keep as beta by popular request versionNameSuffix "-alpha02" manifestPlaceholders = [icon_placeholder: "@mipmap/ic_launcher_alpha", icon_placeholder_round: "@mipmap/ic_launcher_alpha_round"] - debuggable true + debuggable System.getenv("CI") == null isDefault true } debug { diff --git a/app/src/main/java/ani/dantotsu/connections/anilist/AnilistQueries.kt b/app/src/main/java/ani/dantotsu/connections/anilist/AnilistQueries.kt index 289d8c90..efda5768 100644 --- a/app/src/main/java/ani/dantotsu/connections/anilist/AnilistQueries.kt +++ b/app/src/main/java/ani/dantotsu/connections/anilist/AnilistQueries.kt @@ -31,6 +31,14 @@ import java.io.Serializable import kotlin.system.measureTimeMillis class AnilistQueries { + + suspend fun toggleFollow(id: Int): Query.ToggleFollow? { + val response = executeQuery( + """mutation{ToggleFollow(userId:$id){id, isFollowing, isFollower}}""" + ) + return response + } + suspend fun getUserData(): Boolean { val response: Query.Viewer? measureTimeMillis { @@ -40,7 +48,6 @@ class AnilistQueries { val user = response?.data?.user ?: return false PrefManager.setVal(PrefName.AnilistUserName, user.name) - Anilist.userid = user.id PrefManager.setVal(PrefName.AnilistUserId, user.id.toString()) Anilist.username = user.name diff --git a/app/src/main/java/ani/dantotsu/connections/anilist/api/Data.kt b/app/src/main/java/ani/dantotsu/connections/anilist/api/Data.kt index bb17bf92..7d458933 100644 --- a/app/src/main/java/ani/dantotsu/connections/anilist/api/Data.kt +++ b/app/src/main/java/ani/dantotsu/connections/anilist/api/Data.kt @@ -139,6 +139,19 @@ class Query { ) } + @Serializable + data class ToggleFollow( + @SerialName("data") + val data: Data? + ) { + @Serializable + data class Data( + @SerialName("ToggleFollow") + val toggleFollow: FollowData + + ) + } + @Serializable data class GenreCollection( @SerialName("data") @@ -200,7 +213,7 @@ class Query { @SerialName("bannerImage") val bannerImage: String?, @SerialName("isFollowing") - val isFollowing: Boolean, + var isFollowing: Boolean, @SerialName("isFollower") val isFollower: Boolean, @SerialName("isBlocked") diff --git a/app/src/main/java/ani/dantotsu/connections/anilist/api/Media.kt b/app/src/main/java/ani/dantotsu/connections/anilist/api/Media.kt index 491f4df4..5122e419 100644 --- a/app/src/main/java/ani/dantotsu/connections/anilist/api/Media.kt +++ b/app/src/main/java/ani/dantotsu/connections/anilist/api/Media.kt @@ -514,6 +514,12 @@ data class MediaListCollection( ) +@Serializable +data class FollowData( + @SerialName("id") var id: Int, + @SerialName("isFollowing") var isFollowing: Boolean, +) + @Serializable data class MediaListGroup( // Media list entries diff --git a/app/src/main/java/ani/dantotsu/profile/ProfileActivity.kt b/app/src/main/java/ani/dantotsu/profile/ProfileActivity.kt index 0d30b49c..9728b6d4 100644 --- a/app/src/main/java/ani/dantotsu/profile/ProfileActivity.kt +++ b/app/src/main/java/ani/dantotsu/profile/ProfileActivity.kt @@ -21,6 +21,7 @@ import ani.dantotsu.navBarHeight import ani.dantotsu.others.ImageViewDialog import ani.dantotsu.settings.saving.PrefManager import ani.dantotsu.settings.saving.PrefName +import ani.dantotsu.snackString import ani.dantotsu.statusBarHeight import ani.dantotsu.themes.ThemeManager import ani.dantotsu.toast @@ -79,7 +80,22 @@ class ProfileActivity : AppCompatActivity() { } }) val userLevel = intent.getStringExtra("username") ?: "" - + binding.followButton.visibility = if (user.id == Anilist.userid || Anilist.userid == null) View.GONE else View.VISIBLE + binding.followButton.text = if (user.isFollowing) "Unfollow" else "Follow" + if (user.isFollowing && user.isFollower) binding.followButton.text = "Mutual" + binding.followButton.setOnClickListener { + lifecycleScope.launch(Dispatchers.IO) { + val res = Anilist.query.toggleFollow(user.id) + if (res?.data?.toggleFollow != null) { + withContext(Dispatchers.Main) { + snackString("Success") + user.isFollowing = res.data.toggleFollow.isFollowing + binding.followButton.text = if (user.isFollowing) "Unfollow" else "Follow" + if (user.isFollowing && user.isFollower) binding.followButton.text = "Mutual" + } + } + } + } binding.profileProgressBar.visibility = View.GONE binding.profileTopContainer.visibility = View.VISIBLE binding.profileBannerImage.loadImage(user.bannerImage) diff --git a/app/src/main/res/layout/activity_profile.xml b/app/src/main/res/layout/activity_profile.xml index e1e82dac..3307ea4f 100644 --- a/app/src/main/res/layout/activity_profile.xml +++ b/app/src/main/res/layout/activity_profile.xml @@ -86,6 +86,26 @@ android:text="@string/username" android:textSize="18sp" /> +