fix offline crash

This commit is contained in:
rebelonion 2024-02-04 03:13:15 -06:00
parent 300f2c2fb0
commit d80b250650
3 changed files with 36 additions and 65 deletions

View file

@ -21,10 +21,7 @@ import android.widget.TextView
import androidx.annotation.OptIn import androidx.annotation.OptIn
import androidx.appcompat.app.AppCompatActivity import androidx.appcompat.app.AppCompatActivity
import androidx.cardview.widget.CardView import androidx.cardview.widget.CardView
import androidx.core.app.ActivityOptionsCompat
import androidx.core.content.ContextCompat import androidx.core.content.ContextCompat
import androidx.core.util.Pair
import androidx.core.view.ViewCompat
import androidx.core.view.marginBottom import androidx.core.view.marginBottom
import androidx.fragment.app.Fragment import androidx.fragment.app.Fragment
import androidx.media3.common.util.UnstableApi import androidx.media3.common.util.UnstableApi
@ -96,8 +93,8 @@ class OfflineAnimeFragment : Fragment(), OfflineAnimeSearchListener {
view.rootView.fitsSystemWindows = true view.rootView.fitsSystemWindows = true
} }
textInputLayout.boxBackgroundColor = (color and 0x00FFFFFF) or 0x28000000.toInt() textInputLayout.boxBackgroundColor = (color and 0x00FFFFFF) or 0x28000000
materialCardView.setCardBackgroundColor((color and 0x00FFFFFF) or 0x28000000.toInt()) materialCardView.setCardBackgroundColor((color and 0x00FFFFFF) or 0x28000000)
val searchView = view.findViewById<AutoCompleteTextView>(R.id.animeSearchBarText) val searchView = view.findViewById<AutoCompleteTextView>(R.id.animeSearchBarText)
searchView.addTextChangedListener(object : TextWatcher { searchView.addTextChangedListener(object : TextWatcher {
@ -181,14 +178,7 @@ class OfflineAnimeFragment : Fragment(), OfflineAnimeSearchListener {
requireActivity(), requireActivity(),
Intent(requireContext(), MediaDetailsActivity::class.java) Intent(requireContext(), MediaDetailsActivity::class.java)
.putExtra("download", true), .putExtra("download", true),
ActivityOptionsCompat.makeSceneTransitionAnimation( null
requireActivity(),
Pair.create(
gridView.getChildAt(position)
.findViewById<ImageView>(R.id.itemCompactImage),
ViewCompat.getTransitionName(requireActivity().findViewById(R.id.itemCompactImage))
),
).toBundle()
) )
} ?: run { } ?: run {
snackString("no media found") snackString("no media found")
@ -291,8 +281,8 @@ class OfflineAnimeFragment : Fragment(), OfflineAnimeSearchListener {
val animeTitles = downloadManager.animeDownloadedTypes.map { it.title }.distinct() val animeTitles = downloadManager.animeDownloadedTypes.map { it.title }.distinct()
val newAnimeDownloads = mutableListOf<OfflineAnimeModel>() val newAnimeDownloads = mutableListOf<OfflineAnimeModel>()
for (title in animeTitles) { for (title in animeTitles) {
val _downloads = downloadManager.animeDownloadedTypes.filter { it.title == title } val tDownloads = downloadManager.animeDownloadedTypes.filter { it.title == title }
val download = _downloads.first() val download = tDownloads.first()
val offlineAnimeModel = loadOfflineAnimeModel(download) val offlineAnimeModel = loadOfflineAnimeModel(download)
newAnimeDownloads += offlineAnimeModel newAnimeDownloads += offlineAnimeModel
} }
@ -300,12 +290,10 @@ class OfflineAnimeFragment : Fragment(), OfflineAnimeSearchListener {
} }
private fun getMedia(downloadedType: DownloadedType): Media? { private fun getMedia(downloadedType: DownloadedType): Media? {
val type = if (downloadedType.type == DownloadedType.Type.ANIME) { val type = when (downloadedType.type) {
"Anime" DownloadedType.Type.MANGA -> "Manga"
} else if (downloadedType.type == DownloadedType.Type.MANGA) { DownloadedType.Type.ANIME -> "Anime"
"Manga" else -> "Novel"
} else {
"Novel"
} }
val directory = File( val directory = File(
currContext()?.getExternalFilesDir(Environment.DIRECTORY_DOWNLOADS), currContext()?.getExternalFilesDir(Environment.DIRECTORY_DOWNLOADS),
@ -336,12 +324,10 @@ class OfflineAnimeFragment : Fragment(), OfflineAnimeSearchListener {
} }
private fun loadOfflineAnimeModel(downloadedType: DownloadedType): OfflineAnimeModel { private fun loadOfflineAnimeModel(downloadedType: DownloadedType): OfflineAnimeModel {
val type = if (downloadedType.type == DownloadedType.Type.MANGA) { val type = when (downloadedType.type) {
"Manga" DownloadedType.Type.MANGA -> "Manga"
} else if (downloadedType.type == DownloadedType.Type.ANIME) { DownloadedType.Type.ANIME -> "Anime"
"Anime" else -> "Novel"
} else {
"Novel"
} }
val directory = File( val directory = File(
currContext()?.getExternalFilesDir(Environment.DIRECTORY_DOWNLOADS), currContext()?.getExternalFilesDir(Environment.DIRECTORY_DOWNLOADS),
@ -349,8 +335,6 @@ class OfflineAnimeFragment : Fragment(), OfflineAnimeSearchListener {
) )
//load media.json and convert to media class with gson //load media.json and convert to media class with gson
try { try {
val media = File(directory, "media.json")
val mediaJson = media.readText()
val mediaModel = getMedia(downloadedType)!! val mediaModel = getMedia(downloadedType)!!
val cover = File(directory, "cover.jpg") val cover = File(directory, "cover.jpg")
val coverUri: Uri? = if (cover.exists()) { val coverUri: Uri? = if (cover.exists()) {
@ -399,8 +383,8 @@ class OfflineAnimeFragment : Fragment(), OfflineAnimeSearchListener {
"??", "??",
"movie", "movie",
"hmm", "hmm",
false, isOngoing = false,
false, isUserScored = false,
null, null,
null null
) )

View file

@ -19,10 +19,7 @@ import android.widget.ImageView
import android.widget.TextView import android.widget.TextView
import androidx.appcompat.app.AppCompatActivity import androidx.appcompat.app.AppCompatActivity
import androidx.cardview.widget.CardView import androidx.cardview.widget.CardView
import androidx.core.app.ActivityOptionsCompat
import androidx.core.content.ContextCompat import androidx.core.content.ContextCompat
import androidx.core.util.Pair
import androidx.core.view.ViewCompat
import androidx.core.view.marginBottom import androidx.core.view.marginBottom
import androidx.fragment.app.Fragment import androidx.fragment.app.Fragment
import ani.dantotsu.R import ani.dantotsu.R
@ -89,8 +86,8 @@ class OfflineMangaFragment : Fragment(), OfflineMangaSearchListener {
view.rootView.fitsSystemWindows = true view.rootView.fitsSystemWindows = true
} }
textInputLayout.boxBackgroundColor = (color and 0x00FFFFFF) or 0x28000000.toInt() textInputLayout.boxBackgroundColor = (color and 0x00FFFFFF) or 0x28000000
materialCardView.setCardBackgroundColor((color and 0x00FFFFFF) or 0x28000000.toInt()) materialCardView.setCardBackgroundColor((color and 0x00FFFFFF) or 0x28000000)
val searchView = view.findViewById<AutoCompleteTextView>(R.id.animeSearchBarText) val searchView = view.findViewById<AutoCompleteTextView>(R.id.animeSearchBarText)
searchView.addTextChangedListener(object : TextWatcher { searchView.addTextChangedListener(object : TextWatcher {
@ -165,19 +162,13 @@ class OfflineMangaFragment : Fragment(), OfflineMangaSearchListener {
downloadManager.mangaDownloadedTypes.firstOrNull { it.title == item.title } downloadManager.mangaDownloadedTypes.firstOrNull { it.title == item.title }
?: downloadManager.novelDownloadedTypes.firstOrNull { it.title == item.title } ?: downloadManager.novelDownloadedTypes.firstOrNull { it.title == item.title }
media?.let { media?.let {
ContextCompat.startActivity( ContextCompat.startActivity(
requireActivity(), requireActivity(),
Intent(requireContext(), MediaDetailsActivity::class.java) Intent(requireContext(), MediaDetailsActivity::class.java)
.putExtra("media", getMedia(it)) .putExtra("media", getMedia(it))
.putExtra("download", true), .putExtra("download", true),
ActivityOptionsCompat.makeSceneTransitionAnimation( null
requireActivity(),
Pair.create(
gridView.getChildAt(position)
.findViewById<ImageView>(R.id.itemCompactImage),
ViewCompat.getTransitionName(requireActivity().findViewById(R.id.itemCompactImage))
)
).toBundle()
) )
} ?: run { } ?: run {
snackString("no media found") snackString("no media found")
@ -278,8 +269,8 @@ class OfflineMangaFragment : Fragment(), OfflineMangaSearchListener {
val mangaTitles = downloadManager.mangaDownloadedTypes.map { it.title }.distinct() val mangaTitles = downloadManager.mangaDownloadedTypes.map { it.title }.distinct()
val newMangaDownloads = mutableListOf<OfflineMangaModel>() val newMangaDownloads = mutableListOf<OfflineMangaModel>()
for (title in mangaTitles) { for (title in mangaTitles) {
val _downloads = downloadManager.mangaDownloadedTypes.filter { it.title == title } val tDownloads = downloadManager.mangaDownloadedTypes.filter { it.title == title }
val download = _downloads.first() val download = tDownloads.first()
val offlineMangaModel = loadOfflineMangaModel(download) val offlineMangaModel = loadOfflineMangaModel(download)
newMangaDownloads += offlineMangaModel newMangaDownloads += offlineMangaModel
} }
@ -287,8 +278,8 @@ class OfflineMangaFragment : Fragment(), OfflineMangaSearchListener {
val novelTitles = downloadManager.novelDownloadedTypes.map { it.title }.distinct() val novelTitles = downloadManager.novelDownloadedTypes.map { it.title }.distinct()
val newNovelDownloads = mutableListOf<OfflineMangaModel>() val newNovelDownloads = mutableListOf<OfflineMangaModel>()
for (title in novelTitles) { for (title in novelTitles) {
val _downloads = downloadManager.novelDownloadedTypes.filter { it.title == title } val tDownloads = downloadManager.novelDownloadedTypes.filter { it.title == title }
val download = _downloads.first() val download = tDownloads.first()
val offlineMangaModel = loadOfflineMangaModel(download) val offlineMangaModel = loadOfflineMangaModel(download)
newNovelDownloads += offlineMangaModel newNovelDownloads += offlineMangaModel
} }
@ -297,12 +288,10 @@ class OfflineMangaFragment : Fragment(), OfflineMangaSearchListener {
} }
private fun getMedia(downloadedType: DownloadedType): Media? { private fun getMedia(downloadedType: DownloadedType): Media? {
val type = if (downloadedType.type == DownloadedType.Type.MANGA) { val type = when (downloadedType.type) {
"Manga" DownloadedType.Type.MANGA -> "Manga"
} else if (downloadedType.type == DownloadedType.Type.ANIME) { DownloadedType.Type.ANIME -> "Anime"
"Anime" else -> "Novel"
} else {
"Novel"
} }
val directory = File( val directory = File(
currContext()?.getExternalFilesDir(Environment.DIRECTORY_DOWNLOADS), currContext()?.getExternalFilesDir(Environment.DIRECTORY_DOWNLOADS),
@ -327,12 +316,10 @@ class OfflineMangaFragment : Fragment(), OfflineMangaSearchListener {
} }
private fun loadOfflineMangaModel(downloadedType: DownloadedType): OfflineMangaModel { private fun loadOfflineMangaModel(downloadedType: DownloadedType): OfflineMangaModel {
val type = if (downloadedType.type == DownloadedType.Type.MANGA) { val type = when (downloadedType.type) {
"Manga" DownloadedType.Type.MANGA -> "Manga"
} else if (downloadedType.type == DownloadedType.Type.ANIME) { DownloadedType.Type.ANIME -> "Anime"
"Anime" else -> "Novel"
} else {
"Novel"
} }
val directory = File( val directory = File(
currContext()?.getExternalFilesDir(Environment.DIRECTORY_DOWNLOADS), currContext()?.getExternalFilesDir(Environment.DIRECTORY_DOWNLOADS),
@ -340,8 +327,6 @@ class OfflineMangaFragment : Fragment(), OfflineMangaSearchListener {
) )
//load media.json and convert to media class with gson //load media.json and convert to media class with gson
try { try {
val media = File(directory, "media.json")
val mediaJson = media.readText()
val mediaModel = getMedia(downloadedType)!! val mediaModel = getMedia(downloadedType)!!
val cover = File(directory, "cover.jpg") val cover = File(directory, "cover.jpg")
val coverUri: Uri? = if (cover.exists()) { val coverUri: Uri? = if (cover.exists()) {
@ -383,8 +368,8 @@ class OfflineMangaFragment : Fragment(), OfflineMangaSearchListener {
"??", "??",
"movie", "movie",
"hmm", "hmm",
false, isOngoing = false,
false, isUserScored = false,
null, null,
null null
) )

View file

@ -184,8 +184,10 @@ open class MangaReadFragment : Fragment(), ScanlatorSelectionListener {
MangaChapterAdapter(style ?: PrefManager.getVal(PrefName.MangaDefaultView), media, this) MangaChapterAdapter(style ?: PrefManager.getVal(PrefName.MangaDefaultView), media, this)
for (download in downloadManager.mangaDownloadedTypes) { for (download in downloadManager.mangaDownloadedTypes) {
if (download.title == media.mainName()) {
chapterAdapter.stopDownload(download.chapter) chapterAdapter.stopDownload(download.chapter)
} }
}
binding.animeSourceRecycler.adapter = binding.animeSourceRecycler.adapter =
ConcatAdapter(headerAdapter, chapterAdapter) ConcatAdapter(headerAdapter, chapterAdapter)