From 63a5150cea066c40ad7b774387ed71345ceeabcf Mon Sep 17 00:00:00 2001
From: rebelonion <87634197+rebelonion@users.noreply.github.com>
Date: Fri, 29 Mar 2024 18:10:41 -0500
Subject: [PATCH 01/11] fix: home screen number spacing
---
app/src/main/res/layout/fragment_home.xml | 2 ++
1 file changed, 2 insertions(+)
diff --git a/app/src/main/res/layout/fragment_home.xml b/app/src/main/res/layout/fragment_home.xml
index c3caeff4..7fe73e42 100644
--- a/app/src/main/res/layout/fragment_home.xml
+++ b/app/src/main/res/layout/fragment_home.xml
@@ -94,6 +94,7 @@
android:id="@+id/homeUserEpisodesWatched"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
+ android:layout_marginStart="4dp"
android:fontFamily="@font/poppins_bold"
android:textColor="?attr/colorPrimaryVariant"
android:textSize="12sp" />
@@ -117,6 +118,7 @@
android:id="@+id/homeUserChaptersRead"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
+ android:layout_marginStart="4dp"
android:fontFamily="@font/poppins_bold"
android:textColor="?attr/colorPrimaryVariant"
android:textSize="12sp" />
From 51beac2d033d8114df31a443c8adb271c9760005 Mon Sep 17 00:00:00 2001
From: TwistedUmbrellaX <1173913+AbandonedCart@users.noreply.github.com>
Date: Fri, 29 Mar 2024 22:53:49 -0400
Subject: [PATCH 02/11] Revert (some of) "Just some quality of life garbage
(#304)" (#306)
This reverts (some of) commit c29147a6817e01c3d0284b50d4ff428735792681.
---
app/src/main/res/values/strings.xml | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 7da65ce2..bb7cac92 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -49,9 +49,9 @@
Popular Manga
Username
- Chapters Read
+ Chapters Read
Chapters\nRead
- Episodes Watched
+ Episodes Watched
Episodes\nWatched
Continue Reading
Continue Watching
From c0bccc027f30d5d46f0834b15782cd449da0301a Mon Sep 17 00:00:00 2001
From: aayush262
Date: Sat, 30 Mar 2024 15:43:37 +0530
Subject: [PATCH 03/11] feat: combined queries
---
.../connections/anilist/AnilistQueries.kt | 47 +++++------
.../connections/anilist/AnilistViewModel.kt | 84 +++++++++----------
.../dantotsu/connections/anilist/api/Data.kt | 4 +-
3 files changed, 62 insertions(+), 73 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 4492c414..510e5cd9 100644
--- a/app/src/main/java/ani/dantotsu/connections/anilist/AnilistQueries.kt
+++ b/app/src/main/java/ani/dantotsu/connections/anilist/AnilistQueries.kt
@@ -1022,43 +1022,53 @@ query (${"$"}page: Int = 1, ${"$"}id: Int, ${"$"}type: MediaType, ${"$"}isAdult:
}
return null
}
- private fun trendingMovie(): String{
- return """Page(page:1,perPage:50){pageInfo{hasNextPage total}media(sort:POPULARITY_DESC, type: ANIME, format: MOVIE){id idMal status chapters episodes nextAiringEpisode{episode}isAdult type meanScore isFavourite format bannerImage countryOfOrigin coverImage{large}title{english romaji userPreferred}mediaListEntry{progress private score(format:POINT_100)status}}}"""
+ private val onListAnime = (if(PrefManager.getVal(PrefName.IncludeAnimeList)) "" else "onList:false").replace("\"", "")
+ private val isAdult = (if (PrefManager.getVal(PrefName.AdultOnly)) "isAdult:true" else "").replace("\"", "")
+ private fun recentAnimeUpdates(): String{
+ return """Page(page:1,perPage:50){pageInfo{hasNextPage total}airingSchedules(airingAt_greater:0 airingAt_lesser:${System.currentTimeMillis() / 1000 - 10000} sort:TIME_DESC){episode airingAt media{id idMal status chapters episodes nextAiringEpisode{episode} isAdult type meanScore isFavourite format bannerImage countryOfOrigin coverImage{large} title{english romaji userPreferred} mediaListEntry{progress private score(format:POINT_100) status}}}}"""
+ }
+ private fun trendingMovies(): String{
+ return """Page(page:1,perPage:50){pageInfo{hasNextPage total}media(sort:POPULARITY_DESC, type: ANIME, format: MOVIE, $onListAnime, $isAdult){id idMal status chapters episodes nextAiringEpisode{episode}isAdult type meanScore isFavourite format bannerImage countryOfOrigin coverImage{large}title{english romaji userPreferred}mediaListEntry{progress private score(format:POINT_100)status}}}"""
}
private fun topRatedAnime(): String{
- return """Page(page:1,perPage:50){pageInfo{hasNextPage total}media(sort: SCORE_DESC, type: ANIME){id idMal status chapters episodes nextAiringEpisode{episode}isAdult type meanScore isFavourite format bannerImage countryOfOrigin coverImage{large}title{english romaji userPreferred}mediaListEntry{progress private score(format:POINT_100)status}}}"""
+ return """Page(page:1,perPage:50){pageInfo{hasNextPage total}media(sort: SCORE_DESC, type: ANIME, $onListAnime, $isAdult){id idMal status chapters episodes nextAiringEpisode{episode}isAdult type meanScore isFavourite format bannerImage countryOfOrigin coverImage{large}title{english romaji userPreferred}mediaListEntry{progress private score(format:POINT_100)status}}}"""
}
private fun mostFavAnime(): String{
- return """Page(page:1,perPage:50){pageInfo{hasNextPage total}media(sort:FAVOURITES_DESC,type: ANIME){id idMal status chapters episodes nextAiringEpisode{episode}isAdult type meanScore isFavourite format bannerImage countryOfOrigin coverImage{large}title{english romaji userPreferred}mediaListEntry{progress private score(format:POINT_100)status}}}"""
+ return """Page(page:1,perPage:50){pageInfo{hasNextPage total}media(sort:FAVOURITES_DESC,type: ANIME, $onListAnime, $isAdult){id idMal status chapters episodes nextAiringEpisode{episode}isAdult type meanScore isFavourite format bannerImage countryOfOrigin coverImage{large}title{english romaji userPreferred}mediaListEntry{progress private score(format:POINT_100)status}}}"""
}
suspend fun loadAnimeList(): Query.AnimeList?{
return executeQuery(
"""{
- trendingMovie:${trendingMovie()}
+ recentUpdates:${recentAnimeUpdates()}
+ trendingMovies:${trendingMovies()}
topRated:${topRatedAnime()}
mostFav:${mostFavAnime()}
}""".trimIndent(), force = true
)
}
-
+ private val onListManga = (if(PrefManager.getVal(PrefName.IncludeMangaList)) "" else "onList:false").replace("\"", "")
private fun trendingManga(): String{
- return """Page(page:1,perPage:50){pageInfo{hasNextPage total}media(sort:POPULARITY_DESC, type: MANGA,countryOfOrigin:JP){id idMal status chapters episodes nextAiringEpisode{episode}isAdult type meanScore isFavourite format bannerImage countryOfOrigin coverImage{large}title{english romaji userPreferred}mediaListEntry{progress private score(format:POINT_100)status}}}"""
+ return """Page(page:1,perPage:50){pageInfo{hasNextPage total}media(sort:POPULARITY_DESC, type: MANGA,countryOfOrigin:JP, $onListManga, $isAdult){id idMal status chapters episodes nextAiringEpisode{episode}isAdult type meanScore isFavourite format bannerImage countryOfOrigin coverImage{large}title{english romaji userPreferred}mediaListEntry{progress private score(format:POINT_100)status}}}"""
}
private fun trendingManhwa(): String{
- return """Page(page:1,perPage:50){pageInfo{hasNextPage total}media(sort:POPULARITY_DESC, type: MANGA, countryOfOrigin:KR){id idMal status chapters episodes nextAiringEpisode{episode}isAdult type meanScore isFavourite format bannerImage countryOfOrigin coverImage{large}title{english romaji userPreferred}mediaListEntry{progress private score(format:POINT_100)status}}}"""
+ return """Page(page:1,perPage:50){pageInfo{hasNextPage total}media(sort:POPULARITY_DESC, type: MANGA, countryOfOrigin:KR, $onListManga, $isAdult){id idMal status chapters episodes nextAiringEpisode{episode}isAdult type meanScore isFavourite format bannerImage countryOfOrigin coverImage{large}title{english romaji userPreferred}mediaListEntry{progress private score(format:POINT_100)status}}}"""
+ }
+ private fun trendingNovel(): String{
+ return """Page(page:1,perPage:50){pageInfo{hasNextPage total}media(sort:POPULARITY_DESC, type: MANGA, format: NOVEL, countryOfOrigin:JP, $onListManga, $isAdult){id idMal status chapters episodes nextAiringEpisode{episode}isAdult type meanScore isFavourite format bannerImage countryOfOrigin coverImage{large}title{english romaji userPreferred}mediaListEntry{progress private score(format:POINT_100)status}}}"""
}
private fun topRatedManga(): String{
- return """Page(page:1,perPage:50){pageInfo{hasNextPage total}media(sort: SCORE_DESC, type: MANGA){id idMal status chapters episodes nextAiringEpisode{episode}isAdult type meanScore isFavourite format bannerImage countryOfOrigin coverImage{large}title{english romaji userPreferred}mediaListEntry{progress private score(format:POINT_100)status}}}"""
+ return """Page(page:1,perPage:50){pageInfo{hasNextPage total}media(sort: SCORE_DESC, type: MANGA, $onListManga, $isAdult){id idMal status chapters episodes nextAiringEpisode{episode}isAdult type meanScore isFavourite format bannerImage countryOfOrigin coverImage{large}title{english romaji userPreferred}mediaListEntry{progress private score(format:POINT_100)status}}}"""
}
private fun mostFavManga(): String{
- return """Page(page:1,perPage:50){pageInfo{hasNextPage total}media(sort:FAVOURITES_DESC,type: MANGA){id idMal status chapters episodes nextAiringEpisode{episode}isAdult type meanScore isFavourite format bannerImage countryOfOrigin coverImage{large}title{english romaji userPreferred}mediaListEntry{progress private score(format:POINT_100)status}}}"""
+ return """Page(page:1,perPage:50){pageInfo{hasNextPage total}media(sort:FAVOURITES_DESC,type: MANGA, $onListManga, $isAdult){id idMal status chapters episodes nextAiringEpisode{episode}isAdult type meanScore isFavourite format bannerImage countryOfOrigin coverImage{large}title{english romaji userPreferred}mediaListEntry{progress private score(format:POINT_100)status}}}"""
}
suspend fun loadMangaList(): Query.MangaList?{
return executeQuery(
"""{
trendingManga:${trendingManga()}
trendingManhwa:${trendingManhwa()}
+ trendingNovel:${trendingNovel()}
topRated:${topRatedManga()}
mostFav:${mostFavManga()}
}""".trimIndent(), force = true
@@ -1066,7 +1076,6 @@ query (${"$"}page: Int = 1, ${"$"}id: Int, ${"$"}type: MediaType, ${"$"}isAdult:
}
suspend fun recentlyUpdated(
- smaller: Boolean = true,
greater: Long = 0,
lesser: Long = System.currentTimeMillis() / 1000 - 10000
): MutableList? {
@@ -1116,21 +1125,6 @@ Page(page:$page,perPage:50) {
}""".replace("\n", " ").replace(""" """, "")
return executeQuery(query, force = true)?.data?.page
}
- if (smaller) {
- val response = execute()?.airingSchedules ?: return null
- val idArr = mutableListOf()
- val listOnly: Boolean = PrefManager.getVal(PrefName.RecentlyListOnly)
- return response.mapNotNull { i ->
- i.media?.let {
- if (!idArr.contains(it.id))
- if (!listOnly && (it.countryOfOrigin == "JP" && (if (!Anilist.adult) it.isAdult == false else true)) || (listOnly && it.mediaListEntry != null)) {
- idArr.add(it.id)
- Media(it)
- } else null
- else null
- }
- }.toMutableList()
- } else {
var i = 1
val list = mutableListOf()
var res: Page? = null
@@ -1150,7 +1144,6 @@ Page(page:$page,perPage:50) {
i++
}
return list.reversed().toMutableList()
- }
}
suspend fun getCharacterDetails(character: Character): Character {
diff --git a/app/src/main/java/ani/dantotsu/connections/anilist/AnilistViewModel.kt b/app/src/main/java/ani/dantotsu/connections/anilist/AnilistViewModel.kt
index 76689047..220f2f18 100644
--- a/app/src/main/java/ani/dantotsu/connections/anilist/AnilistViewModel.kt
+++ b/app/src/main/java/ani/dantotsu/connections/anilist/AnilistViewModel.kt
@@ -149,11 +149,6 @@ class AnilistAnimeViewModel : ViewModel() {
)
}
- private val updated: MutableLiveData> =
- MutableLiveData>(null)
-
- fun getUpdated(): LiveData> = updated
- suspend fun loadUpdated() = updated.postValue(Anilist.query.recentlyUpdated())
private val animePopular = MutableLiveData(null)
@@ -193,29 +188,41 @@ class AnilistAnimeViewModel : ViewModel() {
)
var loaded: Boolean = false
+ private val updated: MutableLiveData> =
+ MutableLiveData>(null)
+ fun getUpdated(): LiveData> = updated
private val popularMovies: MutableLiveData> =
MutableLiveData>(null)
fun getMovies(): LiveData> = popularMovies
- private val topRated: MutableLiveData> =
+ private val topRatedAnime: MutableLiveData> =
MutableLiveData>(null)
- fun getTopRated(): LiveData> = topRated
+ fun getTopRated(): LiveData> = topRatedAnime
- private val mostFav: MutableLiveData> =
+ private val mostFavAnime: MutableLiveData> =
MutableLiveData>(null)
- fun getMostFav(): LiveData> = mostFav
+ fun getMostFav(): LiveData> = mostFavAnime
suspend fun loadAll() {
- val response = Anilist.query.loadAnimeList()
+ val res = Anilist.query.loadAnimeList()?.data
- val trendingMovie = response?.data?.trendingMovie?.media?.map { Media(it) }?.toMutableList()
- popularMovies.postValue(trendingMovie ?: arrayListOf())
+ val listOnly: Boolean = PrefManager.getVal(PrefName.RecentlyListOnly)
- val topRatedList = response?.data?.topRated?.media?.map { Media(it) }?.toMutableList()
- topRated.postValue(topRatedList ?: arrayListOf())
+ res?.apply{
+ updated.postValue(recentUpdates?.airingSchedules?.mapNotNull {i ->
+ i.media?.let {
+ if (!listOnly && (it.countryOfOrigin == "JP" && (if (!Anilist.adult) it.isAdult == false else true)) || (listOnly && it.mediaListEntry != null)){
+ Media(it)
+ }else{
+ null
+ }
+ }
+ }?.toMutableList() ?: arrayListOf())
+ popularMovies.postValue(trendingMovies?.media?.map { Media(it) }?.toMutableList() ?: arrayListOf())
+ topRatedAnime.postValue(topRated?.media?.map { Media(it) }?.toMutableList() ?: arrayListOf())
+ mostFavAnime.postValue(mostFav?.media?.map { Media(it) }?.toMutableList() ?: arrayListOf())
+ }
- val mostFavList = response?.data?.mostFav?.media?.map { Media(it) }?.toMutableList()
- mostFav.postValue(mostFavList ?: arrayListOf())
}
}
@@ -238,19 +245,6 @@ class AnilistMangaViewModel : ViewModel() {
)?.results
)
- private val updated: MutableLiveData> =
- MutableLiveData>(null)
-
- fun getTrendingNovel(): LiveData> = updated
- suspend fun loadTrendingNovel() =
- updated.postValue(
- Anilist.query.search(
- type,
- perPage = 10,
- sort = Anilist.sortBy[2],
- format = "NOVEL"
- )?.results
- )
private val mangaPopular = MutableLiveData(null)
fun getPopular(): LiveData = mangaPopular
@@ -302,27 +296,27 @@ class AnilistMangaViewModel : ViewModel() {
MutableLiveData>(null)
fun getPopularManhwa(): LiveData> = popularManhwa
- private val topRated: MutableLiveData> =
+ private val popularNovel: MutableLiveData> =
MutableLiveData>(null)
- fun getTopRated(): LiveData> = topRated
+ fun getPopularNovel(): LiveData> = popularNovel
- private val mostFav: MutableLiveData> =
+ private val topRatedManga: MutableLiveData> =
MutableLiveData>(null)
- fun getMostFav(): LiveData> = mostFav
+ fun getTopRated(): LiveData> = topRatedManga
+
+ private val mostFavManga: MutableLiveData> =
+ MutableLiveData>(null)
+ fun getMostFav(): LiveData> = mostFavManga
suspend fun loadAll() {
- val response = Anilist.query.loadMangaList()
+ val response = Anilist.query.loadMangaList()?.data
- val trendingManga = response?.data?.trendingManga?.media?.map { Media(it) }?.toMutableList()
- popularManga.postValue(trendingManga ?: arrayListOf())
-
- val trendingManhwa = response?.data?.trendingManhwa?.media?.map { Media(it) }?.toMutableList()
- popularManhwa.postValue(trendingManhwa ?: arrayListOf())
-
- val topRatedList = response?.data?.topRated?.media?.map { Media(it) }?.toMutableList()
- topRated.postValue(topRatedList ?: arrayListOf())
-
- val mostFavList = response?.data?.mostFav?.media?.map { Media(it) }?.toMutableList()
- mostFav.postValue(mostFavList ?: arrayListOf())
+ response?.apply {
+ popularManga.postValue(trendingManga?.media?.map { Media(it) }?.toMutableList() ?: arrayListOf())
+ popularManhwa.postValue(trendingManhwa?.media?.map { Media(it) }?.toMutableList() ?: arrayListOf())
+ popularNovel.postValue(trendingNovel?.media?.map { Media(it) }?.toMutableList() ?: arrayListOf())
+ topRatedManga.postValue(topRated?.media?.map { Media(it) }?.toMutableList() ?: arrayListOf())
+ mostFavManga.postValue(mostFav?.media?.map { Media(it) }?.toMutableList() ?: arrayListOf())
+ }
}
}
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 512974ce..7d71af32 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
@@ -159,7 +159,8 @@ class Query {
) {
@Serializable
data class Data(
- @SerialName("trendingMovie") val trendingMovie: ani.dantotsu.connections.anilist.api.Page?,
+ @SerialName("recentUpdates") val recentUpdates: ani.dantotsu.connections.anilist.api.Page?,
+ @SerialName("trendingMovies") val trendingMovies: ani.dantotsu.connections.anilist.api.Page?,
@SerialName("topRated") val topRated: ani.dantotsu.connections.anilist.api.Page?,
@SerialName("mostFav") val mostFav: ani.dantotsu.connections.anilist.api.Page?,
)
@@ -173,6 +174,7 @@ class Query {
data class Data(
@SerialName("trendingManga") val trendingManga: ani.dantotsu.connections.anilist.api.Page?,
@SerialName("trendingManhwa") val trendingManhwa: ani.dantotsu.connections.anilist.api.Page?,
+ @SerialName("trendingNovel") val trendingNovel: ani.dantotsu.connections.anilist.api.Page?,
@SerialName("topRated") val topRated: ani.dantotsu.connections.anilist.api.Page?,
@SerialName("mostFav") val mostFav: ani.dantotsu.connections.anilist.api.Page?,
)
From 99b3bbaaad8cb3b2ef44a0d898b85a9c1f6d636f Mon Sep 17 00:00:00 2001
From: aayush262
Date: Sat, 30 Mar 2024 15:44:29 +0530
Subject: [PATCH 04/11] feat: adult only media option
---
.../java/ani/dantotsu/home/AnimeFragment.kt | 1 -
.../ani/dantotsu/home/AnimePageAdapter.kt | 91 ++++++-------
.../java/ani/dantotsu/home/MangaFragment.kt | 3 +-
.../ani/dantotsu/home/MangaPageAdapter.kt | 124 ++++++++----------
.../dantotsu/media/OtherDetailsViewModel.kt | 2 +-
.../ani/dantotsu/settings/SettingsActivity.kt | 9 +-
.../dantotsu/settings/saving/Preferences.kt | 6 +-
app/src/main/res/layout/activity_profile.xml | 8 +-
.../res/layout/activity_settings_anime.xml | 3 +-
.../res/layout/activity_settings_common.xml | 18 +++
.../res/layout/activity_settings_manga.xml | 2 +-
app/src/main/res/layout/item_manga_page.xml | 4 +-
app/src/main/res/values/strings.xml | 1 +
13 files changed, 137 insertions(+), 135 deletions(-)
diff --git a/app/src/main/java/ani/dantotsu/home/AnimeFragment.kt b/app/src/main/java/ani/dantotsu/home/AnimeFragment.kt
index 3f530fde..0be7a3e2 100644
--- a/app/src/main/java/ani/dantotsu/home/AnimeFragment.kt
+++ b/app/src/main/java/ani/dantotsu/home/AnimeFragment.kt
@@ -278,7 +278,6 @@ class AnimeFragment : Fragment() {
}
model.loaded = true
model.loadTrending(1)
- model.loadUpdated()
model.loadAll()
model.loadPopular(
"ANIME", sort = Anilist.sortBy[1], onList = PrefManager.getVal(
diff --git a/app/src/main/java/ani/dantotsu/home/AnimePageAdapter.kt b/app/src/main/java/ani/dantotsu/home/AnimePageAdapter.kt
index f0cd245e..d6b8d7f6 100644
--- a/app/src/main/java/ani/dantotsu/home/AnimePageAdapter.kt
+++ b/app/src/main/java/ani/dantotsu/home/AnimePageAdapter.kt
@@ -195,70 +195,61 @@ class AnimePageAdapter : RecyclerView.Adapter
if (i == true) {
- model.getTrendingNovel().observe(viewLifecycleOwner) {
+ model.getPopularNovel().observe(viewLifecycleOwner) {
if (it != null) {
mangaPageAdapter.updateNovel(MediaAdaptor(0, it, requireActivity()))
}
@@ -257,7 +257,6 @@ class MangaFragment : Fragment() {
}
model.loaded = true
model.loadTrending()
- model.loadTrendingNovel()
model.loadAll()
model.loadPopular(
"MANGA", sort = Anilist.sortBy[1], onList = PrefManager.getVal(
diff --git a/app/src/main/java/ani/dantotsu/home/MangaPageAdapter.kt b/app/src/main/java/ani/dantotsu/home/MangaPageAdapter.kt
index 213c61d2..27f4c8ea 100644
--- a/app/src/main/java/ani/dantotsu/home/MangaPageAdapter.kt
+++ b/app/src/main/java/ani/dantotsu/home/MangaPageAdapter.kt
@@ -182,86 +182,72 @@ class MangaPageAdapter : RecyclerView.Adapter>> = calendar
suspend fun loadCalendar() {
val curr = System.currentTimeMillis() / 1000
- val res = Anilist.query.recentlyUpdated(false, curr - 86400, curr + (86400 * 6))
+ val res = Anilist.query.recentlyUpdated(curr - 86400, curr + (86400 * 6))
val df = DateFormat.getDateInstance(DateFormat.FULL)
val map = mutableMapOf>()
val idMap = mutableMapOf>()
diff --git a/app/src/main/java/ani/dantotsu/settings/SettingsActivity.kt b/app/src/main/java/ani/dantotsu/settings/SettingsActivity.kt
index 19d03161..7950d282 100644
--- a/app/src/main/java/ani/dantotsu/settings/SettingsActivity.kt
+++ b/app/src/main/java/ani/dantotsu/settings/SettingsActivity.kt
@@ -457,7 +457,9 @@ class SettingsActivity : AppCompatActivity(), SimpleDialog.OnDialogResultListene
settingsIncludeAnimeList.isChecked = PrefManager.getVal(PrefName.IncludeAnimeList)
settingsIncludeAnimeList.setOnCheckedChangeListener { _, isChecked ->
PrefManager.setVal(PrefName.IncludeAnimeList, isChecked)
+ restartApp(binding.root)
}
+
var previousEp: View = when (PrefManager.getVal(PrefName.AnimeDefaultView)) {
0 -> settingsEpList
1 -> settingsEpGrid
@@ -548,6 +550,7 @@ class SettingsActivity : AppCompatActivity(), SimpleDialog.OnDialogResultListene
settingsIncludeMangaList.isChecked = PrefManager.getVal(PrefName.IncludeMangaList)
settingsIncludeMangaList.setOnCheckedChangeListener { _, isChecked ->
PrefManager.setVal(PrefName.IncludeMangaList, isChecked)
+ restartApp(binding.root)
}
}
@@ -721,7 +724,11 @@ class SettingsActivity : AppCompatActivity(), SimpleDialog.OnDialogResultListene
settingsRecentlyListOnly.setOnCheckedChangeListener { _, isChecked ->
PrefManager.setVal(PrefName.RecentlyListOnly, isChecked)
}
-
+ settingsAdultAnimeOnly.isChecked = PrefManager.getVal(PrefName.AdultOnly)
+ settingsAdultAnimeOnly.setOnCheckedChangeListener { _, isChecked ->
+ PrefManager.setVal(PrefName.AdultOnly, isChecked)
+ restartApp(binding.root)
+ }
var previousStart: View = when (PrefManager.getVal(PrefName.DefaultStartUpTab)) {
0 -> uiSettingsAnime
1 -> uiSettingsHome
diff --git a/app/src/main/java/ani/dantotsu/settings/saving/Preferences.kt b/app/src/main/java/ani/dantotsu/settings/saving/Preferences.kt
index bb4b3f1e..aebc894a 100644
--- a/app/src/main/java/ani/dantotsu/settings/saving/Preferences.kt
+++ b/app/src/main/java/ani/dantotsu/settings/saving/Preferences.kt
@@ -40,6 +40,9 @@ enum class PrefName(val data: Pref) { //TODO: Split this into multiple files
LastAnilistNotificationId(Pref(Location.General, Int::class, 0)),
AnilistFilteredTypes(Pref(Location.General, Set::class, setOf())),
UseAlarmManager(Pref(Location.General, Boolean::class, false)),
+ IncludeAnimeList(Pref(Location.General, Boolean::class, true)),
+ IncludeMangaList(Pref(Location.General, Boolean::class, true)),
+ AdultOnly(Pref(Location.General, Boolean::class, false)),
//User Interface
UseOLED(Pref(Location.UI, Boolean::class, false)),
@@ -77,8 +80,7 @@ enum class PrefName(val data: Pref) { //TODO: Split this into multiple files
MangaListSortOrder(Pref(Location.UI, String::class, "score")),
CommentSortOrder(Pref(Location.UI, String::class, "newest")),
FollowerLayout(Pref(Location.UI, Int::class, 0)),
- IncludeAnimeList(Pref(Location.UI, Boolean::class, true)),
- IncludeMangaList(Pref(Location.UI, Boolean::class, true)),
+
//Player
DefaultSpeed(Pref(Location.Player, Int::class, 5)),
diff --git a/app/src/main/res/layout/activity_profile.xml b/app/src/main/res/layout/activity_profile.xml
index 87d79dcb..dcde0a9a 100644
--- a/app/src/main/res/layout/activity_profile.xml
+++ b/app/src/main/res/layout/activity_profile.xml
@@ -150,7 +150,7 @@
android:id="@+id/profileFollowerCountContainer"
android:layout_width="0dp"
android:layout_height="wrap_content"
- android:layout_marginVertical="8dp"
+ android:layout_marginVertical="4dp"
android:layout_weight="1"
android:gravity="center"
android:orientation="vertical">
@@ -180,7 +180,7 @@
android:id="@+id/profileFollowingCountContainer"
android:layout_width="0dp"
android:layout_height="wrap_content"
- android:layout_marginVertical="8dp"
+ android:layout_marginVertical="4dp"
android:layout_weight="1"
android:gravity="center"
android:orientation="vertical">
@@ -210,7 +210,7 @@
android:id="@+id/profileAnimeCountContainer"
android:layout_width="0dp"
android:layout_height="wrap_content"
- android:layout_marginVertical="8dp"
+ android:layout_marginVertical="4dp"
android:layout_weight="1"
android:gravity="center"
android:orientation="vertical">
@@ -240,7 +240,7 @@
android:id="@+id/profileMangaCountContainer"
android:layout_width="0dp"
android:layout_height="wrap_content"
- android:layout_marginVertical="8dp"
+ android:layout_marginVertical="4dp"
android:layout_weight="1"
android:gravity="center"
android:orientation="vertical">
diff --git a/app/src/main/res/layout/activity_settings_anime.xml b/app/src/main/res/layout/activity_settings_anime.xml
index a3193bba..49793f34 100644
--- a/app/src/main/res/layout/activity_settings_anime.xml
+++ b/app/src/main/res/layout/activity_settings_anime.xml
@@ -198,7 +198,6 @@
android:id="@+id/settingsIncludeAnimeList"
android:layout_width="match_parent"
android:layout_height="wrap_content"
- android:layout_marginBottom="16dp"
android:checked="true"
android:drawableStart="@drawable/ic_round_movie_filter_24"
android:drawablePadding="16dp"
@@ -212,5 +211,7 @@
app:drawableTint="?attr/colorPrimary"
app:showText="false"
app:thumbTint="@color/button_switch_track" />
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_settings_common.xml b/app/src/main/res/layout/activity_settings_common.xml
index acee97cd..3eab0449 100644
--- a/app/src/main/res/layout/activity_settings_common.xml
+++ b/app/src/main/res/layout/activity_settings_common.xml
@@ -2,6 +2,7 @@
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_settings_manga.xml b/app/src/main/res/layout/activity_settings_manga.xml
index 9b955c71..7bc6b84c 100644
--- a/app/src/main/res/layout/activity_settings_manga.xml
+++ b/app/src/main/res/layout/activity_settings_manga.xml
@@ -162,7 +162,7 @@
android:id="@+id/settingsIncludeMangaList"
android:layout_width="match_parent"
android:layout_height="wrap_content"
- android:checked="true"
+ android:checked="false"
android:drawableStart="@drawable/ic_round_movie_filter_24"
android:drawablePadding="16dp"
android:elegantTextHeight="true"
diff --git a/app/src/main/res/layout/item_manga_page.xml b/app/src/main/res/layout/item_manga_page.xml
index e711f136..a85d1208 100644
--- a/app/src/main/res/layout/item_manga_page.xml
+++ b/app/src/main/res/layout/item_manga_page.xml
@@ -327,8 +327,7 @@
android:layout_marginStart="24dp"
android:layout_marginEnd="24dp"
android:orientation="horizontal"
- android:visibility="invisible"
- tools:visibility="visible">
+ android:visibility="invisible">
Top rated
Most Favourite
Trending Manhwa
+ Adult only content
From 04f2034dd156ca35b51d940517f0d4802e061881 Mon Sep 17 00:00:00 2001
From: aayush262
Date: Sun, 31 Mar 2024 09:08:54 +0530
Subject: [PATCH 05/11] fix: duplicate media
---
.../connections/anilist/AnilistViewModel.kt | 13 +++++++------
1 file changed, 7 insertions(+), 6 deletions(-)
diff --git a/app/src/main/java/ani/dantotsu/connections/anilist/AnilistViewModel.kt b/app/src/main/java/ani/dantotsu/connections/anilist/AnilistViewModel.kt
index 220f2f18..acbc4f8c 100644
--- a/app/src/main/java/ani/dantotsu/connections/anilist/AnilistViewModel.kt
+++ b/app/src/main/java/ani/dantotsu/connections/anilist/AnilistViewModel.kt
@@ -209,20 +209,21 @@ class AnilistAnimeViewModel : ViewModel() {
val listOnly: Boolean = PrefManager.getVal(PrefName.RecentlyListOnly)
res?.apply{
+ val idArr = mutableListOf()
updated.postValue(recentUpdates?.airingSchedules?.mapNotNull {i ->
i.media?.let {
- if (!listOnly && (it.countryOfOrigin == "JP" && (if (!Anilist.adult) it.isAdult == false else true)) || (listOnly && it.mediaListEntry != null)){
- Media(it)
- }else{
- null
- }
+ if (!idArr.contains(it.id))
+ if (!listOnly && (it.countryOfOrigin == "JP" && (if (!Anilist.adult) it.isAdult == false else true)) || (listOnly && it.mediaListEntry != null)) {
+ idArr.add(it.id)
+ Media(it)
+ } else null
+ else null
}
}?.toMutableList() ?: arrayListOf())
popularMovies.postValue(trendingMovies?.media?.map { Media(it) }?.toMutableList() ?: arrayListOf())
topRatedAnime.postValue(topRated?.media?.map { Media(it) }?.toMutableList() ?: arrayListOf())
mostFavAnime.postValue(mostFav?.media?.map { Media(it) }?.toMutableList() ?: arrayListOf())
}
-
}
}
From f30e6b7809763c9ef603022fba440a7c6af3adc5 Mon Sep 17 00:00:00 2001
From: aayush262
Date: Sun, 31 Mar 2024 12:23:17 +0530
Subject: [PATCH 06/11] fix: banner animation
---
app/src/main/java/ani/dantotsu/home/HomeFragment.kt | 5 +++--
app/src/main/java/ani/dantotsu/media/MediaAdaptor.kt | 5 +++--
.../java/ani/dantotsu/profile/ProfileActivity.kt | 7 +++++--
app/src/main/res/layout/activity_profile.xml | 10 +++++++++-
app/src/main/res/layout/fragment_home.xml | 12 ++++++++++--
5 files changed, 30 insertions(+), 9 deletions(-)
diff --git a/app/src/main/java/ani/dantotsu/home/HomeFragment.kt b/app/src/main/java/ani/dantotsu/home/HomeFragment.kt
index c3a154a2..b9b6862a 100644
--- a/app/src/main/java/ani/dantotsu/home/HomeFragment.kt
+++ b/app/src/main/java/ani/dantotsu/home/HomeFragment.kt
@@ -80,8 +80,8 @@ class HomeFragment : Fragment() {
binding.homeUserEpisodesWatched.text = Anilist.episodesWatched.toString()
binding.homeUserChaptersRead.text = Anilist.chapterRead.toString()
binding.homeUserAvatar.loadImage(Anilist.avatar)
- if (!(PrefManager.getVal(PrefName.BannerAnimations) as Boolean)) binding.homeUserBg.pause()
- blurImage(binding.homeUserBg, Anilist.bg)
+ val bannerAnimations: Boolean = PrefManager.getVal(PrefName.BannerAnimations)
+ blurImage(if (bannerAnimations) binding.homeUserBg else binding.homeUserBgNoKen, Anilist.bg)
binding.homeUserDataProgressBar.visibility = View.GONE
binding.homeNotificationCount.isVisible = Anilist.unreadNotificationCount > 0
binding.homeNotificationCount.text = Anilist.unreadNotificationCount.toString()
@@ -137,6 +137,7 @@ class HomeFragment : Fragment() {
bottomMargin = navBarHeight
}
binding.homeUserBg.updateLayoutParams { height += statusBarHeight }
+ binding.homeUserBgNoKen.updateLayoutParams { height += statusBarHeight }
binding.homeTopContainer.updatePadding(top = statusBarHeight)
var reached = false
diff --git a/app/src/main/java/ani/dantotsu/media/MediaAdaptor.kt b/app/src/main/java/ani/dantotsu/media/MediaAdaptor.kt
index 78d264ee..8fa4e1fa 100644
--- a/app/src/main/java/ani/dantotsu/media/MediaAdaptor.kt
+++ b/app/src/main/java/ani/dantotsu/media/MediaAdaptor.kt
@@ -173,6 +173,7 @@ class MediaAdaptor(
val b = (holder as MediaPageViewHolder).binding
val media = mediaList?.get(position)
if (media != null) {
+
val bannerAnimations: Boolean = PrefManager.getVal(PrefName.BannerAnimations)
b.itemCompactImage.loadImage(media.cover)
if (bannerAnimations)
@@ -182,7 +183,7 @@ class MediaAdaptor(
AccelerateDecelerateInterpolator()
)
)
- blurImage(b.itemCompactBanner, media.banner ?: media.cover)
+ blurImage(if (bannerAnimations) b.itemCompactBanner else b.itemCompactBannerNoKen , media.banner ?: media.cover)
b.itemCompactOngoing.isVisible =
media.status == currActivity()!!.getString(R.string.status_releasing)
b.itemCompactTitle.text = media.userPreferredName
@@ -231,7 +232,7 @@ class MediaAdaptor(
AccelerateDecelerateInterpolator()
)
)
- blurImage(b.itemCompactBanner, media.banner ?: media.cover)
+ blurImage(if (bannerAnimations) b.itemCompactBanner else b.itemCompactBannerNoKen , media.banner ?: media.cover)
b.itemCompactOngoing.isVisible =
media.status == currActivity()!!.getString(R.string.status_releasing)
b.itemCompactTitle.text = media.userPreferredName
diff --git a/app/src/main/java/ani/dantotsu/profile/ProfileActivity.kt b/app/src/main/java/ani/dantotsu/profile/ProfileActivity.kt
index abbe26e5..90fd0278 100644
--- a/app/src/main/java/ani/dantotsu/profile/ProfileActivity.kt
+++ b/app/src/main/java/ani/dantotsu/profile/ProfileActivity.kt
@@ -6,6 +6,7 @@ import android.content.res.Configuration
import android.os.Bundle
import android.view.View
import android.view.ViewGroup
+import android.widget.ImageView
import android.widget.PopupMenu
import androidx.appcompat.app.AppCompatActivity
import androidx.core.content.ContextCompat
@@ -189,9 +190,11 @@ class ProfileActivity : AppCompatActivity(), AppBarLayout.OnOffsetChangedListene
val userLevelText = "${user.name} $userLevel"
binding.profileUserName.text = userLevelText
- if (!(PrefManager.getVal(PrefName.BannerAnimations) as Boolean)) binding.profileBannerImage.pause()
- blurImage(binding.profileBannerImage, user.bannerImage ?: user.avatar?.medium)
+ val bannerAnimations: Boolean = PrefManager.getVal(PrefName.BannerAnimations)
+
+ blurImage(if (bannerAnimations) binding.profileBannerImage else binding.profileBannerImageNoKen as ImageView, user.bannerImage ?: user.avatar?.medium)
binding.profileBannerImage.updateLayoutParams { height += statusBarHeight }
+ binding.profileBannerImageNoKen?.updateLayoutParams { height += statusBarHeight }
binding.profileBannerGradient.updateLayoutParams { height += statusBarHeight }
binding.profileMenuButton.updateLayoutParams { topMargin += statusBarHeight }
binding.profileButtonContainer.updateLayoutParams { topMargin += statusBarHeight }
diff --git a/app/src/main/res/layout/activity_profile.xml b/app/src/main/res/layout/activity_profile.xml
index dcde0a9a..10efe6e4 100644
--- a/app/src/main/res/layout/activity_profile.xml
+++ b/app/src/main/res/layout/activity_profile.xml
@@ -46,6 +46,14 @@
tools:ignore="ContentDescription"
tools:src="@tools:sample/backgrounds/scenic" />
+
+
+
+
+ android:padding="32dp">
Date: Sun, 31 Mar 2024 16:18:38 +0530
Subject: [PATCH 07/11] fix: adult only in recent too
---
.../connections/anilist/AnilistViewModel.kt | 14 +++++++++++---
1 file changed, 11 insertions(+), 3 deletions(-)
diff --git a/app/src/main/java/ani/dantotsu/connections/anilist/AnilistViewModel.kt b/app/src/main/java/ani/dantotsu/connections/anilist/AnilistViewModel.kt
index acbc4f8c..fd892c5f 100644
--- a/app/src/main/java/ani/dantotsu/connections/anilist/AnilistViewModel.kt
+++ b/app/src/main/java/ani/dantotsu/connections/anilist/AnilistViewModel.kt
@@ -5,6 +5,8 @@ import androidx.fragment.app.FragmentActivity
import androidx.lifecycle.LiveData
import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.ViewModel
+import androidx.webkit.internal.ApiFeature.P
+import androidx.webkit.internal.StartupApiFeature
import ani.dantotsu.BuildConfig
import ani.dantotsu.R
import ani.dantotsu.connections.discord.Discord
@@ -207,16 +209,22 @@ class AnilistAnimeViewModel : ViewModel() {
val res = Anilist.query.loadAnimeList()?.data
val listOnly: Boolean = PrefManager.getVal(PrefName.RecentlyListOnly)
-
+ val adultOnly: Boolean = PrefManager.getVal(PrefName.AdultOnly)
res?.apply{
val idArr = mutableListOf()
updated.postValue(recentUpdates?.airingSchedules?.mapNotNull {i ->
i.media?.let {
if (!idArr.contains(it.id))
- if (!listOnly && (it.countryOfOrigin == "JP" && (if (!Anilist.adult) it.isAdult == false else true)) || (listOnly && it.mediaListEntry != null)) {
+ if (!listOnly && it.countryOfOrigin == "JP" && Anilist.adult && adultOnly && it.isAdult == true) {
idArr.add(it.id)
Media(it)
- } else null
+ }else if (!listOnly && !adultOnly && (it.countryOfOrigin == "JP" && it.isAdult == false)){
+ idArr.add(it.id)
+ Media(it)
+ }else if ((listOnly && it.mediaListEntry != null)) {
+ idArr.add(it.id)
+ Media(it)
+ }else null
else null
}
}?.toMutableList() ?: arrayListOf())
From 76e11e5a3e58a2743f20683972c07e7fe54f6eec Mon Sep 17 00:00:00 2001
From: aayush262
Date: Sun, 31 Mar 2024 16:43:55 +0530
Subject: [PATCH 08/11] fix: removed unused banners
---
.../connections/anilist/AnilistQueries.kt | 5 ---
.../connections/anilist/AnilistViewModel.kt | 35 +------------------
.../dantotsu/connections/anilist/api/Data.kt | 5 +--
3 files changed, 2 insertions(+), 43 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 510e5cd9..8e83a9e5 100644
--- a/app/src/main/java/ani/dantotsu/connections/anilist/AnilistQueries.kt
+++ b/app/src/main/java/ani/dantotsu/connections/anilist/AnilistQueries.kt
@@ -1429,15 +1429,10 @@ Page(page:$page,perPage:50) {
"""{
favoriteAnime:${userFavMediaQuery(true, 1, id)}
favoriteManga:${userFavMediaQuery(false, 1, id)}
- animeMediaList:${bannerImageQuery("ANIME", id)}
- mangaMediaList:${bannerImageQuery("MANGA", id)}
}""".trimIndent(), force = true
)
}
- private fun bannerImageQuery(type: String, id: Int?): String {
- return """MediaListCollection(userId: ${id}, type: $type, chunk:1,perChunk:25, sort: [SCORE_DESC,UPDATED_TIME_DESC]) { lists { entries{ media { id bannerImage } } } }"""
- }
suspend fun getNotifications(id: Int, page: Int = 1, resetNotification: Boolean = true): NotificationResponse? {
val reset = if (resetNotification) "true" else "false"
diff --git a/app/src/main/java/ani/dantotsu/connections/anilist/AnilistViewModel.kt b/app/src/main/java/ani/dantotsu/connections/anilist/AnilistViewModel.kt
index fd892c5f..243e2792 100644
--- a/app/src/main/java/ani/dantotsu/connections/anilist/AnilistViewModel.kt
+++ b/app/src/main/java/ani/dantotsu/connections/anilist/AnilistViewModel.kt
@@ -60,45 +60,36 @@ class AnilistHomeViewModel : ViewModel() {
MutableLiveData>(null)
fun getAnimeContinue(): LiveData> = animeContinue
- suspend fun setAnimeContinue() = animeContinue.postValue(Anilist.query.continueMedia("ANIME"))
private val animeFav: MutableLiveData> =
MutableLiveData>(null)
fun getAnimeFav(): LiveData> = animeFav
- suspend fun setAnimeFav() = animeFav.postValue(Anilist.query.favMedia(true))
private val animePlanned: MutableLiveData> =
MutableLiveData>(null)
fun getAnimePlanned(): LiveData> = animePlanned
- suspend fun setAnimePlanned() =
- animePlanned.postValue(Anilist.query.continueMedia("ANIME", true))
private val mangaContinue: MutableLiveData> =
MutableLiveData>(null)
fun getMangaContinue(): LiveData> = mangaContinue
- suspend fun setMangaContinue() = mangaContinue.postValue(Anilist.query.continueMedia("MANGA"))
private val mangaFav: MutableLiveData> =
MutableLiveData>(null)
fun getMangaFav(): LiveData> = mangaFav
- suspend fun setMangaFav() = mangaFav.postValue(Anilist.query.favMedia(false))
private val mangaPlanned: MutableLiveData> =
MutableLiveData>(null)
fun getMangaPlanned(): LiveData> = mangaPlanned
- suspend fun setMangaPlanned() =
- mangaPlanned.postValue(Anilist.query.continueMedia("MANGA", true))
private val recommendation: MutableLiveData> =
MutableLiveData>(null)
fun getRecommendation(): LiveData> = recommendation
- suspend fun setRecommendation() = recommendation.postValue(Anilist.query.recommendations())
suspend fun initHomePage() {
val res = Anilist.query.initHomePage()
@@ -406,11 +397,6 @@ class ProfileViewModel : ViewModel() {
fun getAnimeFav(): LiveData> = animeFav
- private val listImages: MutableLiveData> =
- MutableLiveData>(arrayListOf())
-
- fun getListImages(): LiveData> = listImages
-
suspend fun setData(id: Int) {
val res = Anilist.query.initProfilePage(id)
val mangaList = res?.data?.favoriteManga?.favourites?.manga?.edges?.mapNotNull {
@@ -426,30 +412,11 @@ class ProfileViewModel : ViewModel() {
}
animeFav.postValue(ArrayList(animeList ?: arrayListOf()))
- val bannerImages = arrayListOf(null, null)
- val animeRandom = res?.data?.animeMediaList?.lists?.mapNotNull {
- it.entries?.mapNotNull { entry ->
- val imageUrl = entry.media?.bannerImage
- if (imageUrl != null && imageUrl != "null") imageUrl
- else null
- }
- }?.flatten()?.randomOrNull()
- bannerImages[0] = animeRandom
- val mangaRandom = res?.data?.mangaMediaList?.lists?.mapNotNull {
- it.entries?.mapNotNull { entry ->
- val imageUrl = entry.media?.bannerImage
- if (imageUrl != null && imageUrl != "null") imageUrl
- else null
- }
- }?.flatten()?.randomOrNull()
- bannerImages[1] = mangaRandom
- listImages.postValue(bannerImages)
-
}
fun refresh() {
mangaFav.postValue(mangaFav.value)
animeFav.postValue(animeFav.value)
- listImages.postValue(listImages.value)
+
}
}
\ No newline at end of file
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 7d71af32..20f35035 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
@@ -147,10 +147,7 @@ class Query {
@Serializable
data class Data(
@SerialName("favoriteAnime") val favoriteAnime: ani.dantotsu.connections.anilist.api.User?,
- @SerialName("favoriteManga") val favoriteManga: ani.dantotsu.connections.anilist.api.User?,
- @SerialName("animeMediaList") val animeMediaList: ani.dantotsu.connections.anilist.api.MediaListCollection?,
- @SerialName("mangaMediaList") val mangaMediaList: ani.dantotsu.connections.anilist.api.MediaListCollection?
- )
+ @SerialName("favoriteManga") val favoriteManga: ani.dantotsu.connections.anilist.api.User?)
}
@Serializable
data class AnimeList(
From 95b293953297349fcdcb50d1a7e84dc5ec688c4d Mon Sep 17 00:00:00 2001
From: aayush262
Date: Sun, 31 Mar 2024 16:44:27 +0530
Subject: [PATCH 09/11] fix: hide recent if its empty
---
.../ani/dantotsu/home/AnimePageAdapter.kt | 6 +-
app/src/main/res/layout/item_anime_page.xml | 75 ++++++++++---------
2 files changed, 46 insertions(+), 35 deletions(-)
diff --git a/app/src/main/java/ani/dantotsu/home/AnimePageAdapter.kt b/app/src/main/java/ani/dantotsu/home/AnimePageAdapter.kt
index d6b8d7f6..9861113a 100644
--- a/app/src/main/java/ani/dantotsu/home/AnimePageAdapter.kt
+++ b/app/src/main/java/ani/dantotsu/home/AnimePageAdapter.kt
@@ -203,8 +203,12 @@ class AnimePageAdapter : RecyclerView.Adapter
-
+ android:orientation="horizontal">
-
-
-
-
-
+ android:layout_height="wrap_content"
+ android:layout_marginStart="24dp"
+ android:fontFamily="@font/poppins_bold"
+ android:padding="8dp"
+ android:text="@string/updated"
+ android:textSize="16sp"
+ android:visibility="invisible"
+ tools:visibility="visible" />
-
+
+
+
+
+
+
+
+
Date: Sun, 31 Mar 2024 18:23:29 +0530
Subject: [PATCH 10/11] feat: Download subs
---
.../media/anime/SelectorDialogFragment.kt | 42 +++++++++++++++++++
app/src/main/res/layout/item_anime_page.xml | 2 +-
app/src/main/res/layout/item_url.xml | 14 ++++++-
3 files changed, 56 insertions(+), 2 deletions(-)
diff --git a/app/src/main/java/ani/dantotsu/media/anime/SelectorDialogFragment.kt b/app/src/main/java/ani/dantotsu/media/anime/SelectorDialogFragment.kt
index 292a9660..5ecd8af7 100644
--- a/app/src/main/java/ani/dantotsu/media/anime/SelectorDialogFragment.kt
+++ b/app/src/main/java/ani/dantotsu/media/anime/SelectorDialogFragment.kt
@@ -30,10 +30,13 @@ import ani.dantotsu.currActivity
import ani.dantotsu.databinding.BottomSheetSelectorBinding
import ani.dantotsu.databinding.ItemStreamBinding
import ani.dantotsu.databinding.ItemUrlBinding
+import ani.dantotsu.download.DownloadedType
import ani.dantotsu.download.video.Helper
import ani.dantotsu.hideSystemBars
import ani.dantotsu.media.Media
import ani.dantotsu.media.MediaDetailsViewModel
+import ani.dantotsu.media.MediaType
+import ani.dantotsu.media.SubtitleDownloader
import ani.dantotsu.navBarHeight
import ani.dantotsu.others.Download.download
import ani.dantotsu.parsers.Subtitle
@@ -376,6 +379,45 @@ class SelectorDialogFragment : BottomSheetDialogFragment() {
} else {
binding.urlDownload.visibility = View.GONE
}
+ val subtitles = extractor.subtitles
+ if (subtitles.isNotEmpty()) {
+ binding.urlSub.visibility = View.VISIBLE
+ } else {
+ binding.urlSub.visibility = View.GONE
+ }
+ binding.urlSub.setOnClickListener {
+ if (subtitles.isNotEmpty()) {
+ val subtitleNames = subtitles.map { it.language }
+ var subtitleToDownload: Subtitle? = null
+ val alertDialog = AlertDialog.Builder(context, R.style.MyPopup)
+ .setTitle("Download Subtitle")
+ .setSingleChoiceItems(
+ subtitleNames.toTypedArray(),
+ -1
+ ) { _, which ->
+ subtitleToDownload = subtitles[which]
+ }
+ .setPositiveButton("Download") { dialog, _ ->
+ scope.launch {
+ if (subtitleToDownload != null) {
+ SubtitleDownloader.downloadSubtitle(
+ requireContext(),
+ subtitleToDownload!!.file.url,
+ DownloadedType(media!!.mainName(), media!!.anime!!.episodes!![media!!.anime!!.selectedEpisode!!]!!.number, MediaType.ANIME)
+ )
+ }
+ }
+ dialog.dismiss()
+ }
+ .setNegativeButton("Cancel") { dialog, _ ->
+ dialog.dismiss()
+ }
+ .show()
+ alertDialog.window?.setDimAmount(0.8f)
+ } else {
+ snackString("No Subtitles Available")
+ }
+ }
binding.urlDownload.setSafeOnClickListener {
media!!.anime!!.episodes!![media!!.anime!!.selectedEpisode!!]!!.selectedExtractor =
extractor.server.name
diff --git a/app/src/main/res/layout/item_anime_page.xml b/app/src/main/res/layout/item_anime_page.xml
index f9d3c673..13cc155c 100644
--- a/app/src/main/res/layout/item_anime_page.xml
+++ b/app/src/main/res/layout/item_anime_page.xml
@@ -182,7 +182,7 @@
android:id="@+id/animeRecentlyContainer"
android:layout_width="match_parent"
android:layout_height="wrap_content"
- android:orientation="horizontal">
+ android:orientation="vertical">
-
+
Date: Mon, 1 Apr 2024 11:15:24 +0600
Subject: [PATCH 11/11] Add CommitHash to Version Name :prayge: (#307)
---
app/build.gradle | 6 +++++-
1 file changed, 5 insertions(+), 1 deletion(-)
diff --git a/app/build.gradle b/app/build.gradle
index b4ab706b..12fc9b90 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -6,6 +6,10 @@ plugins {
id 'com.google.devtools.ksp'
}
+def gitCommitHash = providers.exec {
+ commandLine("git", "rev-parse", "--verify", "--short", "HEAD")
+}.standardOutput.asText.get().trim()
+
android {
compileSdk 34
@@ -38,7 +42,7 @@ android {
buildTypes {
alpha {
applicationIdSuffix ".beta" // keep as beta by popular request
- versionNameSuffix "-alpha01"
+ versionNameSuffix "-alpha01-" + gitCommitHash
manifestPlaceholders.icon_placeholder = "@mipmap/ic_launcher_alpha"
manifestPlaceholders.icon_placeholder_round = "@mipmap/ic_launcher_alpha_round"
debuggable System.getenv("CI") == null