fix: request storage permission for novels

This commit is contained in:
rebelonion 2024-04-05 20:02:36 -05:00
parent 594b71dc16
commit dd994dcfab
5 changed files with 40 additions and 20 deletions

View file

@ -434,7 +434,7 @@ class AnimeWatchFragment : Fragment() {
isDownload = true isDownload = true
) )
} else { } else {
snackString("Permission is required to download") snackString(getString(R.string.download_permission_required))
} }
} }
} else { } else {

View file

@ -490,7 +490,7 @@ open class MangaReadFragment : Fragment(), ScanlatorSelectionListener {
if (success) { if (success) {
continueDownload() continueDownload()
} else { } else {
snackString("Permission is required to download") snackString(getString(R.string.download_permission_required))
} }
} }
} else { } else {

View file

@ -20,6 +20,7 @@ import androidx.fragment.app.activityViewModels
import androidx.lifecycle.lifecycleScope import androidx.lifecycle.lifecycleScope
import androidx.recyclerview.widget.ConcatAdapter import androidx.recyclerview.widget.ConcatAdapter
import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.LinearLayoutManager
import ani.dantotsu.R
import ani.dantotsu.currContext import ani.dantotsu.currContext
import ani.dantotsu.databinding.FragmentAnimeWatchBinding import ani.dantotsu.databinding.FragmentAnimeWatchBinding
import ani.dantotsu.download.DownloadedType 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.NovelDownloaderService
import ani.dantotsu.download.novel.NovelServiceDataSingleton import ani.dantotsu.download.novel.NovelServiceDataSingleton
import ani.dantotsu.media.Media import ani.dantotsu.media.Media
import ani.dantotsu.media.MediaDetailsActivity
import ani.dantotsu.media.MediaDetailsViewModel import ani.dantotsu.media.MediaDetailsViewModel
import ani.dantotsu.media.MediaType import ani.dantotsu.media.MediaType
import ani.dantotsu.media.novel.novelreader.NovelReaderActivity import ani.dantotsu.media.novel.novelreader.NovelReaderActivity
import ani.dantotsu.navBarHeight import ani.dantotsu.navBarHeight
import ani.dantotsu.parsers.ShowResponse import ani.dantotsu.parsers.ShowResponse
import ani.dantotsu.snackString
import ani.dantotsu.util.Logger import ani.dantotsu.util.Logger
import ani.dantotsu.util.StoragePermissions
import ani.dantotsu.util.StoragePermissions.Companion.accessAlertDialog
import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
@ -62,26 +67,40 @@ class NovelReadFragment : Fragment(),
override fun downloadTrigger(novelDownloadPackage: NovelDownloadPackage) { override fun downloadTrigger(novelDownloadPackage: NovelDownloadPackage) {
Logger.log("novel link: ${novelDownloadPackage.link}") Logger.log("novel link: ${novelDownloadPackage.link}")
val downloadTask = NovelDownloaderService.DownloadTask( activity?.let {
title = media.mainName(), fun continueDownload() {
chapter = novelDownloadPackage.novelName, val downloadTask = NovelDownloaderService.DownloadTask(
downloadLink = novelDownloadPackage.link, title = media.mainName(),
originalLink = novelDownloadPackage.originalLink, chapter = novelDownloadPackage.novelName,
sourceMedia = media, downloadLink = novelDownloadPackage.link,
coverUrl = novelDownloadPackage.coverUrl, originalLink = novelDownloadPackage.originalLink,
retries = 2, sourceMedia = media,
) coverUrl = novelDownloadPackage.coverUrl,
NovelServiceDataSingleton.downloadQueue.offer(downloadTask) retries = 2,
CoroutineScope(Dispatchers.IO).launch { )
NovelServiceDataSingleton.downloadQueue.offer(downloadTask)
CoroutineScope(Dispatchers.IO).launch {
if (!NovelServiceDataSingleton.isServiceRunning) { if (!NovelServiceDataSingleton.isServiceRunning) {
val intent = Intent(context, NovelDownloaderService::class.java) val intent = Intent(context, NovelDownloaderService::class.java)
withContext(Dispatchers.Main) { withContext(Dispatchers.Main) {
ContextCompat.startForegroundService(requireContext(), intent) 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()
}
} }
} }

View file

@ -65,7 +65,7 @@ internal class ExtensionGithubApi {
val repos = val repos =
PrefManager.getVal<Set<String>>(PrefName.MangaExtensionRepos).toMutableList() PrefManager.getVal<Set<String>>(PrefName.MangaExtensionRepos).toMutableList()
if (repos.isEmpty()) { 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()) PrefManager.setVal(PrefName.MangaExtensionRepos, repos.toSet())
} }

View file

@ -886,4 +886,5 @@ Non quae tempore quo provident laudantium qui illo dolor vel quia dolor et exerc
<string name="report">Report</string> <string name="report">Report</string>
<string name="ban">Ban</string> <string name="ban">Ban</string>
<string name="voice_actors">Voice Actors</string> <string name="voice_actors">Voice Actors</string>
<string name="download_permission_required">Permission is required to download</string>
</resources> </resources>