fix: manga opening
This commit is contained in:
parent
1bb5f4d0ab
commit
986d0fa4a8
11 changed files with 94 additions and 71 deletions
|
@ -60,7 +60,7 @@ class DownloadsManager(private val context: Context) {
|
|||
onFinished: () -> Unit
|
||||
) {
|
||||
removeDownloadCompat(context, downloadedType, toast)
|
||||
downloadsList.remove(downloadedType)
|
||||
downloadsList.removeAll { it.titleName == downloadedType.titleName && it.chapterName == downloadedType.chapterName }
|
||||
CoroutineScope(Dispatchers.IO).launch {
|
||||
removeDirectory(downloadedType, toast)
|
||||
withContext(Dispatchers.Main) {
|
||||
|
@ -234,7 +234,7 @@ class DownloadsManager(private val context: Context) {
|
|||
val directory =
|
||||
baseDirectory?.findFolder(downloadedType.titleName)
|
||||
?.findFolder(downloadedType.chapterName)
|
||||
downloadsList.remove(downloadedType)
|
||||
downloadsList.removeAll { it.titleName == downloadedType.titleName && it.chapterName == downloadedType.chapterName }
|
||||
// Check if the directory exists and delete it recursively
|
||||
if (directory?.exists() == true) {
|
||||
val deleted = directory.deleteRecursively(context, false)
|
||||
|
@ -401,10 +401,13 @@ data class DownloadedType(
|
|||
@Deprecated("use pTitle instead")
|
||||
private val title: String? = null,
|
||||
@Deprecated("use pChapter instead")
|
||||
private val chapter: String? = null
|
||||
private val chapter: String? = null,
|
||||
val scanlator: String = "Unknown"
|
||||
) : Serializable {
|
||||
val titleName: String
|
||||
get() = title ?: pTitle.findValidName()
|
||||
val chapterName: String
|
||||
get() = chapter ?: pChapter.findValidName()
|
||||
val uniqueName: String
|
||||
get() = "$chapterName-${scanlator}"
|
||||
}
|
||||
|
|
|
@ -243,7 +243,7 @@ class MangaDownloaderService : Service() {
|
|||
builder.setProgress(task.imageData.size, farthest, false)
|
||||
|
||||
broadcastDownloadProgress(
|
||||
task.chapter,
|
||||
task.uniqueName,
|
||||
farthest * 100 / task.imageData.size
|
||||
)
|
||||
if (notifi) {
|
||||
|
@ -270,17 +270,18 @@ class MangaDownloaderService : Service() {
|
|||
DownloadedType(
|
||||
task.title,
|
||||
task.chapter,
|
||||
MediaType.MANGA
|
||||
MediaType.MANGA,
|
||||
scanlator = task.scanlator,
|
||||
)
|
||||
)
|
||||
broadcastDownloadFinished(task.chapter)
|
||||
broadcastDownloadFinished(task.uniqueName)
|
||||
snackString("${task.title} - ${task.chapter} Download finished")
|
||||
}
|
||||
} catch (e: Exception) {
|
||||
Logger.log("Exception while downloading file: ${e.message}")
|
||||
snackString("Exception while downloading file: ${e.message}")
|
||||
Injekt.get<CrashlyticsInterface>().logException(e)
|
||||
broadcastDownloadFailed(task.chapter)
|
||||
broadcastDownloadFailed(task.uniqueName)
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -423,11 +424,15 @@ class MangaDownloaderService : Service() {
|
|||
data class DownloadTask(
|
||||
val title: String,
|
||||
val chapter: String,
|
||||
val scanlator: String,
|
||||
val imageData: List<ImageData>,
|
||||
val sourceMedia: Media? = null,
|
||||
val retries: Int = 2,
|
||||
val simultaneousDownloads: Int = 2,
|
||||
)
|
||||
) {
|
||||
val uniqueName: String
|
||||
get() = "$chapter-$scanlator"
|
||||
}
|
||||
|
||||
companion object {
|
||||
private const val NOTIFICATION_ID = 1103
|
||||
|
|
|
@ -5,7 +5,7 @@ import java.io.Serializable
|
|||
|
||||
data class Manga(
|
||||
var totalChapters: Int? = null,
|
||||
var selectedChapter: String? = null,
|
||||
var selectedChapter: MangaChapter? = null,
|
||||
var chapters: MutableMap<String, MangaChapter>? = null,
|
||||
var slug: String? = null,
|
||||
var author: Author? = null,
|
||||
|
|
|
@ -40,4 +40,6 @@ data class MangaChapter(
|
|||
private val dualPages = mutableListOf<Pair<MangaImage, MangaImage?>>()
|
||||
fun dualPages(): List<Pair<MangaImage, MangaImage?>> = dualPages
|
||||
|
||||
fun uniqueNumber(): String = "${number}-${scanlator ?: "Unknown"}"
|
||||
|
||||
}
|
||||
|
|
|
@ -63,7 +63,7 @@ class MangaChapterAdapter(
|
|||
init {
|
||||
itemView.setOnClickListener {
|
||||
if (0 <= bindingAdapterPosition && bindingAdapterPosition < arr.size)
|
||||
fragment.onMangaChapterClick(arr[bindingAdapterPosition].number)
|
||||
fragment.onMangaChapterClick(arr[bindingAdapterPosition])
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -74,7 +74,7 @@ class MangaChapterAdapter(
|
|||
fun startDownload(chapterNumber: String) {
|
||||
activeDownloads.add(chapterNumber)
|
||||
// Find the position of the chapter and notify only that item
|
||||
val position = arr.indexOfFirst { it.number == chapterNumber }
|
||||
val position = arr.indexOfFirst { it.uniqueNumber() == chapterNumber }
|
||||
if (position != -1) {
|
||||
notifyItemChanged(position)
|
||||
}
|
||||
|
@ -84,17 +84,17 @@ class MangaChapterAdapter(
|
|||
activeDownloads.remove(chapterNumber)
|
||||
downloadedChapters.add(chapterNumber)
|
||||
// Find the position of the chapter and notify only that item
|
||||
val position = arr.indexOfFirst { it.number == chapterNumber }
|
||||
val position = arr.indexOfFirst { it.uniqueNumber() == chapterNumber }
|
||||
if (position != -1) {
|
||||
arr[position].progress = "Downloaded"
|
||||
notifyItemChanged(position)
|
||||
}
|
||||
}
|
||||
|
||||
fun deleteDownload(chapterNumber: String) {
|
||||
downloadedChapters.remove(chapterNumber)
|
||||
fun deleteDownload(chapterNumber: MangaChapter) {
|
||||
downloadedChapters.remove(chapterNumber.uniqueNumber())
|
||||
// Find the position of the chapter and notify only that item
|
||||
val position = arr.indexOfFirst { it.number == chapterNumber }
|
||||
val position = arr.indexOfFirst { it.uniqueNumber() == chapterNumber.uniqueNumber() }
|
||||
if (position != -1) {
|
||||
arr[position].progress = ""
|
||||
notifyItemChanged(position)
|
||||
|
@ -105,7 +105,7 @@ class MangaChapterAdapter(
|
|||
activeDownloads.remove(chapterNumber)
|
||||
downloadedChapters.remove(chapterNumber)
|
||||
// Find the position of the chapter and notify only that item
|
||||
val position = arr.indexOfFirst { it.number == chapterNumber }
|
||||
val position = arr.indexOfFirst { it.uniqueNumber() == chapterNumber }
|
||||
if (position != -1) {
|
||||
arr[position].progress = ""
|
||||
notifyItemChanged(position)
|
||||
|
@ -114,7 +114,7 @@ class MangaChapterAdapter(
|
|||
|
||||
fun updateDownloadProgress(chapterNumber: String, progress: Int) {
|
||||
// Find the position of the chapter and notify only that item
|
||||
val position = arr.indexOfFirst { it.number == chapterNumber }
|
||||
val position = arr.indexOfFirst { it.uniqueNumber() == chapterNumber }
|
||||
if (position != -1) {
|
||||
arr[position].progress = "Downloading: ${progress}%"
|
||||
|
||||
|
@ -127,7 +127,8 @@ class MangaChapterAdapter(
|
|||
if (position < 0 || position >= arr.size) return
|
||||
for (i in 0..<n) {
|
||||
if (position + i < arr.size) {
|
||||
val chapterNumber = arr[position + i].number
|
||||
val chapter = arr[position + i]
|
||||
val chapterNumber = chapter.uniqueNumber()
|
||||
if (activeDownloads.contains(chapterNumber)) {
|
||||
//do nothing
|
||||
continue
|
||||
|
@ -135,8 +136,8 @@ class MangaChapterAdapter(
|
|||
//do nothing
|
||||
continue
|
||||
} else {
|
||||
fragment.onMangaChapterDownloadClick(chapterNumber)
|
||||
startDownload(chapterNumber)
|
||||
fragment.onMangaChapterDownloadClick(chapter)
|
||||
startDownload(chapter.uniqueNumber())
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -201,28 +202,29 @@ class MangaChapterAdapter(
|
|||
init {
|
||||
itemView.setOnClickListener {
|
||||
if (0 <= bindingAdapterPosition && bindingAdapterPosition < arr.size)
|
||||
fragment.onMangaChapterClick(arr[bindingAdapterPosition].number)
|
||||
fragment.onMangaChapterClick(arr[bindingAdapterPosition])
|
||||
}
|
||||
binding.itemDownload.setOnClickListener {
|
||||
if (0 <= bindingAdapterPosition && bindingAdapterPosition < arr.size) {
|
||||
val chapterNumber = arr[bindingAdapterPosition].number
|
||||
val chapter = arr[bindingAdapterPosition]
|
||||
val chapterNumber = chapter.uniqueNumber()
|
||||
if (activeDownloads.contains(chapterNumber)) {
|
||||
fragment.onMangaChapterStopDownloadClick(chapterNumber)
|
||||
fragment.onMangaChapterStopDownloadClick(chapter)
|
||||
return@setOnClickListener
|
||||
} else if (downloadedChapters.contains(chapterNumber)) {
|
||||
it.context.customAlertDialog().apply {
|
||||
setTitle("Delete Chapter")
|
||||
setMessage("Are you sure you want to delete ${chapterNumber}?")
|
||||
setPosButton(R.string.delete) {
|
||||
fragment.onMangaChapterRemoveDownloadClick(chapterNumber)
|
||||
fragment.onMangaChapterRemoveDownloadClick(chapter)
|
||||
}
|
||||
setNegButton(R.string.cancel)
|
||||
show()
|
||||
}
|
||||
return@setOnClickListener
|
||||
} else {
|
||||
fragment.onMangaChapterDownloadClick(chapterNumber)
|
||||
startDownload(chapterNumber)
|
||||
fragment.onMangaChapterDownloadClick(chapter)
|
||||
startDownload(chapter.uniqueNumber())
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -277,7 +279,7 @@ class MangaChapterAdapter(
|
|||
is ChapterListViewHolder -> {
|
||||
val binding = holder.binding
|
||||
val ep = arr[position]
|
||||
holder.bind(ep.number, ep.progress)
|
||||
holder.bind(ep.uniqueNumber(), ep.progress)
|
||||
setAnimation(fragment.requireContext(), holder.binding.root)
|
||||
binding.itemChapterNumber.text = ep.number
|
||||
|
||||
|
|
|
@ -422,12 +422,12 @@ class MangaReadAdapter(
|
|||
val startChapter = MediaNameAdapter.findChapterNumber(names[limit * (position)])
|
||||
val endChapter = MediaNameAdapter.findChapterNumber(names[last - 1])
|
||||
val startChapterString = if (startChapter != null) {
|
||||
"Ch.$startChapter"
|
||||
"Ch.%.1f".format(startChapter)
|
||||
} else {
|
||||
names[limit * (position)]
|
||||
}
|
||||
val endChapterString = if (endChapter != null) {
|
||||
"Ch.$endChapter"
|
||||
"Ch.%.1f".format(endChapter)
|
||||
} else {
|
||||
names[last - 1]
|
||||
}
|
||||
|
@ -472,7 +472,6 @@ class MangaReadAdapter(
|
|||
val binding = _binding
|
||||
if (binding != null) {
|
||||
if (media.manga?.chapters != null) {
|
||||
val chapters = media.manga.chapters!!.keys.toTypedArray()
|
||||
val anilistEp = (media.userProgress ?: 0).plus(1)
|
||||
val appEp = PrefManager.getNullableCustomVal(
|
||||
"${media.id}_current_chp",
|
||||
|
@ -480,37 +479,39 @@ class MangaReadAdapter(
|
|||
String::class.java
|
||||
)
|
||||
?.toIntOrNull() ?: 1
|
||||
var continueEp = (if (anilistEp > appEp) anilistEp else appEp).toString()
|
||||
val filteredChapters = chapters.filter { chapterKey ->
|
||||
val chapter = media.manga.chapters!![chapterKey]!!
|
||||
chapter.scanlator !in hiddenScanlators
|
||||
val continueNumber = (if (anilistEp > appEp) anilistEp else appEp).toString()
|
||||
val filteredChapters = media.manga.chapters!!.filter { chapter ->
|
||||
if (mangaReadSources[media.selected!!.sourceIndex] is OfflineMangaParser) {
|
||||
true
|
||||
} else {
|
||||
chapter.value.scanlator !in hiddenScanlators
|
||||
}
|
||||
}
|
||||
val formattedChapters = filteredChapters.map {
|
||||
MediaNameAdapter.findChapterNumber(it)?.toInt()?.toString()
|
||||
MediaNameAdapter.findChapterNumber(it.value.number)?.toInt()?.toString() to it.key
|
||||
}
|
||||
if (formattedChapters.contains(continueEp)) {
|
||||
continueEp = chapters[formattedChapters.indexOf(continueEp)]
|
||||
if (formattedChapters.any { it.first == continueNumber }) {
|
||||
var continueEp = media.manga.chapters!![formattedChapters.first { it.first == continueNumber }.second]
|
||||
binding.sourceContinue.visibility = View.VISIBLE
|
||||
handleProgress(
|
||||
binding.itemMediaProgressCont,
|
||||
binding.itemMediaProgress,
|
||||
binding.itemMediaProgressEmpty,
|
||||
media.id,
|
||||
continueEp
|
||||
continueEp!!.number
|
||||
)
|
||||
if ((binding.itemMediaProgress.layoutParams as LinearLayout.LayoutParams).weight > 0.8f) {
|
||||
val e = chapters.indexOf(continueEp)
|
||||
if (e != -1 && e + 1 < chapters.size) {
|
||||
continueEp = chapters[e + 1]
|
||||
val numberPlusOne = formattedChapters.indexOfFirst { it.first?.toIntOrNull() == continueNumber.toInt() + 1 }
|
||||
if (numberPlusOne != -1) {
|
||||
continueEp = media.manga.chapters!![formattedChapters[numberPlusOne].second]
|
||||
}
|
||||
}
|
||||
val ep = media.manga.chapters!![continueEp]!!
|
||||
binding.itemMediaImage.loadImage(media.banner ?: media.cover)
|
||||
binding.mediaSourceContinueText.text =
|
||||
currActivity()!!.getString(
|
||||
R.string.continue_chapter,
|
||||
ep.number,
|
||||
if (!ep.title.isNullOrEmpty()) ep.title else ""
|
||||
continueEp!!.number,
|
||||
if (!continueEp.title.isNullOrEmpty()) continueEp.title else ""
|
||||
)
|
||||
binding.sourceContinue.setOnClickListener {
|
||||
fragment.onMangaChapterClick(continueEp)
|
||||
|
|
|
@ -52,6 +52,7 @@ import ani.dantotsu.parsers.DynamicMangaParser
|
|||
import ani.dantotsu.parsers.HMangaSources
|
||||
import ani.dantotsu.parsers.MangaParser
|
||||
import ani.dantotsu.parsers.MangaSources
|
||||
import ani.dantotsu.parsers.OfflineMangaParser
|
||||
import ani.dantotsu.setNavigationTheme
|
||||
import ani.dantotsu.settings.extensionprefs.MangaSourcePreferencesFragment
|
||||
import ani.dantotsu.settings.saving.PrefManager
|
||||
|
@ -195,7 +196,7 @@ open class MangaReadFragment : Fragment(), ScanlatorSelectionListener {
|
|||
|
||||
for (download in downloadManager.mangaDownloadedTypes) {
|
||||
if (media.compareName(download.titleName)) {
|
||||
chapterAdapter.stopDownload(download.chapterName)
|
||||
chapterAdapter.stopDownload(download.uniqueName)
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -249,7 +250,7 @@ open class MangaReadFragment : Fragment(), ScanlatorSelectionListener {
|
|||
|
||||
|
||||
for (chapter in chaptersToDownload) {
|
||||
onMangaChapterDownloadClick(chapter.title!!)
|
||||
onMangaChapterDownloadClick(chapter)
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -260,9 +261,13 @@ open class MangaReadFragment : Fragment(), ScanlatorSelectionListener {
|
|||
val chapters = loadedChapters[media.selected!!.sourceIndex]
|
||||
if (chapters != null) {
|
||||
headerAdapter.options = getScanlators(chapters)
|
||||
val filteredChapters = chapters.filterNot { (_, chapter) ->
|
||||
val filteredChapters = if (model.mangaReadSources?.get(media.selected!!.sourceIndex) is OfflineMangaParser) {
|
||||
chapters
|
||||
} else {
|
||||
chapters.filterNot { (_, chapter) ->
|
||||
chapter.scanlator in headerAdapter.hiddenScanlators
|
||||
}
|
||||
}
|
||||
|
||||
media.manga?.chapters = filteredChapters.toMutableMap()
|
||||
|
||||
|
@ -430,9 +435,9 @@ open class MangaReadFragment : Fragment(), ScanlatorSelectionListener {
|
|||
}
|
||||
}
|
||||
|
||||
fun onMangaChapterClick(i: String) {
|
||||
fun onMangaChapterClick(i: MangaChapter) {
|
||||
model.continueMedia = false
|
||||
media.manga?.chapters?.get(i)?.let {
|
||||
media.manga?.chapters?.get(i.uniqueNumber())?.let {
|
||||
media.manga?.selectedChapter = i
|
||||
model.saveSelected(media.id, media.selected!!)
|
||||
ChapterLoaderDialog.newInstance(it, true)
|
||||
|
@ -440,7 +445,7 @@ open class MangaReadFragment : Fragment(), ScanlatorSelectionListener {
|
|||
}
|
||||
}
|
||||
|
||||
fun onMangaChapterDownloadClick(i: String) {
|
||||
fun onMangaChapterDownloadClick(i: MangaChapter) {
|
||||
activity?.let {
|
||||
if (!isNotificationPermissionGranted()) {
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
|
||||
|
@ -453,7 +458,7 @@ open class MangaReadFragment : Fragment(), ScanlatorSelectionListener {
|
|||
}
|
||||
fun continueDownload() {
|
||||
model.continueMedia = false
|
||||
media.manga?.chapters?.get(i)?.let { chapter ->
|
||||
media.manga?.chapters?.get(i.uniqueNumber())?.let { chapter ->
|
||||
val parser =
|
||||
model.mangaReadSources?.get(media.selected!!.sourceIndex) as? DynamicMangaParser
|
||||
parser?.let {
|
||||
|
@ -464,6 +469,7 @@ open class MangaReadFragment : Fragment(), ScanlatorSelectionListener {
|
|||
val downloadTask = MangaDownloaderService.DownloadTask(
|
||||
title = media.mainName(),
|
||||
chapter = chapter.title!!,
|
||||
scanlator = chapter.scanlator ?: "Unknown",
|
||||
imageData = images,
|
||||
sourceMedia = media,
|
||||
retries = 2,
|
||||
|
@ -483,7 +489,7 @@ open class MangaReadFragment : Fragment(), ScanlatorSelectionListener {
|
|||
|
||||
// Inform the adapter that the download has started
|
||||
withContext(Dispatchers.Main) {
|
||||
chapterAdapter.startDownload(i)
|
||||
chapterAdapter.startDownload(i.uniqueNumber())
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -514,11 +520,11 @@ open class MangaReadFragment : Fragment(), ScanlatorSelectionListener {
|
|||
}
|
||||
|
||||
|
||||
fun onMangaChapterRemoveDownloadClick(i: String) {
|
||||
fun onMangaChapterRemoveDownloadClick(i: MangaChapter) {
|
||||
downloadManager.removeDownload(
|
||||
DownloadedType(
|
||||
media.mainName(),
|
||||
i,
|
||||
i.number,
|
||||
MediaType.MANGA
|
||||
)
|
||||
) {
|
||||
|
@ -526,7 +532,7 @@ open class MangaReadFragment : Fragment(), ScanlatorSelectionListener {
|
|||
}
|
||||
}
|
||||
|
||||
fun onMangaChapterStopDownloadClick(i: String) {
|
||||
fun onMangaChapterStopDownloadClick(i: MangaChapter) {
|
||||
val cancelIntent = Intent().apply {
|
||||
action = MangaDownloaderService.ACTION_CANCEL_DOWNLOAD
|
||||
putExtra(MangaDownloaderService.EXTRA_CHAPTER, i)
|
||||
|
@ -537,11 +543,11 @@ open class MangaReadFragment : Fragment(), ScanlatorSelectionListener {
|
|||
downloadManager.removeDownload(
|
||||
DownloadedType(
|
||||
media.mainName(),
|
||||
i,
|
||||
i.number,
|
||||
MediaType.MANGA
|
||||
)
|
||||
) {
|
||||
chapterAdapter.purgeDownload(i)
|
||||
chapterAdapter.purgeDownload(i.uniqueNumber())
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -584,7 +590,7 @@ open class MangaReadFragment : Fragment(), ScanlatorSelectionListener {
|
|||
|
||||
// Find latest chapter for subscription
|
||||
selected.latest =
|
||||
media.manga?.chapters?.values?.maxOfOrNull { it.number.toFloatOrNull() ?: 0f } ?: 0f
|
||||
media.manga?.chapters?.values?.maxOfOrNull { MediaNameAdapter.findChapterNumber(it.number) ?: 0f } ?: 0f
|
||||
selected.latest =
|
||||
media.userProgress?.toFloat()?.takeIf { selected.latest < it } ?: selected.latest
|
||||
|
||||
|
|
|
@ -196,7 +196,7 @@ class MangaReaderActivity : AppCompatActivity() {
|
|||
finish()
|
||||
return@addCallback
|
||||
}
|
||||
val chapter = (MediaNameAdapter.findChapterNumber(media.manga!!.selectedChapter!!)
|
||||
val chapter = (MediaNameAdapter.findChapterNumber(media.manga!!.selectedChapter!!.number)
|
||||
?.minus(1L) ?: 0).toString()
|
||||
if (chapter == "0.0" && PrefManager.getVal(PrefName.ChapterZeroReader)
|
||||
// Not asking individually or incognito
|
||||
|
@ -279,7 +279,7 @@ class MangaReaderActivity : AppCompatActivity() {
|
|||
defaultSettings = loadReaderSettings("${media.id}_current_settings") ?: defaultSettings
|
||||
|
||||
chapters = media.manga?.chapters ?: return
|
||||
chapter = chapters[media.manga!!.selectedChapter] ?: return
|
||||
chapter = chapters[media.manga!!.selectedChapter!!.uniqueNumber()] ?: return
|
||||
|
||||
model.mangaReadSources = if (media.isAdult) HMangaSources else MangaSources
|
||||
binding.mangaReaderSource.isVisible = PrefManager.getVal(PrefName.ShowSource)
|
||||
|
@ -309,7 +309,7 @@ class MangaReaderActivity : AppCompatActivity() {
|
|||
binding.mangaReaderTitle.text = media.userPreferredName
|
||||
|
||||
chaptersArr = chapters.keys.toList()
|
||||
currentChapterIndex = chaptersArr.indexOf(media.manga!!.selectedChapter)
|
||||
currentChapterIndex = chaptersArr.indexOf(media.manga!!.selectedChapter!!.uniqueNumber())
|
||||
|
||||
chaptersTitleArr = arrayListOf()
|
||||
chapters.forEach {
|
||||
|
@ -394,10 +394,10 @@ class MangaReaderActivity : AppCompatActivity() {
|
|||
model.getMangaChapter().observe(this) { chap ->
|
||||
if (chap != null) {
|
||||
chapter = chap
|
||||
media.manga!!.selectedChapter = chapter.number
|
||||
media.manga!!.selectedChapter = chapter
|
||||
media.selected = model.loadSelected(media)
|
||||
PrefManager.setCustomVal("${media.id}_current_chp", chap.number)
|
||||
currentChapterIndex = chaptersArr.indexOf(chap.number)
|
||||
currentChapterIndex = chaptersArr.indexOf(chap.uniqueNumber())
|
||||
binding.mangaReaderChapterSelect.setSelection(currentChapterIndex)
|
||||
if (directionRLBT) {
|
||||
binding.mangaReaderNextChap.text =
|
||||
|
@ -1036,7 +1036,7 @@ class MangaReaderActivity : AppCompatActivity() {
|
|||
PrefManager.setCustomVal("${media.id}_save_progress", true)
|
||||
updateProgress(
|
||||
media,
|
||||
MediaNameAdapter.findChapterNumber(media.manga!!.selectedChapter!!)
|
||||
MediaNameAdapter.findChapterNumber(media.manga!!.selectedChapter!!.number)
|
||||
.toString()
|
||||
)
|
||||
runnable.run()
|
||||
|
@ -1057,7 +1057,7 @@ class MangaReaderActivity : AppCompatActivity() {
|
|||
)
|
||||
updateProgress(
|
||||
media,
|
||||
MediaNameAdapter.findChapterNumber(media.manga!!.selectedChapter!!)
|
||||
MediaNameAdapter.findChapterNumber(media.manga!!.selectedChapter!!.number)
|
||||
.toString()
|
||||
)
|
||||
runnable.run()
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
|
||||
package ani.dantotsu.parsers
|
||||
|
||||
import android.graphics.drawable.Drawable
|
||||
|
|
|
@ -90,7 +90,7 @@ abstract class MangaReadSources : BaseSources() {
|
|||
show.sManga?.let { sManga ->
|
||||
tryWithSuspend(true) {
|
||||
parser.loadChapters(show.link, show.extra, sManga).forEach {
|
||||
map["${it.number}-${it.hashCode()}"] = MangaChapter(it)
|
||||
map["${it.number}-${it.scanlator}"] = MangaChapter(it)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -102,7 +102,7 @@ abstract class MangaReadSources : BaseSources() {
|
|||
tryWithSuspend(true) {
|
||||
// Since we've checked, we can safely cast parser to OfflineMangaParser and call its methods
|
||||
parser.loadChapters(show.link, show.extra, SManga.create()).forEach {
|
||||
map["${it.number}-${it.hashCode()}"] = MangaChapter(it)
|
||||
map["${it.number}-${it.scanlator}"] = MangaChapter(it)
|
||||
}
|
||||
}
|
||||
} else {
|
||||
|
|
|
@ -31,13 +31,17 @@ class OfflineMangaParser : MangaParser() {
|
|||
val chapters = mutableListOf<MangaChapter>()
|
||||
if (directory?.exists() == true) {
|
||||
directory.listFiles().forEach {
|
||||
val scanlator = downloadManager.mangaDownloadedTypes.find { items ->
|
||||
items.titleName == mangaLink &&
|
||||
items.chapterName == it.name
|
||||
}?.scanlator ?: "Unknown"
|
||||
if (it.isDirectory) {
|
||||
val chapter = MangaChapter(
|
||||
it.name!!,
|
||||
"$mangaLink/${it.name}",
|
||||
it.name,
|
||||
null,
|
||||
null,
|
||||
scanlator,
|
||||
SChapter.create()
|
||||
)
|
||||
chapters.add(chapter)
|
||||
|
@ -45,8 +49,7 @@ class OfflineMangaParser : MangaParser() {
|
|||
}
|
||||
}
|
||||
chapters.addAll(loadChaptersCompat(mangaLink, extra, sManga))
|
||||
return chapters.distinctBy { it.number }
|
||||
.sortedBy { MediaNameAdapter.findChapterNumber(it.number) }
|
||||
return chapters.sortedBy { MediaNameAdapter.findChapterNumber(it.number) }
|
||||
}
|
||||
|
||||
override suspend fun loadImages(chapterLink: String, sChapter: SChapter): List<MangaImage> {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue