From ea48809d07a16e6c356e6b03b08af582470bf87b Mon Sep 17 00:00:00 2001 From: aayush262 Date: Mon, 29 Apr 2024 03:04:51 +0530 Subject: [PATCH] chore: cleanup --- .../connections/anilist/AnilistQueries.kt | 106 +----------------- .../java/ani/dantotsu/home/HomeFragment.kt | 6 +- .../ani/dantotsu/home/status/CircleView.kt | 2 +- .../dantotsu/home/status/StatusActivity.kt | 6 +- .../java/ani/dantotsu/home/status/Stories.kt | 8 +- .../home/status/listener/StoriesCallback.kt | 1 - .../ani/dantotsu/media/MediaInfoFragment.kt | 19 +++- .../settings/SettingsThemeActivity.kt | 3 +- app/src/main/res/layout/fragment_home.xml | 1 + app/src/main/res/values/strings.xml | 6 +- 10 files changed, 42 insertions(+), 116 deletions(-) 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 29bfa681..d9f07b73 100644 --- a/app/src/main/java/ani/dantotsu/connections/anilist/AnilistQueries.kt +++ b/app/src/main/java/ani/dantotsu/connections/anilist/AnilistQueries.kt @@ -373,70 +373,11 @@ class AnilistQueries { } return media } - - suspend fun continueMedia(type: String, planned: Boolean = false): ArrayList { - val returnArray = arrayListOf() - val map = mutableMapOf() - val query = if (planned) { - """{ planned: ${continueMediaQuery(type, "PLANNING")} }""" - } else { - """{ - current: ${continueMediaQuery(type, "CURRENT")}, - repeating: ${continueMediaQuery(type, "REPEATING")} - }""" - } - - val response = executeQuery(query) - if (planned) { - response?.data?.planned?.lists?.forEach { li -> - li.entries?.reversed()?.forEach { - val m = Media(it) - m.cameFromContinue = true - map[m.id] = m - } - } - } else { - response?.data?.current?.lists?.forEach { li -> - li.entries?.reversed()?.forEach { - val m = Media(it) - m.cameFromContinue = true - map[m.id] = m - } - } - response?.data?.repeating?.lists?.forEach { li -> - li.entries?.reversed()?.forEach { - val m = Media(it) - m.cameFromContinue = true - map[m.id] = m - } - } - } - if (type != "ANIME") { - returnArray.addAll(map.values) - return returnArray - } - @Suppress("UNCHECKED_CAST") - val list = PrefManager.getNullableCustomVal( - "continueAnimeList", - listOf(), - List::class.java - ) as List - if (list.isNotEmpty()) { - list.reversed().forEach { - if (map.containsKey(it)) returnArray.add(map[it]!!) - } - for (i in map) { - if (i.value !in returnArray) returnArray.add(i.value) - } - } else returnArray.addAll(map.values) - return returnArray - } - private fun continueMediaQuery(type: String, status: String): String { return """ MediaListCollection(userId: ${Anilist.userid}, type: $type, status: $status , sort: UPDATED_TIME ) { lists { entries { progress private score(format:POINT_100) status media { id idMal type isAdult status chapters episodes nextAiringEpisode {episode} meanScore isFavourite format bannerImage coverImage{large} title { english romaji userPreferred } } } } } """ } - suspend fun favMedia(anime: Boolean, id: Int? = Anilist.userid): ArrayList { + private suspend fun favMedia(anime: Boolean, id: Int? = Anilist.userid): ArrayList { var hasNextPage = true var page = 0 @@ -464,41 +405,6 @@ class AnilistQueries { return """User(id:${id}){id favourites{${if (anime) "anime" else "manga"}(page:$page){pageInfo{hasNextPage}edges{favouriteOrder node{id idMal isAdult mediaListEntry{ progress private score(format:POINT_100) status } chapters isFavourite format episodes nextAiringEpisode{episode}meanScore isFavourite format startDate{year month day} title{english romaji userPreferred}type status(version:2)bannerImage coverImage{large}}}}}}""" } - suspend fun recommendations(): ArrayList { - val response = executeQuery("""{${recommendationQuery()}}""") - val map = mutableMapOf() - response?.data?.page?.apply { - recommendations?.onEach { - val json = it.mediaRecommendation - if (json != null) { - val m = Media(json) - m.relation = json.type?.toString() - map[m.id] = m - } - } - } - - val types = arrayOf("ANIME", "MANGA") - suspend fun repeat(type: String) { - val res = - executeQuery("""{${recommendationPlannedQuery(type)}}""") - res?.data?.mediaListCollection?.lists?.forEach { li -> - li.entries?.forEach { - val m = Media(it) - if (m.status == "RELEASING" || m.status == "FINISHED") { - m.relation = it.media?.type?.toString() - map[m.id] = m - } - } - } - } - types.forEach { repeat(it) } - - val list = ArrayList(map.values.toList()) - list.sortByDescending { it.meanScore } - return list - } - private fun recommendationQuery(): String { return """ Page(page: 1, perPage:30) { pageInfo { total currentPage hasNextPage } recommendations(sort: RATING_DESC, onList: true) { rating userRating mediaRecommendation { id idMal isAdult mediaListEntry { progress private score(format:POINT_100) status } chapters isFavourite format episodes nextAiringEpisode {episode} popularity meanScore isFavourite format title {english romaji userPreferred } type status(version: 2) bannerImage coverImage { large } } } } """ } @@ -1562,7 +1468,7 @@ Page(page:$page,perPage:50) { return getUserProfile(id) } - suspend fun getUserId(username: String): Int? { + private suspend fun getUserId(username: String): Int? { return executeQuery( """{User(name:"$username"){id}}""", force = true @@ -1577,8 +1483,8 @@ Page(page:$page,perPage:50) { ) } - private fun userFavMediaQuery(anime: Boolean, page: Int, id: Int): String { - return """User(id:${id}){id favourites{${if (anime) "anime" else "manga"}(page:$page){pageInfo{hasNextPage}edges{favouriteOrder node{id idMal isAdult mediaListEntry{ progress private score(format:POINT_100) status } chapters isFavourite format episodes nextAiringEpisode{episode}meanScore isFavourite format startDate{year month day} title{english romaji userPreferred}type status(version:2)bannerImage coverImage{large}}}}}}""" + private fun userFavMediaQuery(anime: Boolean, id: Int): String { + return """User(id:${id}){id favourites{${if (anime) "anime" else "manga"}(page:1){pageInfo{hasNextPage}edges{favouriteOrder node{id idMal isAdult mediaListEntry{ progress private score(format:POINT_100) status } chapters isFavourite format episodes nextAiringEpisode{episode}meanScore isFavourite format startDate{year month day} title{english romaji userPreferred}type status(version:2)bannerImage coverImage{large}}}}}}""" } suspend fun userFollowing(id: Int): Query.Following? { @@ -1598,8 +1504,8 @@ Page(page:$page,perPage:50) { suspend fun initProfilePage(id: Int): Query.ProfilePageMedia? { return executeQuery( """{ - favoriteAnime:${userFavMediaQuery(true, 1, id)} - favoriteManga:${userFavMediaQuery(false, 1, id)} + favoriteAnime:${userFavMediaQuery(true, id)} + favoriteManga:${userFavMediaQuery(false, id)} }""".trimIndent(), force = true ) } diff --git a/app/src/main/java/ani/dantotsu/home/HomeFragment.kt b/app/src/main/java/ani/dantotsu/home/HomeFragment.kt index a0139d72..56857254 100644 --- a/app/src/main/java/ani/dantotsu/home/HomeFragment.kt +++ b/app/src/main/java/ani/dantotsu/home/HomeFragment.kt @@ -315,7 +315,7 @@ class HomeFragment : Fragment() { binding.homeRecommendedEmpty, binding.homeRecommended ) - binding.homeUserStatusContainer.visibility = if (PrefManager.getVal>(PrefName.HomeLayout)[7]) View.VISIBLE else View.GONE + binding.homeUserStatusContainer.visibility =View.VISIBLE binding.homeUserStatusProgressBar.visibility = View.VISIBLE binding.homeUserStatusRecyclerView.visibility = View.GONE model.getUserStatus().observe(viewLifecycleOwner) { @@ -364,7 +364,8 @@ class HomeFragment : Fragment() { "MangaContinue", "MangaFav", "MangaPlanned", - "Recommendation" + "Recommendation", + "UserStatus" ) val containers = arrayOf( @@ -375,6 +376,7 @@ class HomeFragment : Fragment() { binding.homeFavMangaContainer, binding.homePlannedMangaContainer, binding.homeRecommendedContainer, + binding.homeUserStatusContainer, ) val live = Refresh.activity.getOrPut(1) { MutableLiveData(false) } diff --git a/app/src/main/java/ani/dantotsu/home/status/CircleView.kt b/app/src/main/java/ani/dantotsu/home/status/CircleView.kt index 2fa47142..cc1d1399 100644 --- a/app/src/main/java/ani/dantotsu/home/status/CircleView.kt +++ b/app/src/main/java/ani/dantotsu/home/status/CircleView.kt @@ -38,7 +38,7 @@ class CircleView(context: Context, attrs: AttributeSet?) : View(context, attrs) val secondColor = typedValue1.data fun setColor(int: Int) { paint.color = if (int < booleanList.size && booleanList[int]) { - if (isUser) secondColor else Color.GRAY + Color.GRAY } else { if (isUser) secondColor else primaryColor } diff --git a/app/src/main/java/ani/dantotsu/home/status/StatusActivity.kt b/app/src/main/java/ani/dantotsu/home/status/StatusActivity.kt index b41bf7a6..43b2cb55 100644 --- a/app/src/main/java/ani/dantotsu/home/status/StatusActivity.kt +++ b/app/src/main/java/ani/dantotsu/home/status/StatusActivity.kt @@ -42,7 +42,8 @@ class StatusActivity : AppCompatActivity(), StoriesCallback { slideOutLeft = AnimationUtils.loadAnimation(this, R.anim.slide_out_left) slideInRight = AnimationUtils.loadAnimation(this, R.anim.slide_in_right) - val watchedActivity = PrefManager.getCustomVal>("activities", setOf()) + val key = "activities" + val watchedActivity = PrefManager.getCustomVal>(key, setOf()) val startFrom = findFirstNonMatch(watchedActivity, activity[position].activity ) val startIndex = if ( startFrom > 0) startFrom else 0 binding.stories.setStoriesList(activity[position].activity, this, startIndex + 1) @@ -77,7 +78,8 @@ class StatusActivity : AppCompatActivity(), StoriesCallback { override fun onStoriesEnd() { position += 1 if (position < activity.size) { - val watchedActivity = PrefManager.getCustomVal>("activities", setOf()) + val key = "activities" + val watchedActivity = PrefManager.getCustomVal>(key, setOf()) val startFrom = findFirstNonMatch(watchedActivity, activity[position].activity ) val startIndex= if ( startFrom > 0) startFrom else 0 binding.stories.startAnimation(slideOutLeft) diff --git a/app/src/main/java/ani/dantotsu/home/status/Stories.kt b/app/src/main/java/ani/dantotsu/home/status/Stories.kt index 6c72222a..f3edff90 100644 --- a/app/src/main/java/ani/dantotsu/home/status/Stories.kt +++ b/app/src/main/java/ani/dantotsu/home/status/Stories.kt @@ -262,7 +262,7 @@ constructor( } private fun resetProgressBar(storyIndex: Int) { - for (i in storyIndex until activityList.size) { + for (i in storyIndex until activityList.size + 1) { val progressBar = findViewWithTag("story${i}") progressBar?.let { it.progress = 0 @@ -317,7 +317,7 @@ constructor( } userClicked = true animation.end() - if (storyIndex < activityList.size) + if (storyIndex <= activityList.size) storyIndex += 1 showStory() } @@ -360,7 +360,7 @@ constructor( val key = "activities" val set = PrefManager.getCustomVal>(key, setOf()).plus((story.id)) - val newList = set.sorted().takeLast(120).toSet() + val newList = set.sorted().takeLast(200).toSet() PrefManager.setCustomVal(key, newList) binding.statusUserAvatar.loadImage(story.user?.avatar?.large) binding.statusUserName.text = story.user?.name @@ -395,7 +395,7 @@ constructor( it.toString() } }} ${story.progress ?: story.media?.title?.userPreferred} " + - if (story.status?.contains("completed") == false) { + if (story.status?.contains("completed") == false && !story.status.contains("plans") && !story.status.contains("repeating")) { "of ${story.media?.title?.userPreferred}" }else { "" diff --git a/app/src/main/java/ani/dantotsu/home/status/listener/StoriesCallback.kt b/app/src/main/java/ani/dantotsu/home/status/listener/StoriesCallback.kt index 67cbf5b6..9a2b684c 100644 --- a/app/src/main/java/ani/dantotsu/home/status/listener/StoriesCallback.kt +++ b/app/src/main/java/ani/dantotsu/home/status/listener/StoriesCallback.kt @@ -1,7 +1,6 @@ package ani.dantotsu.home.status.listener interface StoriesCallback { - fun onStoriesEnd() fun onStoriesStart() } \ No newline at end of file diff --git a/app/src/main/java/ani/dantotsu/media/MediaInfoFragment.kt b/app/src/main/java/ani/dantotsu/media/MediaInfoFragment.kt index 11e532c0..c248800b 100644 --- a/app/src/main/java/ani/dantotsu/media/MediaInfoFragment.kt +++ b/app/src/main/java/ani/dantotsu/media/MediaInfoFragment.kt @@ -40,6 +40,7 @@ import ani.dantotsu.databinding.ItemTitleTrailerBinding import ani.dantotsu.displayTimer import ani.dantotsu.loadImage import ani.dantotsu.navBarHeight +import ani.dantotsu.profile.User import ani.dantotsu.px import ani.dantotsu.setSafeOnClickListener import ani.dantotsu.settings.saving.PrefManager @@ -572,6 +573,22 @@ class MediaInfoFragment : Fragment() { parent.addView(root) } } + val users = media.users!! + if (Anilist.token != null && media.userStatus != null) { + users.add(0, + User( + Anilist.userid!!, + Anilist.username!!, + Anilist.avatar, + Anilist.bg, + status = media.userStatus, + score = media.userScore.toFloat(), + progress = media.userProgress, + totalEpisodes = if (type == "ANIME") media.anime?.totalEpisodes else media.manga?.totalChapters, + nextAiringEpisode = media.anime?.nextAiringEpisode + ) + ) + } if (!media.users.isNullOrEmpty() && !offline) { ItemTitleRecyclerBinding.inflate( LayoutInflater.from(context), @@ -580,7 +597,7 @@ class MediaInfoFragment : Fragment() { ).apply { itemTitle.setText(R.string.social) itemRecycler.adapter = - MediaSocialAdapter(media.users!!, type, requireActivity()) + MediaSocialAdapter(users, type, requireActivity()) itemRecycler.layoutManager = LinearLayoutManager( requireContext(), LinearLayoutManager.HORIZONTAL, diff --git a/app/src/main/java/ani/dantotsu/settings/SettingsThemeActivity.kt b/app/src/main/java/ani/dantotsu/settings/SettingsThemeActivity.kt index 5e526e28..05ab6e41 100644 --- a/app/src/main/java/ani/dantotsu/settings/SettingsThemeActivity.kt +++ b/app/src/main/java/ani/dantotsu/settings/SettingsThemeActivity.kt @@ -27,7 +27,7 @@ import eltos.simpledialogfragment.color.SimpleColorDialog class SettingsThemeActivity : AppCompatActivity(), SimpleDialog.OnDialogResultListener { private lateinit var binding: ActivitySettingsThemeBinding - private var reload = false + private var reload = PrefManager.getCustomVal("reload", true) override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) ThemeManager(this).applyTheme() @@ -211,7 +211,6 @@ class SettingsThemeActivity : AppCompatActivity(), SimpleDialog.OnDialogResultLi fun reload() { PrefManager.setCustomVal("reload", true) restartApp() - reload = true } } \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_home.xml b/app/src/main/res/layout/fragment_home.xml index ec8017e0..a53ac379 100644 --- a/app/src/main/res/layout/fragment_home.xml +++ b/app/src/main/res/layout/fragment_home.xml @@ -314,6 +314,7 @@ android:id="@+id/homeUserStatusContainer" android:layout_width="match_parent" android:layout_height="wrap_content" + android:visibility="gone" android:minHeight="100dp"> Error loading Discord User Data Warning - View Anime - View Manga + View Anime + View Manga Force Legacy Installer Extensions NSFW Extensions @@ -793,7 +793,7 @@ Non quae tempore quo provident laudantium qui illo dolor vel quia dolor et exerc Blur Banners Blur Hide Scroll Bar - View on AniList + View on AniList Filter Notifications Anilist notifications update frequency : %1$s Comment notifications update frequency : %1$s