From bf73bbb98b64dc27a791f6b4d1c1d5067affe9a0 Mon Sep 17 00:00:00 2001 From: rebelonion <87634197+rebelonion@users.noreply.github.com> Date: Wed, 3 Apr 2024 23:53:03 -0500 Subject: [PATCH] fix: offline page for new download system --- .../download/anime/OfflineAnimeFragment.kt | 37 +++++++++-------- .../download/manga/OfflineMangaFragment.kt | 41 ++++++++++--------- 2 files changed, 42 insertions(+), 36 deletions(-) diff --git a/app/src/main/java/ani/dantotsu/download/anime/OfflineAnimeFragment.kt b/app/src/main/java/ani/dantotsu/download/anime/OfflineAnimeFragment.kt index 81745773..54a1e562 100644 --- a/app/src/main/java/ani/dantotsu/download/anime/OfflineAnimeFragment.kt +++ b/app/src/main/java/ani/dantotsu/download/anime/OfflineAnimeFragment.kt @@ -44,6 +44,7 @@ import ani.dantotsu.settings.saving.PrefManager import ani.dantotsu.settings.saving.PrefName import ani.dantotsu.snackString import ani.dantotsu.util.Logger +import com.anggrayudi.storage.file.openInputStream import com.google.android.material.card.MaterialCardView import com.google.android.material.imageview.ShapeableImageView import com.google.android.material.textfield.TextInputLayout @@ -290,12 +291,12 @@ class OfflineAnimeFragment : Fragment(), OfflineAnimeSearchListener { private fun getMedia(downloadedType: DownloadedType): Media? { val type = downloadedType.type.asText() - val directory = File( - currContext()?.getExternalFilesDir(Environment.DIRECTORY_DOWNLOADS), - "Dantotsu/$type/${downloadedType.title}" - ) //load media.json and convert to media class with gson return try { + val directory = DownloadsManager.getSubDirectory( + context ?: currContext()!!, downloadedType.type, + false, downloadedType.title + ) val gson = GsonBuilder() .registerTypeAdapter(SChapter::class.java, InstanceCreator { SChapterImpl() // Provide an instance of SChapterImpl @@ -307,8 +308,12 @@ class OfflineAnimeFragment : Fragment(), OfflineAnimeSearchListener { SEpisodeImpl() // Provide an instance of SEpisodeImpl }) .create() - val media = File(directory, "media.json") - val mediaJson = media.readText() + val media = directory?.findFile("media.json") + ?: return null + val mediaJson = media.openInputStream(context?:currContext()!!)?.bufferedReader().use { + it?.readText() + } + ?: return null gson.fromJson(mediaJson, Media::class.java) } catch (e: Exception) { Logger.log("Error loading media.json: ${e.message}") @@ -320,20 +325,20 @@ class OfflineAnimeFragment : Fragment(), OfflineAnimeSearchListener { private fun loadOfflineAnimeModel(downloadedType: DownloadedType): OfflineAnimeModel { val type = downloadedType.type.asText() - val directory = File( - currContext()?.getExternalFilesDir(Environment.DIRECTORY_DOWNLOADS), - "Dantotsu/$type/${downloadedType.title}" - ) //load media.json and convert to media class with gson try { + val directory = DownloadsManager.getSubDirectory( + context ?: currContext()!!, downloadedType.type, + false, downloadedType.title + ) val mediaModel = getMedia(downloadedType)!! - val cover = File(directory, "cover.jpg") - val coverUri: Uri? = if (cover.exists()) { - Uri.fromFile(cover) + val cover = directory?.findFile("cover.jpg") + val coverUri: Uri? = if (cover?.exists() == true) { + cover.uri } else null - val banner = File(directory, "banner.jpg") - val bannerUri: Uri? = if (banner.exists()) { - Uri.fromFile(banner) + val banner = directory?.findFile("banner.jpg") + val bannerUri: Uri? = if (banner?.exists() == true) { + banner.uri } else null val title = mediaModel.mainName() val score = ((if (mediaModel.userScore == 0) (mediaModel.meanScore diff --git a/app/src/main/java/ani/dantotsu/download/manga/OfflineMangaFragment.kt b/app/src/main/java/ani/dantotsu/download/manga/OfflineMangaFragment.kt index 99250edf..152cd542 100644 --- a/app/src/main/java/ani/dantotsu/download/manga/OfflineMangaFragment.kt +++ b/app/src/main/java/ani/dantotsu/download/manga/OfflineMangaFragment.kt @@ -30,6 +30,7 @@ import ani.dantotsu.currActivity import ani.dantotsu.currContext import ani.dantotsu.download.DownloadedType import ani.dantotsu.download.DownloadsManager +import ani.dantotsu.download.DownloadsManager.Companion.getSubDirectory import ani.dantotsu.initActivity import ani.dantotsu.media.Media import ani.dantotsu.media.MediaDetailsActivity @@ -41,6 +42,7 @@ import ani.dantotsu.settings.saving.PrefManager import ani.dantotsu.settings.saving.PrefName import ani.dantotsu.snackString import ani.dantotsu.util.Logger +import com.anggrayudi.storage.file.openInputStream import com.google.android.material.card.MaterialCardView import com.google.android.material.imageview.ShapeableImageView import com.google.android.material.textfield.TextInputLayout @@ -291,19 +293,20 @@ class OfflineMangaFragment : Fragment(), OfflineMangaSearchListener { private fun getMedia(downloadedType: DownloadedType): Media? { val type = downloadedType.type.asText() - val directory = File( - currContext()?.getExternalFilesDir(Environment.DIRECTORY_DOWNLOADS), - "Dantotsu/$type/${downloadedType.title}" - ) //load media.json and convert to media class with gson return try { + val directory = getSubDirectory(context?:currContext()!!, downloadedType.type, + false, downloadedType.title) val gson = GsonBuilder() .registerTypeAdapter(SChapter::class.java, InstanceCreator { SChapterImpl() // Provide an instance of SChapterImpl }) .create() - val media = File(directory, "media.json") - val mediaJson = media.readText() + val media = directory?.findFile("media.json") + ?: return null + val mediaJson = media.openInputStream(context?:currContext()!!)?.bufferedReader().use { + it?.readText() + } gson.fromJson(mediaJson, Media::class.java) } catch (e: Exception) { Logger.log("Error loading media.json: ${e.message}") @@ -315,20 +318,18 @@ class OfflineMangaFragment : Fragment(), OfflineMangaSearchListener { private fun loadOfflineMangaModel(downloadedType: DownloadedType): OfflineMangaModel { val type = downloadedType.type.asText() - val directory = File( - currContext()?.getExternalFilesDir(Environment.DIRECTORY_DOWNLOADS), - "Dantotsu/$type/${downloadedType.title}" - ) //load media.json and convert to media class with gson try { + val directory = getSubDirectory(context?:currContext()!!, downloadedType.type, + false, downloadedType.title) val mediaModel = getMedia(downloadedType)!! - val cover = File(directory, "cover.jpg") - val coverUri: Uri? = if (cover.exists()) { - Uri.fromFile(cover) + val cover = directory?.findFile("cover.jpg") + val coverUri: Uri? = if (cover?.exists() == true) { + cover.uri } else null - val banner = File(directory, "banner.jpg") - val bannerUri: Uri? = if (banner.exists()) { - Uri.fromFile(banner) + val banner = directory?.findFile("banner.jpg") + val bannerUri: Uri? = if (banner?.exists() == true) { + banner.uri } else null val title = mediaModel.mainName() val score = ((if (mediaModel.userScore == 0) (mediaModel.meanScore @@ -336,14 +337,14 @@ class OfflineMangaFragment : Fragment(), OfflineMangaSearchListener { val isOngoing = mediaModel.status == currActivity()!!.getString(R.string.status_releasing) val isUserScored = mediaModel.userScore != 0 - val readchapter = (mediaModel.userProgress ?: "~").toString() - val totalchapter = "${mediaModel.manga?.totalChapters ?: "??"}" + val readChapter = (mediaModel.userProgress ?: "~").toString() + val totalChapter = "${mediaModel.manga?.totalChapters ?: "??"}" val chapters = " Chapters" return OfflineMangaModel( title, score, - totalchapter, - readchapter, + totalChapter, + readChapter, type, chapters, isOngoing,