feat: support for multiple audio/subtitle downloads

This commit is contained in:
rebelonion 2024-05-16 14:51:35 -05:00
parent fd8dd26435
commit f1d16ba16a
10 changed files with 137 additions and 117 deletions

View file

@ -51,6 +51,7 @@ class SubtitleDownloader {
}
//actually downloads lol
@Deprecated("handled externally")
suspend fun downloadSubtitle(
context: Context,
url: String,

View file

@ -515,7 +515,8 @@ class SelectorDialogFragment : BottomSheetDialogFragment() {
val selectedVideo =
if (extractor.videos.size > episode.selectedVideo) extractor.videos[episode.selectedVideo] else null
val subtitleNames = subtitles.map { it.language }
var subtitleToDownload: Subtitle? = null
var selectedSubtitles: MutableList<Pair<String, String>> = mutableListOf()
var selectedAudioTracks: MutableList<Pair<String, String>> = mutableListOf()
val activity = currActivity() ?: requireActivity()
selectedVideo?.file?.url?.let { url ->
if (url.startsWith("magnet:") || url.endsWith(".torrent")) {
@ -552,65 +553,16 @@ class SelectorDialogFragment : BottomSheetDialogFragment() {
}
}
}
if (subtitles.isNotEmpty()) {
val alertDialog = AlertDialog.Builder(context, R.style.MyPopup)
.setTitle(R.string.download_subtitle)
.setSingleChoiceItems(
subtitleNames.toTypedArray(),
-1
) { _, which ->
subtitleToDownload = subtitles[which]
}
.setPositiveButton(R.string.download) { _, _ ->
dialog?.dismiss()
if (selectedVideo != null) {
Helper.startAnimeDownloadService(
activity,
media!!.mainName(),
episode.number,
selectedVideo,
subtitleToDownload,
media,
episode.thumb?.url ?: media!!.banner ?: media!!.cover
)
broadcastDownloadStarted(episode.number, activity)
} else {
snackString(R.string.no_video_selected)
}
}
.setNegativeButton(R.string.skip) { dialog, _ ->
subtitleToDownload = null
if (selectedVideo != null) {
Helper.startAnimeDownloadService(
currActivity()!!,
media!!.mainName(),
episode.number,
selectedVideo,
subtitleToDownload,
media,
episode.thumb?.url ?: media!!.banner ?: media!!.cover
)
broadcastDownloadStarted(episode.number, activity)
} else {
snackString(R.string.no_video_selected)
}
dialog.dismiss()
}
.setNeutralButton(R.string.cancel) { dialog, _ ->
subtitleToDownload = null
dialog.dismiss()
}
.show()
alertDialog.window?.setDimAmount(0.8f)
} else {
val currContext = currContext() ?: requireContext()
fun go() {
if (selectedVideo != null) {
Helper.startAnimeDownloadService(
requireActivity(),
activity,
media!!.mainName(),
episode.number,
selectedVideo,
subtitleToDownload,
selectedSubtitles,
selectedAudioTracks,
media,
episode.thumb?.url ?: media!!.banner ?: media!!.cover
)
@ -619,6 +571,73 @@ class SelectorDialogFragment : BottomSheetDialogFragment() {
snackString(R.string.no_video_selected)
}
}
fun checkAudioTracks() {
val audioTracks = extractor.audioTracks.map { it.lang }
if (audioTracks.isNotEmpty()) {
val audioNamesArray = audioTracks.toTypedArray()
val checkedItems = BooleanArray(audioNamesArray.size) { false }
val alertDialog = AlertDialog.Builder(currContext, R.style.MyPopup)
.setTitle(R.string.download_audio_tracks)
.setMultiChoiceItems(audioNamesArray, checkedItems) { _, which, isChecked ->
val audioPair = Pair(extractor.audioTracks[which].url, extractor.audioTracks[which].lang)
if (isChecked) {
selectedAudioTracks.add(audioPair)
} else {
selectedAudioTracks.remove(audioPair)
}
}
.setPositiveButton(R.string.download) { _, _ ->
dialog?.dismiss()
go()
}
.setNegativeButton(R.string.skip) { dialog, _ ->
selectedAudioTracks = mutableListOf()
go()
dialog.dismiss()
}
.setNeutralButton(R.string.cancel) { dialog, _ ->
selectedAudioTracks = mutableListOf()
dialog.dismiss()
}
.show()
alertDialog.window?.setDimAmount(0.8f)
} else {
go()
}
}
if (subtitles.isNotEmpty()) {
val subtitleNamesArray = subtitleNames.toTypedArray()
val checkedItems = BooleanArray(subtitleNamesArray.size) { false }
val alertDialog = AlertDialog.Builder(currContext, R.style.MyPopup)
.setTitle(R.string.download_subtitle)
.setMultiChoiceItems(subtitleNamesArray, checkedItems) { _, which, isChecked ->
val subtitlePair = Pair(subtitles[which].file.url, subtitles[which].language)
if (isChecked) {
selectedSubtitles.add(subtitlePair)
} else {
selectedSubtitles.remove(subtitlePair)
}
}
.setPositiveButton(R.string.download) { _, _ ->
dialog?.dismiss()
checkAudioTracks()
}
.setNegativeButton(R.string.skip) { dialog, _ ->
selectedSubtitles = mutableListOf()
checkAudioTracks()
dialog.dismiss()
}
.setNeutralButton(R.string.cancel) { dialog, _ ->
selectedSubtitles = mutableListOf()
dialog.dismiss()
}
.show()
alertDialog.window?.setDimAmount(0.8f)
} else {
checkAudioTracks()
}
}
dismiss()
}