From dd994dcfab01577f5eac89bd07f75ca296bc4608 Mon Sep 17 00:00:00 2001 From: rebelonion <87634197+rebelonion@users.noreply.github.com> Date: Fri, 5 Apr 2024 20:02:36 -0500 Subject: [PATCH] fix: request storage permission for novels --- .../media/anime/AnimeWatchFragment.kt | 2 +- .../dantotsu/media/manga/MangaReadFragment.kt | 2 +- .../dantotsu/media/novel/NovelReadFragment.kt | 53 +++++++++++++------ .../extension/api/ExtensionGithubApi.kt | 2 +- app/src/main/res/values/strings.xml | 1 + 5 files changed, 40 insertions(+), 20 deletions(-) diff --git a/app/src/main/java/ani/dantotsu/media/anime/AnimeWatchFragment.kt b/app/src/main/java/ani/dantotsu/media/anime/AnimeWatchFragment.kt index 0954f1ff..5358f08c 100644 --- a/app/src/main/java/ani/dantotsu/media/anime/AnimeWatchFragment.kt +++ b/app/src/main/java/ani/dantotsu/media/anime/AnimeWatchFragment.kt @@ -434,7 +434,7 @@ class AnimeWatchFragment : Fragment() { isDownload = true ) } else { - snackString("Permission is required to download") + snackString(getString(R.string.download_permission_required)) } } } else { diff --git a/app/src/main/java/ani/dantotsu/media/manga/MangaReadFragment.kt b/app/src/main/java/ani/dantotsu/media/manga/MangaReadFragment.kt index 6fc64967..75110f4d 100644 --- a/app/src/main/java/ani/dantotsu/media/manga/MangaReadFragment.kt +++ b/app/src/main/java/ani/dantotsu/media/manga/MangaReadFragment.kt @@ -490,7 +490,7 @@ open class MangaReadFragment : Fragment(), ScanlatorSelectionListener { if (success) { continueDownload() } else { - snackString("Permission is required to download") + snackString(getString(R.string.download_permission_required)) } } } else { diff --git a/app/src/main/java/ani/dantotsu/media/novel/NovelReadFragment.kt b/app/src/main/java/ani/dantotsu/media/novel/NovelReadFragment.kt index c57f943f..eaa553ab 100644 --- a/app/src/main/java/ani/dantotsu/media/novel/NovelReadFragment.kt +++ b/app/src/main/java/ani/dantotsu/media/novel/NovelReadFragment.kt @@ -20,6 +20,7 @@ import androidx.fragment.app.activityViewModels import androidx.lifecycle.lifecycleScope import androidx.recyclerview.widget.ConcatAdapter import androidx.recyclerview.widget.LinearLayoutManager +import ani.dantotsu.R import ani.dantotsu.currContext import ani.dantotsu.databinding.FragmentAnimeWatchBinding import ani.dantotsu.download.DownloadedType @@ -27,12 +28,16 @@ import ani.dantotsu.download.DownloadsManager import ani.dantotsu.download.novel.NovelDownloaderService import ani.dantotsu.download.novel.NovelServiceDataSingleton import ani.dantotsu.media.Media +import ani.dantotsu.media.MediaDetailsActivity import ani.dantotsu.media.MediaDetailsViewModel import ani.dantotsu.media.MediaType import ani.dantotsu.media.novel.novelreader.NovelReaderActivity import ani.dantotsu.navBarHeight import ani.dantotsu.parsers.ShowResponse +import ani.dantotsu.snackString import ani.dantotsu.util.Logger +import ani.dantotsu.util.StoragePermissions +import ani.dantotsu.util.StoragePermissions.Companion.accessAlertDialog import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch @@ -62,26 +67,40 @@ class NovelReadFragment : Fragment(), override fun downloadTrigger(novelDownloadPackage: NovelDownloadPackage) { Logger.log("novel link: ${novelDownloadPackage.link}") - val downloadTask = NovelDownloaderService.DownloadTask( - title = media.mainName(), - chapter = novelDownloadPackage.novelName, - downloadLink = novelDownloadPackage.link, - originalLink = novelDownloadPackage.originalLink, - sourceMedia = media, - coverUrl = novelDownloadPackage.coverUrl, - retries = 2, - ) - NovelServiceDataSingleton.downloadQueue.offer(downloadTask) - CoroutineScope(Dispatchers.IO).launch { + activity?.let { + fun continueDownload() { + val downloadTask = NovelDownloaderService.DownloadTask( + title = media.mainName(), + chapter = novelDownloadPackage.novelName, + downloadLink = novelDownloadPackage.link, + originalLink = novelDownloadPackage.originalLink, + sourceMedia = media, + coverUrl = novelDownloadPackage.coverUrl, + retries = 2, + ) + NovelServiceDataSingleton.downloadQueue.offer(downloadTask) + CoroutineScope(Dispatchers.IO).launch { - if (!NovelServiceDataSingleton.isServiceRunning) { - val intent = Intent(context, NovelDownloaderService::class.java) - withContext(Dispatchers.Main) { - ContextCompat.startForegroundService(requireContext(), intent) + if (!NovelServiceDataSingleton.isServiceRunning) { + val intent = Intent(context, NovelDownloaderService::class.java) + withContext(Dispatchers.Main) { + ContextCompat.startForegroundService(requireContext(), intent) + } + NovelServiceDataSingleton.isServiceRunning = true + } } - NovelServiceDataSingleton.isServiceRunning = true } - + if (!StoragePermissions.hasDirAccess(it)) { + (it as MediaDetailsActivity).accessAlertDialog(it.launcher) { success -> + if (success) { + continueDownload() + } else { + snackString(getString(R.string.download_permission_required)) + } + } + } else { + continueDownload() + } } } diff --git a/app/src/main/java/eu/kanade/tachiyomi/extension/api/ExtensionGithubApi.kt b/app/src/main/java/eu/kanade/tachiyomi/extension/api/ExtensionGithubApi.kt index 5b630c10..601d38fb 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/extension/api/ExtensionGithubApi.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/extension/api/ExtensionGithubApi.kt @@ -65,7 +65,7 @@ internal class ExtensionGithubApi { val repos = PrefManager.getVal>(PrefName.MangaExtensionRepos).toMutableList() if (repos.isEmpty()) { - repos.add("https://raw.githubusercontent.com/keiyoushi/extensions/main") + repos.add("https://raw.githubusercontent.com/aniyomiorg/aniyomi-extensions/repo") PrefManager.setVal(PrefName.MangaExtensionRepos, repos.toSet()) } diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 205fdda0..a499946e 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -886,4 +886,5 @@ Non quae tempore quo provident laudantium qui illo dolor vel quia dolor et exerc Report Ban Voice Actors + Permission is required to download