chore: cleanup

This commit is contained in:
aayush262 2024-04-29 03:04:51 +05:30
parent a573fbdc89
commit ea48809d07
10 changed files with 42 additions and 116 deletions

View file

@ -373,70 +373,11 @@ class AnilistQueries {
} }
return media return media
} }
suspend fun continueMedia(type: String, planned: Boolean = false): ArrayList<Media> {
val returnArray = arrayListOf<Media>()
val map = mutableMapOf<Int, Media>()
val query = if (planned) {
"""{ planned: ${continueMediaQuery(type, "PLANNING")} }"""
} else {
"""{
current: ${continueMediaQuery(type, "CURRENT")},
repeating: ${continueMediaQuery(type, "REPEATING")}
}"""
}
val response = executeQuery<Query.CombinedMediaListResponse>(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<Int>(),
List::class.java
) as List<Int>
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 { 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 } } } } } """ 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<Media> { private suspend fun favMedia(anime: Boolean, id: Int? = Anilist.userid): ArrayList<Media> {
var hasNextPage = true var hasNextPage = true
var page = 0 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}}}}}}""" 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<Media> {
val response = executeQuery<Query.Page>("""{${recommendationQuery()}}""")
val map = mutableMapOf<Int, Media>()
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<Query.MediaListCollection>("""{${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 { 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 } } } } """ 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) return getUserProfile(id)
} }
suspend fun getUserId(username: String): Int? { private suspend fun getUserId(username: String): Int? {
return executeQuery<Query.User>( return executeQuery<Query.User>(
"""{User(name:"$username"){id}}""", """{User(name:"$username"){id}}""",
force = true force = true
@ -1577,8 +1483,8 @@ Page(page:$page,perPage:50) {
) )
} }
private fun userFavMediaQuery(anime: Boolean, page: Int, id: Int): String { private fun userFavMediaQuery(anime: Boolean, 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}}}}}}""" 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? { suspend fun userFollowing(id: Int): Query.Following? {
@ -1598,8 +1504,8 @@ Page(page:$page,perPage:50) {
suspend fun initProfilePage(id: Int): Query.ProfilePageMedia? { suspend fun initProfilePage(id: Int): Query.ProfilePageMedia? {
return executeQuery<Query.ProfilePageMedia>( return executeQuery<Query.ProfilePageMedia>(
"""{ """{
favoriteAnime:${userFavMediaQuery(true, 1, id)} favoriteAnime:${userFavMediaQuery(true, id)}
favoriteManga:${userFavMediaQuery(false, 1, id)} favoriteManga:${userFavMediaQuery(false, id)}
}""".trimIndent(), force = true }""".trimIndent(), force = true
) )
} }

View file

@ -315,7 +315,7 @@ class HomeFragment : Fragment() {
binding.homeRecommendedEmpty, binding.homeRecommendedEmpty,
binding.homeRecommended binding.homeRecommended
) )
binding.homeUserStatusContainer.visibility = if (PrefManager.getVal<List<Boolean>>(PrefName.HomeLayout)[7]) View.VISIBLE else View.GONE binding.homeUserStatusContainer.visibility =View.VISIBLE
binding.homeUserStatusProgressBar.visibility = View.VISIBLE binding.homeUserStatusProgressBar.visibility = View.VISIBLE
binding.homeUserStatusRecyclerView.visibility = View.GONE binding.homeUserStatusRecyclerView.visibility = View.GONE
model.getUserStatus().observe(viewLifecycleOwner) { model.getUserStatus().observe(viewLifecycleOwner) {
@ -364,7 +364,8 @@ class HomeFragment : Fragment() {
"MangaContinue", "MangaContinue",
"MangaFav", "MangaFav",
"MangaPlanned", "MangaPlanned",
"Recommendation" "Recommendation",
"UserStatus"
) )
val containers = arrayOf( val containers = arrayOf(
@ -375,6 +376,7 @@ class HomeFragment : Fragment() {
binding.homeFavMangaContainer, binding.homeFavMangaContainer,
binding.homePlannedMangaContainer, binding.homePlannedMangaContainer,
binding.homeRecommendedContainer, binding.homeRecommendedContainer,
binding.homeUserStatusContainer,
) )
val live = Refresh.activity.getOrPut(1) { MutableLiveData(false) } val live = Refresh.activity.getOrPut(1) { MutableLiveData(false) }

View file

@ -38,7 +38,7 @@ class CircleView(context: Context, attrs: AttributeSet?) : View(context, attrs)
val secondColor = typedValue1.data val secondColor = typedValue1.data
fun setColor(int: Int) { fun setColor(int: Int) {
paint.color = if (int < booleanList.size && booleanList[int]) { paint.color = if (int < booleanList.size && booleanList[int]) {
if (isUser) secondColor else Color.GRAY Color.GRAY
} else { } else {
if (isUser) secondColor else primaryColor if (isUser) secondColor else primaryColor
} }

View file

@ -42,7 +42,8 @@ class StatusActivity : AppCompatActivity(), StoriesCallback {
slideOutLeft = AnimationUtils.loadAnimation(this, R.anim.slide_out_left) slideOutLeft = AnimationUtils.loadAnimation(this, R.anim.slide_out_left)
slideInRight = AnimationUtils.loadAnimation(this, R.anim.slide_in_right) slideInRight = AnimationUtils.loadAnimation(this, R.anim.slide_in_right)
val watchedActivity = PrefManager.getCustomVal<Set<Int>>("activities", setOf()) val key = "activities"
val watchedActivity = PrefManager.getCustomVal<Set<Int>>(key, setOf())
val startFrom = findFirstNonMatch(watchedActivity, activity[position].activity ) val startFrom = findFirstNonMatch(watchedActivity, activity[position].activity )
val startIndex = if ( startFrom > 0) startFrom else 0 val startIndex = if ( startFrom > 0) startFrom else 0
binding.stories.setStoriesList(activity[position].activity, this, startIndex + 1) binding.stories.setStoriesList(activity[position].activity, this, startIndex + 1)
@ -77,7 +78,8 @@ class StatusActivity : AppCompatActivity(), StoriesCallback {
override fun onStoriesEnd() { override fun onStoriesEnd() {
position += 1 position += 1
if (position < activity.size) { if (position < activity.size) {
val watchedActivity = PrefManager.getCustomVal<Set<Int>>("activities", setOf()) val key = "activities"
val watchedActivity = PrefManager.getCustomVal<Set<Int>>(key, setOf())
val startFrom = findFirstNonMatch(watchedActivity, activity[position].activity ) val startFrom = findFirstNonMatch(watchedActivity, activity[position].activity )
val startIndex= if ( startFrom > 0) startFrom else 0 val startIndex= if ( startFrom > 0) startFrom else 0
binding.stories.startAnimation(slideOutLeft) binding.stories.startAnimation(slideOutLeft)

View file

@ -262,7 +262,7 @@ constructor(
} }
private fun resetProgressBar(storyIndex: Int) { private fun resetProgressBar(storyIndex: Int) {
for (i in storyIndex until activityList.size) { for (i in storyIndex until activityList.size + 1) {
val progressBar = findViewWithTag<ProgressBar>("story${i}") val progressBar = findViewWithTag<ProgressBar>("story${i}")
progressBar?.let { progressBar?.let {
it.progress = 0 it.progress = 0
@ -317,7 +317,7 @@ constructor(
} }
userClicked = true userClicked = true
animation.end() animation.end()
if (storyIndex < activityList.size) if (storyIndex <= activityList.size)
storyIndex += 1 storyIndex += 1
showStory() showStory()
} }
@ -360,7 +360,7 @@ constructor(
val key = "activities" val key = "activities"
val set = PrefManager.getCustomVal<Set<Int>>(key, setOf()).plus((story.id)) val set = PrefManager.getCustomVal<Set<Int>>(key, setOf()).plus((story.id))
val newList = set.sorted().takeLast(120).toSet() val newList = set.sorted().takeLast(200).toSet()
PrefManager.setCustomVal(key, newList) PrefManager.setCustomVal(key, newList)
binding.statusUserAvatar.loadImage(story.user?.avatar?.large) binding.statusUserAvatar.loadImage(story.user?.avatar?.large)
binding.statusUserName.text = story.user?.name binding.statusUserName.text = story.user?.name
@ -395,7 +395,7 @@ constructor(
it.toString() it.toString()
} }
}} ${story.progress ?: story.media?.title?.userPreferred} " + }} ${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}" "of ${story.media?.title?.userPreferred}"
}else { }else {
"" ""

View file

@ -1,7 +1,6 @@
package ani.dantotsu.home.status.listener package ani.dantotsu.home.status.listener
interface StoriesCallback { interface StoriesCallback {
fun onStoriesEnd() fun onStoriesEnd()
fun onStoriesStart() fun onStoriesStart()
} }

View file

@ -40,6 +40,7 @@ import ani.dantotsu.databinding.ItemTitleTrailerBinding
import ani.dantotsu.displayTimer import ani.dantotsu.displayTimer
import ani.dantotsu.loadImage import ani.dantotsu.loadImage
import ani.dantotsu.navBarHeight import ani.dantotsu.navBarHeight
import ani.dantotsu.profile.User
import ani.dantotsu.px import ani.dantotsu.px
import ani.dantotsu.setSafeOnClickListener import ani.dantotsu.setSafeOnClickListener
import ani.dantotsu.settings.saving.PrefManager import ani.dantotsu.settings.saving.PrefManager
@ -572,6 +573,22 @@ class MediaInfoFragment : Fragment() {
parent.addView(root) 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) { if (!media.users.isNullOrEmpty() && !offline) {
ItemTitleRecyclerBinding.inflate( ItemTitleRecyclerBinding.inflate(
LayoutInflater.from(context), LayoutInflater.from(context),
@ -580,7 +597,7 @@ class MediaInfoFragment : Fragment() {
).apply { ).apply {
itemTitle.setText(R.string.social) itemTitle.setText(R.string.social)
itemRecycler.adapter = itemRecycler.adapter =
MediaSocialAdapter(media.users!!, type, requireActivity()) MediaSocialAdapter(users, type, requireActivity())
itemRecycler.layoutManager = LinearLayoutManager( itemRecycler.layoutManager = LinearLayoutManager(
requireContext(), requireContext(),
LinearLayoutManager.HORIZONTAL, LinearLayoutManager.HORIZONTAL,

View file

@ -27,7 +27,7 @@ import eltos.simpledialogfragment.color.SimpleColorDialog
class SettingsThemeActivity : AppCompatActivity(), SimpleDialog.OnDialogResultListener { class SettingsThemeActivity : AppCompatActivity(), SimpleDialog.OnDialogResultListener {
private lateinit var binding: ActivitySettingsThemeBinding private lateinit var binding: ActivitySettingsThemeBinding
private var reload = false private var reload = PrefManager.getCustomVal("reload", true)
override fun onCreate(savedInstanceState: Bundle?) { override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState) super.onCreate(savedInstanceState)
ThemeManager(this).applyTheme() ThemeManager(this).applyTheme()
@ -211,7 +211,6 @@ class SettingsThemeActivity : AppCompatActivity(), SimpleDialog.OnDialogResultLi
fun reload() { fun reload() {
PrefManager.setCustomVal("reload", true) PrefManager.setCustomVal("reload", true)
restartApp() restartApp()
reload = true
} }
} }

View file

@ -314,6 +314,7 @@
android:id="@+id/homeUserStatusContainer" android:id="@+id/homeUserStatusContainer"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:visibility="gone"
android:minHeight="100dp"> android:minHeight="100dp">
<ProgressBar <ProgressBar

View file

@ -688,8 +688,8 @@
<string name="error_loading_discord_user_data">Error loading Discord User Data</string> <string name="error_loading_discord_user_data">Error loading Discord User Data</string>
<string name="discord_warning"><![CDATA[By logging in, your discord will now show what you are watching & reading on Dantotsu\n\nIf you are on invisible mode, logging in will make you online, when you open Dantotsu.\n\nThis does break the Discord TOS. \nAlthough Discord has never banned anyone for using Custom Rich Presence(what Dantotsu uses), You have still been warned.\n\nDantotsu is not responsible for anything that happens to your account.]]></string> <string name="discord_warning"><![CDATA[By logging in, your discord will now show what you are watching & reading on Dantotsu\n\nIf you are on invisible mode, logging in will make you online, when you open Dantotsu.\n\nThis does break the Discord TOS. \nAlthough Discord has never banned anyone for using Custom Rich Presence(what Dantotsu uses), You have still been warned.\n\nDantotsu is not responsible for anything that happens to your account.]]></string>
<string name="warning">Warning</string> <string name="warning">Warning</string>
<string name="view_anime">View Anime</string> <string name="view_anime" translatable="false">View Anime</string>
<string name="view_manga">View Manga</string> <string name="view_manga" translatable="false">View Manga</string>
<string name="force_legacy_installer">Force Legacy Installer</string> <string name="force_legacy_installer">Force Legacy Installer</string>
<string name="extensions_settings">Extensions</string> <string name="extensions_settings">Extensions</string>
<string name="NSFWExtention">NSFW Extensions</string> <string name="NSFWExtention">NSFW Extensions</string>
@ -793,7 +793,7 @@ Non quae tempore quo provident laudantium qui illo dolor vel quia dolor et exerc
<string name="blur_banners">Blur Banners</string> <string name="blur_banners">Blur Banners</string>
<string name="blur">Blur</string> <string name="blur">Blur</string>
<string name="hide_scroll_bar">Hide Scroll Bar</string> <string name="hide_scroll_bar">Hide Scroll Bar</string>
<string name="view_on_anilist">View on AniList</string> <string name="view_on_anilist" translatable="false">View on AniList</string>
<string name="anilist_notification_filters">Filter Notifications</string> <string name="anilist_notification_filters">Filter Notifications</string>
<string name="anilist_notifications_checking_time">Anilist notifications update frequency : %1$s</string> <string name="anilist_notifications_checking_time">Anilist notifications update frequency : %1$s</string>
<string name="comment_notification_checking_time">Comment notifications update frequency : %1$s</string> <string name="comment_notification_checking_time">Comment notifications update frequency : %1$s</string>