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 919da868..16f9f51a 100644 --- a/app/src/main/java/ani/dantotsu/connections/anilist/AnilistQueries.kt +++ b/app/src/main/java/ani/dantotsu/connections/anilist/AnilistQueries.kt @@ -296,6 +296,52 @@ class AnilistQueries { return media } + fun userMediaDetails(media: Media): Media { + val query = + """{Media(id:${media.id}){id mediaListEntry{id status progress private repeat customLists updatedAt startedAt{year month day}completedAt{year month day}}isFavourite idMal}}""" + runBlocking { + val anilist = async { + var response = executeQuery(query, force = true, show = true) + if (response != null) { + fun parse() { + val fetchedMedia = response?.data?.media ?: return + + if (fetchedMedia.mediaListEntry != null) { + fetchedMedia.mediaListEntry?.apply { + media.userProgress = progress + media.isListPrivate = private ?: false + media.userListId = id + media.userStatus = status?.toString() + media.inCustomListsOf = customLists?.toMutableMap() + media.userRepeat = repeat ?: 0 + media.userUpdatedAt = updatedAt?.toString()?.toLong()?.times(1000) + media.userCompletedAt = completedAt ?: FuzzyDate() + media.userStartedAt = startedAt ?: FuzzyDate() + } + } else { + media.isListPrivate = false + media.userStatus = null + media.userListId = null + media.userProgress = null + media.userRepeat = 0 + media.userUpdatedAt = null + media.userCompletedAt = FuzzyDate() + media.userStartedAt = FuzzyDate() + } + } + + if (response.data?.media != null) parse() + else { + response = executeQuery(query, force = true, useToken = false) + if (response?.data?.media != null) parse() + } + } + } + awaitAll(anilist) + } + return media + } + suspend fun continueMedia(type: String, planned: Boolean = false): ArrayList { val returnArray = arrayListOf() val map = mutableMapOf() diff --git a/app/src/main/java/ani/dantotsu/media/MediaListDialogFragment.kt b/app/src/main/java/ani/dantotsu/media/MediaListDialogFragment.kt index fe5c0c93..0430709b 100644 --- a/app/src/main/java/ani/dantotsu/media/MediaListDialogFragment.kt +++ b/app/src/main/java/ani/dantotsu/media/MediaListDialogFragment.kt @@ -254,20 +254,28 @@ class MediaListDialogFragment : BottomSheetDialogFragment() { } binding.mediaListDelete.setOnClickListener { - val id = media!!.userListId - if (id != null) { - scope.launch { - withContext(Dispatchers.IO) { - Anilist.mutation.deleteList(id) + var id = media!!.userListId + scope.launch { + withContext(Dispatchers.IO) { + if (id != null) { + Anilist.mutation.deleteList(id!!) MAL.query.deleteList(media?.anime != null, media?.idMAL) + } else { + val profile = Anilist.query.userMediaDetails(media!!) + profile.userListId?.let { listId -> + id = listId + Anilist.mutation.deleteList(listId) + MAL.query.deleteList(media?.anime != null, media?.idMAL) + } } - Refresh.all() - snackString(getString(R.string.deleted_from_list)) - dismissAllowingStateLoss() } + } + if (id != null) { + Refresh.all() + snackString(getString(R.string.deleted_from_list)) + dismissAllowingStateLoss() } else { snackString(getString(R.string.no_list_id)) - Refresh.all() } } } diff --git a/app/src/main/java/ani/dantotsu/media/MediaListDialogSmallFragment.kt b/app/src/main/java/ani/dantotsu/media/MediaListDialogSmallFragment.kt index 185e4916..982eca8e 100644 --- a/app/src/main/java/ani/dantotsu/media/MediaListDialogSmallFragment.kt +++ b/app/src/main/java/ani/dantotsu/media/MediaListDialogSmallFragment.kt @@ -59,12 +59,12 @@ class MediaListDialogSmallFragment : BottomSheetDialogFragment() { binding.mediaListContainer.updateLayoutParams { bottomMargin += navBarHeight } val scope = viewLifecycleOwner.lifecycleScope binding.mediaListDelete.setOnClickListener { - val id = media.userListId - if (id != null) { - viewLifecycleOwner.lifecycleScope.launch { - withContext(Dispatchers.IO) { + var id = media.userListId + viewLifecycleOwner.lifecycleScope.launch { + withContext(Dispatchers.IO) { + if (id != null) { try { - Anilist.mutation.deleteList(id) + Anilist.mutation.deleteList(id!!) MAL.query.deleteList(media.anime != null, media.idMAL) } catch (e: Exception) { withContext(Dispatchers.Main) { @@ -72,16 +72,24 @@ class MediaListDialogSmallFragment : BottomSheetDialogFragment() { } return@withContext } + } else { + val profile = Anilist.query.userMediaDetails(media) + profile.userListId?.let { listId -> + id = listId + Anilist.mutation.deleteList(listId) + MAL.query.deleteList(media.anime != null, media.idMAL) + } } - withContext(Dispatchers.Main) { + } + withContext(Dispatchers.Main) { + if (id != null) { Refresh.all() snackString(getString(R.string.deleted_from_list)) dismissAllowingStateLoss() + } else { + snackString(getString(R.string.no_list_id)) } } - } else { - snackString(getString(R.string.no_list_id)) - Refresh.all() } } diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index ae39eb1b..db99801a 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -434,7 +434,7 @@ Couldn\'t find episode : %1$s List Updated Deleted from List - No List ID found, reloading… + No List ID found… Checking for Update Don\'t show again for version %1$s No Update Found