diff --git a/.github/workflows/beta.yml b/.github/workflows/beta.yml index 1ec51a06..03694b68 100644 --- a/.github/workflows/beta.yml +++ b/.github/workflows/beta.yml @@ -117,9 +117,11 @@ jobs: #Telegram curl -F "chat_id=${{ secrets.TELEGRAM_CHANNEL_ID }}" \ - -F "document=@app/build/outputs/apk/google/alpha/app-google-armeabi-v7a-alpha.apk" \ -F "caption=Alpha-Build: ${VERSION}: ${commit_messages}" \ https://api.telegram.org/bot${{ secrets.TELEGRAM_BOT_TOKEN }}/sendDocument + curl -F "chat_id=${{ secrets.TELEGRAM_CHANNEL_ID }}" \ + -F "document=@app/build/outputs/apk/google/alpha/app-google-armeabi-v7a-alpha.apk" \ + https://api.telegram.org/bot${{ secrets.TELEGRAM_BOT_TOKEN }}/sendDocument curl -F "chat_id=${{ secrets.TELEGRAM_CHANNEL_ID }}" \ -F "document=@app/build/outputs/apk/google/alpha/app-google-arm64-v8a-alpha.apk" \ https://api.telegram.org/bot${{ secrets.TELEGRAM_BOT_TOKEN }}/sendDocument 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 f539c355..411317c8 100644 --- a/app/src/main/java/ani/dantotsu/connections/anilist/AnilistQueries.kt +++ b/app/src/main/java/ani/dantotsu/connections/anilist/AnilistQueries.kt @@ -1421,47 +1421,6 @@ Page(page:$page,perPage:50) { } } } - } -}""".replace("\n", " ").replace(""" """, "") - - var hasNextPage = true - val yearMedia = mutableMapOf>() - var page = 0 - - while (hasNextPage) { - page++ - hasNextPage = executeQuery( - query(page), - force = true - )?.data?.author?.staffMedia?.let { - it.edges?.forEach { i -> - i.node?.apply { - val status = status.toString() - val year = startDate?.year?.toString() ?: "TBA" - val title = if (status != "CANCELLED") year else status - if (!yearMedia.containsKey(title)) - yearMedia[title] = arrayListOf() - val media = Media(this) - media.relation = i.staffRole - yearMedia[title]?.add(media) - } - } - it.pageInfo?.hasNextPage == true - } ?: false - } - - if (yearMedia.contains("CANCELLED")) { - val a = yearMedia["CANCELLED"]!! - yearMedia.remove("CANCELLED") - yearMedia["CANCELLED"] = a - } - author.yearMedia = yearMedia - return author - } - suspend fun getVoiceActorsDetails(author: Author): Author { - fun query(page: Int = 0) = """ { - Staff(id:${author.id}) { - id characters(page: $page,sort:FAVOURITES_DESC) { pageInfo{ hasNextPage @@ -1480,28 +1439,48 @@ Page(page:$page,perPage:50) { large medium } - } } } }""".replace("\n", " ").replace(""" """, "") var hasNextPage = true + val yearMedia = mutableMapOf>() var page = 0 val characters = arrayListOf() while (hasNextPage) { page++ - hasNextPage = executeQuery( - query(page), - force = true - )?.data?.author?.characters?.let { - it.nodes?.forEach { i -> - characters.add(Character(i.id, i.name?.userPreferred, i.image?.large, i.image?.medium, "", false)) + val query = executeQuery(query(page), force = true + )?.data?.author + hasNextPage = query?.staffMedia?.let { + it.edges?.forEach { i -> + i.node?.apply { + val status = status.toString() + val year = startDate?.year?.toString() ?: "TBA" + val title = if (status != "CANCELLED") year else status + if (!yearMedia.containsKey(title)) + yearMedia[title] = arrayListOf() + val media = Media(this) + media.relation = i.staffRole + yearMedia[title]?.add(media) + } } it.pageInfo?.hasNextPage == true } ?: false + query?.characters?.let { + it.nodes?.forEach { i -> + characters.add(Character(i.id, i.name?.userPreferred, i.image?.large, i.image?.medium, "", false)) + } + } + } + + if (yearMedia.contains("CANCELLED")) { + val a = yearMedia["CANCELLED"]!! + yearMedia.remove("CANCELLED") + yearMedia["CANCELLED"] = a } author.character = characters + author.yearMedia = yearMedia return author } suspend fun toggleFollow(id: Int): Query.ToggleFollow? { 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 ffac7b1f..1a83b7cc 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 @@ -334,7 +334,7 @@ class Query { @SerialName("volumesRead") var volumesRead: Int, ): java.io.Serializable - @Serializable + @Serializable data class UserFavourites( @SerialName("anime") val anime: UserMediaFavouritesCollection, diff --git a/app/src/main/java/ani/dantotsu/media/AuthorActivity.kt b/app/src/main/java/ani/dantotsu/media/AuthorActivity.kt index 6c5ee146..4b1c6902 100644 --- a/app/src/main/java/ani/dantotsu/media/AuthorActivity.kt +++ b/app/src/main/java/ani/dantotsu/media/AuthorActivity.kt @@ -12,6 +12,7 @@ import androidx.lifecycle.MutableLiveData import androidx.lifecycle.lifecycleScope import androidx.recyclerview.widget.ConcatAdapter import androidx.recyclerview.widget.GridLayoutManager +import androidx.recyclerview.widget.LinearLayoutManager import ani.dantotsu.EmptyAdapter import ani.dantotsu.R import ani.dantotsu.Refresh @@ -55,58 +56,51 @@ class AuthorActivity : AppCompatActivity() { binding.studioClose.setOnClickListener { onBackPressedDispatcher.onBackPressed() } - isVoiceArtist = intent.getBooleanExtra("isVoiceArtist", false) - if (isVoiceArtist) { - model.getVoiceActor().observe(this) { - if (it != null) { - author = it - loaded = true - binding.studioProgressBar.visibility = View.GONE - binding.studioRecycler.visibility = View.VISIBLE - binding.studioRecycler.adapter = CharacterAdapter(author!!.character ?: arrayListOf()) - binding.studioRecycler.layoutManager = GridLayoutManager( - this, - (screenWidth / 120f).toInt() - ) + model.getAuthor().observe(this) { + if (it != null) { + author = it + loaded = true + binding.studioProgressBar.visibility = View.GONE + binding.studioRecycler.visibility = View.VISIBLE + if (author!!.yearMedia.isNullOrEmpty()) { + binding.studioRecycler.visibility = View.GONE } - } - }else{ - model.getAuthor().observe(this) { - if (it != null) { - author = it - loaded = true - binding.studioProgressBar.visibility = View.GONE - binding.studioRecycler.visibility = View.VISIBLE + val titlePosition = arrayListOf() + val concatAdapter = ConcatAdapter() + val map = author!!.yearMedia ?: return@observe + val keys = map.keys.toTypedArray() + var pos = 0 - val titlePosition = arrayListOf() - val concatAdapter = ConcatAdapter() - val map = author!!.yearMedia ?: return@observe - val keys = map.keys.toTypedArray() - var pos = 0 - - val gridSize = (screenWidth / 124f).toInt() - val gridLayoutManager = GridLayoutManager(this, gridSize) - gridLayoutManager.spanSizeLookup = object : GridLayoutManager.SpanSizeLookup() { - override fun getSpanSize(position: Int): Int { - return when (position in titlePosition) { - true -> gridSize - else -> 1 - } + val gridSize = (screenWidth / 124f).toInt() + val gridLayoutManager = GridLayoutManager(this, gridSize) + gridLayoutManager.spanSizeLookup = object : GridLayoutManager.SpanSizeLookup() { + override fun getSpanSize(position: Int): Int { + return when (position in titlePosition) { + true -> gridSize + else -> 1 } } - for (i in keys.indices) { - val medias = map[keys[i]]!! - val empty = if (medias.size >= 4) medias.size % 4 else 4 - medias.size - titlePosition.add(pos) - pos += (empty + medias.size + 1) + } + for (i in keys.indices) { + val medias = map[keys[i]]!! + val empty = if (medias.size >= 4) medias.size % 4 else 4 - medias.size + titlePosition.add(pos) + pos += (empty + medias.size + 1) - concatAdapter.addAdapter(TitleAdapter("${keys[i]} (${medias.size})")) - concatAdapter.addAdapter(MediaAdaptor(0, medias, this, true)) - concatAdapter.addAdapter(EmptyAdapter(empty)) - } + concatAdapter.addAdapter(TitleAdapter("${keys[i]} (${medias.size})")) + concatAdapter.addAdapter(MediaAdaptor(0, medias, this, true)) + concatAdapter.addAdapter(EmptyAdapter(empty)) + } + binding.studioRecycler.adapter = concatAdapter + binding.studioRecycler.layoutManager = gridLayoutManager - binding.studioRecycler.adapter = concatAdapter - binding.studioRecycler.layoutManager = gridLayoutManager + binding.charactersRecycler.visibility = View.VISIBLE + binding.charactersText.visibility = View.VISIBLE + binding.charactersRecycler.adapter = CharacterAdapter(author!!.character ?: arrayListOf()) + binding.charactersRecycler.layoutManager = LinearLayoutManager(this, LinearLayoutManager.HORIZONTAL, false) + if (author!!.character.isNullOrEmpty()) { + binding.charactersRecycler.visibility = View.GONE + binding.charactersText.visibility = View.GONE } } } @@ -115,7 +109,7 @@ class AuthorActivity : AppCompatActivity() { if (it) { scope.launch { if (author != null) - withContext(Dispatchers.IO) { if (isVoiceArtist) model.loadVoiceActor(author!!) else model.loadAuthor(author!!)} + withContext(Dispatchers.IO) { model.loadAuthor(author!!)} live.postValue(false) } } diff --git a/app/src/main/java/ani/dantotsu/media/AuthorAdapter.kt b/app/src/main/java/ani/dantotsu/media/AuthorAdapter.kt index c7ac9645..174b4721 100644 --- a/app/src/main/java/ani/dantotsu/media/AuthorAdapter.kt +++ b/app/src/main/java/ani/dantotsu/media/AuthorAdapter.kt @@ -16,7 +16,6 @@ import java.io.Serializable class AuthorAdapter( private val authorList: ArrayList, - private val isVA: Boolean = false, ) : RecyclerView.Adapter() { override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): AuthorViewHolder { val binding = @@ -44,7 +43,7 @@ class AuthorAdapter( Intent( itemView.context, AuthorActivity::class.java - ).putExtra("author", author as Serializable).putExtra("isVoiceArtist", isVA), + ).putExtra("author", author as Serializable), ActivityOptionsCompat.makeSceneTransitionAnimation( itemView.context as Activity, Pair.create( diff --git a/app/src/main/java/ani/dantotsu/media/CharacterDetailsAdapter.kt b/app/src/main/java/ani/dantotsu/media/CharacterDetailsAdapter.kt index d3d5d811..9807c603 100644 --- a/app/src/main/java/ani/dantotsu/media/CharacterDetailsAdapter.kt +++ b/app/src/main/java/ani/dantotsu/media/CharacterDetailsAdapter.kt @@ -38,7 +38,7 @@ 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(), true) + binding.voiceActorRecycler.adapter = AuthorAdapter(character.voiceActor ?: arrayListOf()) binding.voiceActorRecycler.layoutManager = LinearLayoutManager( activity, LinearLayoutManager.HORIZONTAL, false ) diff --git a/app/src/main/java/ani/dantotsu/media/OtherDetailsViewModel.kt b/app/src/main/java/ani/dantotsu/media/OtherDetailsViewModel.kt index 394ddf0a..88ccc93f 100644 --- a/app/src/main/java/ani/dantotsu/media/OtherDetailsViewModel.kt +++ b/app/src/main/java/ani/dantotsu/media/OtherDetailsViewModel.kt @@ -26,11 +26,7 @@ class OtherDetailsViewModel : ViewModel() { suspend fun loadAuthor(m: Author) { if (author.value == null) author.postValue(Anilist.query.getAuthorDetails(m)) } - private val voiceActor: MutableLiveData = MutableLiveData(null) - fun getVoiceActor(): LiveData = voiceActor - suspend fun loadVoiceActor(m: Author) { - if (voiceActor.value == null) voiceActor.postValue(Anilist.query.getVoiceActorsDetails(m)) - } + private val calendar: MutableLiveData>> = MutableLiveData(null) fun getCalendar(): LiveData>> = calendar suspend fun loadCalendar() { diff --git a/app/src/main/res/layout/activity_author.xml b/app/src/main/res/layout/activity_author.xml index 76566c0f..e58ebc73 100644 --- a/app/src/main/res/layout/activity_author.xml +++ b/app/src/main/res/layout/activity_author.xml @@ -27,6 +27,61 @@ + + + + + + + + + + + + + - - Ban Voice Actors Permission is required to download + Media