From dec499676009a47ed831e549e777fe1ae8624b19 Mon Sep 17 00:00:00 2001 From: aayush262 Date: Fri, 5 Apr 2024 01:09:56 +0530 Subject: [PATCH] feat: voiceActors (not info for now) --- .../connections/anilist/AnilistQueries.kt | 12 +++++- .../connections/anilist/api/Character.kt | 2 +- .../main/java/ani/dantotsu/media/Character.kt | 5 ++- .../ani/dantotsu/media/CharacterAdapter.kt | 1 + .../dantotsu/media/CharacterDetailsAdapter.kt | 6 ++- app/src/main/res/layout/item_character.xml | 3 +- .../res/layout/item_character_details.xml | 38 ++++++++++++++++++- app/src/main/res/values/strings.xml | 1 + 8 files changed, 59 insertions(+), 9 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 bda6688d..928ea4b3 100644 --- a/app/src/main/java/ani/dantotsu/connections/anilist/AnilistQueries.kt +++ b/app/src/main/java/ani/dantotsu/connections/anilist/AnilistQueries.kt @@ -72,7 +72,7 @@ class AnilistQueries { media.cameFromContinue = false val query = - """{Media(id:${media.id}){id favourites popularity mediaListEntry{id status score(format:POINT_100)progress private notes repeat customLists updatedAt startedAt{year month day}completedAt{year month day}}isFavourite siteUrl idMal nextAiringEpisode{episode airingAt}source countryOfOrigin format duration season seasonYear startDate{year month day}endDate{year month day}genres studios(isMain:true){nodes{id name siteUrl}}description trailer{site id}synonyms tags{name rank isMediaSpoiler}characters(sort:[ROLE,FAVOURITES_DESC],perPage:25,page:1){edges{role node{id image{medium}name{userPreferred}isFavourite}}}relations{edges{relationType(version:2)node{id idMal mediaListEntry{progress private score(format:POINT_100)status}episodes chapters nextAiringEpisode{episode}popularity meanScore isAdult isFavourite format title{english romaji userPreferred}type status(version:2)bannerImage coverImage{large}}}}staffPreview:staff(perPage:8,sort:[RELEVANCE,ID]){edges{role node{id image{large medium}name{userPreferred}}}}recommendations(sort:RATING_DESC){nodes{mediaRecommendation{id idMal mediaListEntry{progress private score(format:POINT_100)status}episodes chapters nextAiringEpisode{episode}meanScore isAdult isFavourite format title{english romaji userPreferred}type status(version:2)bannerImage coverImage{large}}}}externalLinks{url site}}}""" + """{Media(id:${media.id}){id favourites popularity mediaListEntry{id status score(format:POINT_100)progress private notes repeat customLists updatedAt startedAt{year month day}completedAt{year month day}}isFavourite siteUrl idMal nextAiringEpisode{episode airingAt}source countryOfOrigin format duration season seasonYear startDate{year month day}endDate{year month day}genres studios(isMain:true){nodes{id name siteUrl}}description trailer{site id}synonyms tags{name rank isMediaSpoiler}characters(sort:[ROLE,FAVOURITES_DESC],perPage:25,page:1){edges{role voiceActors { id name { first middle last full native userPreferred } image { large medium } languageV2 } node{id image{medium}name{userPreferred}isFavourite}}}relations{edges{relationType(version:2)node{id idMal mediaListEntry{progress private score(format:POINT_100)status}episodes chapters nextAiringEpisode{episode}popularity meanScore isAdult isFavourite format title{english romaji userPreferred}type status(version:2)bannerImage coverImage{large}}}}staffPreview:staff(perPage:8,sort:[RELEVANCE,ID]){edges{role node{id image{large medium}name{userPreferred}}}}recommendations(sort:RATING_DESC){nodes{mediaRecommendation{id idMal mediaListEntry{progress private score(format:POINT_100)status}episodes chapters nextAiringEpisode{episode}meanScore isAdult isFavourite format title{english romaji userPreferred}type status(version:2)bannerImage coverImage{large}}}}externalLinks{url site}}}""" runBlocking { val anilist = async { var response = executeQuery(query, force = true, show = true) @@ -139,7 +139,15 @@ class AnilistQueries { ?: "SUPPORTING" else -> i.role.toString() - } + }, + voiceActor = i.voiceActors?.map { + Author( + id = it.id, + name = it.name?.userPreferred, + image = it.image?.medium, + role = it.languageV2 + ) + } as ArrayList ) ) } diff --git a/app/src/main/java/ani/dantotsu/connections/anilist/api/Character.kt b/app/src/main/java/ani/dantotsu/connections/anilist/api/Character.kt index e0539085..6f6a7db8 100644 --- a/app/src/main/java/ani/dantotsu/connections/anilist/api/Character.kt +++ b/app/src/main/java/ani/dantotsu/connections/anilist/api/Character.kt @@ -72,7 +72,7 @@ data class CharacterEdge( @SerialName("name") var name: String?, // The voice actors of the character - // @SerialName("voiceActors") var voiceActors: List?, + @SerialName("voiceActors") var voiceActors: List?, // The voice actors of the character with role date // @SerialName("voiceActorRoles") var voiceActorRoles: List?, diff --git a/app/src/main/java/ani/dantotsu/media/Character.kt b/app/src/main/java/ani/dantotsu/media/Character.kt index e774ed30..48746505 100644 --- a/app/src/main/java/ani/dantotsu/media/Character.kt +++ b/app/src/main/java/ani/dantotsu/media/Character.kt @@ -1,6 +1,8 @@ package ani.dantotsu.media import ani.dantotsu.connections.anilist.api.FuzzyDate +import ani.dantotsu.connections.anilist.api.Query +import org.checkerframework.checker.units.qual.A import java.io.Serializable data class Character( @@ -14,5 +16,6 @@ data class Character( var age: String? = null, var gender: String? = null, var dateOfBirth: FuzzyDate? = null, - var roles: ArrayList? = null + var roles: ArrayList? = null, + val voiceActor: ArrayList? = null, ) : Serializable \ No newline at end of file diff --git a/app/src/main/java/ani/dantotsu/media/CharacterAdapter.kt b/app/src/main/java/ani/dantotsu/media/CharacterAdapter.kt index e82036eb..d97e138d 100644 --- a/app/src/main/java/ani/dantotsu/media/CharacterAdapter.kt +++ b/app/src/main/java/ani/dantotsu/media/CharacterAdapter.kt @@ -28,6 +28,7 @@ class CharacterAdapter( setAnimation(binding.root.context, holder.binding.root) val character = characterList[position] val whitespace = "${character.role} " + character.voiceActor binding.itemCompactRelation.text = whitespace binding.itemCompactImage.loadImage(character.image) binding.itemCompactTitle.text = character.name diff --git a/app/src/main/java/ani/dantotsu/media/CharacterDetailsAdapter.kt b/app/src/main/java/ani/dantotsu/media/CharacterDetailsAdapter.kt index ec111dc3..5cf6899c 100644 --- a/app/src/main/java/ani/dantotsu/media/CharacterDetailsAdapter.kt +++ b/app/src/main/java/ani/dantotsu/media/CharacterDetailsAdapter.kt @@ -3,6 +3,7 @@ package ani.dantotsu.media import android.app.Activity import android.view.LayoutInflater import android.view.ViewGroup +import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.RecyclerView import ani.dantotsu.R import ani.dantotsu.currActivity @@ -36,7 +37,10 @@ class CharacterDetailsAdapter(private val character: Character, private val acti val markWon = Markwon.builder(activity).usePlugin(SoftBreakAddsNewLinePlugin.create()) .usePlugin(SpoilerPlugin()).build() markWon.setMarkdown(binding.characterDesc, desc.replace("~!", "||").replace("!~", "||")) - + binding.voiceActorRecycler.adapter = AuthorAdapter(character.voiceActor ?: arrayListOf()) + binding.voiceActorRecycler.layoutManager = LinearLayoutManager( + activity, LinearLayoutManager.HORIZONTAL, false + ) } override fun getItemCount(): Int = 1 diff --git a/app/src/main/res/layout/item_character.xml b/app/src/main/res/layout/item_character.xml index caf96e66..214964c8 100644 --- a/app/src/main/res/layout/item_character.xml +++ b/app/src/main/res/layout/item_character.xml @@ -64,8 +64,7 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:alpha="0.58" - android:ellipsize="end" - android:includeFontPadding="false" + android:ellipsize="start" android:singleLine="true" android:textAlignment="textEnd" android:textAllCaps="true" diff --git a/app/src/main/res/layout/item_character_details.xml b/app/src/main/res/layout/item_character_details.xml index 425fd92a..509ca427 100644 --- a/app/src/main/res/layout/item_character_details.xml +++ b/app/src/main/res/layout/item_character_details.xml @@ -22,15 +22,49 @@ android:layout_marginEnd="32dp" android:layout_marginBottom="32dp" android:alpha="0.58" + tools:maxLines="10" tools:ignore="TextContrastCheck" tools:text="@tools:sample/lorem/random" /> + + + + + android:textSize="18sp" /> + + \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index a89f1d02..205fdda0 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -885,4 +885,5 @@ Non quae tempore quo provident laudantium qui illo dolor vel quia dolor et exerc Are you sure you want to change the download location?\nOld downloads may no longer be accessible. Report Ban + Voice Actors