This commit is contained in:
rebelonion 2024-01-26 00:29:19 -06:00
parent 49b3c33fbc
commit 0ebd067bc2
22 changed files with 121 additions and 68 deletions

View file

@ -11,7 +11,6 @@ import ani.dantotsu.saveData
import ani.dantotsu.tryWithSuspend
import eu.kanade.tachiyomi.animesource.model.SAnime
import eu.kanade.tachiyomi.animesource.model.SEpisode
import kotlin.properties.Delegates
/**
* An abstract class for creating a new Source

View file

@ -13,7 +13,8 @@ object AnimeSources : WatchSources() {
suspend fun init(fromExtensions: StateFlow<List<AnimeExtension.Installed>>, context: Context) {
val sharedPrefs = context.getSharedPreferences("Dantotsu", Context.MODE_PRIVATE)
pinnedAnimeSources = sharedPrefs.getStringSet("pinned_anime_sources", emptySet()) ?: emptySet()
pinnedAnimeSources =
sharedPrefs.getStringSet("pinned_anime_sources", emptySet()) ?: emptySet()
// Initialize with the first value from StateFlow
val initialExtensions = fromExtensions.first()
@ -24,7 +25,10 @@ object AnimeSources : WatchSources() {
// Update as StateFlow emits new values
fromExtensions.collect { extensions ->
list = sortPinnedAnimeSources(createParsersFromExtensions(extensions), pinnedAnimeSources) + Lazier(
list = sortPinnedAnimeSources(
createParsersFromExtensions(extensions),
pinnedAnimeSources
) + Lazier(
{ OfflineAnimeParser() },
"Downloaded"
)
@ -34,7 +38,7 @@ object AnimeSources : WatchSources() {
fun performReorderAnimeSources() {
//remove the downloaded source from the list to avoid duplicates
list = list.filter { it.name != "Downloaded" }
list = sortPinnedAnimeSources(list, pinnedAnimeSources) + Lazier(
list = sortPinnedAnimeSources(list, pinnedAnimeSources) + Lazier(
{ OfflineAnimeParser() },
"Downloaded"
)
@ -47,7 +51,10 @@ object AnimeSources : WatchSources() {
}
}
private fun sortPinnedAnimeSources(Sources: List<Lazier<BaseParser>>, pinnedAnimeSources: Set<String>): List<Lazier<BaseParser>> {
private fun sortPinnedAnimeSources(
Sources: List<Lazier<BaseParser>>,
pinnedAnimeSources: Set<String>
): List<Lazier<BaseParser>> {
//find the pinned sources
val pinnedSources = Sources.filter { pinnedAnimeSources.contains(it.name) }
//find the unpinned sources

View file

@ -86,7 +86,10 @@ class DynamicAnimeParser(extension: AnimeExtension.Installed) : AnimeParser() {
?: return false
currContext()?.let { context ->
val sharedPreferences =
context.getSharedPreferences(configurableSource.getPreferenceKey(), Context.MODE_PRIVATE)
context.getSharedPreferences(
configurableSource.getPreferenceKey(),
Context.MODE_PRIVATE
)
sharedPreferences.all.filterValues { AnimeNameAdapter.getSubDub(it.toString()) != AnimeNameAdapter.Companion.SubDubType.NULL }
.forEach { value ->
return when (AnimeNameAdapter.getSubDub(value.value.toString())) {
@ -108,7 +111,10 @@ class DynamicAnimeParser(extension: AnimeExtension.Installed) : AnimeParser() {
}
currContext()?.let { context ->
val sharedPreferences =
context.getSharedPreferences(configurableSource.getPreferenceKey(), Context.MODE_PRIVATE)
context.getSharedPreferences(
configurableSource.getPreferenceKey(),
Context.MODE_PRIVATE
)
sharedPreferences.all.filterValues { AnimeNameAdapter.getSubDub(it.toString()) != AnimeNameAdapter.Companion.SubDubType.NULL }
.forEach { value ->
val setValue = AnimeNameAdapter.setSubDub(value.value.toString(), type)
@ -118,14 +124,23 @@ class DynamicAnimeParser(extension: AnimeExtension.Installed) : AnimeParser() {
}
}
}
override fun isDubAvailableSeparately(sourceLang: Int?): Boolean {
val configurableSource = extension.sources[sourceLanguage] as? ConfigurableAnimeSource
?: return false
currContext()?.let { context ->
logger("isDubAvailableSeparately: ${configurableSource.getPreferenceKey()}")
val sharedPreferences =
context.getSharedPreferences(configurableSource.getPreferenceKey(), Context.MODE_PRIVATE)
sharedPreferences.all.filterValues { AnimeNameAdapter.setSubDub(it.toString(), AnimeNameAdapter.Companion.SubDubType.NULL) != null }
context.getSharedPreferences(
configurableSource.getPreferenceKey(),
Context.MODE_PRIVATE
)
sharedPreferences.all.filterValues {
AnimeNameAdapter.setSubDub(
it.toString(),
AnimeNameAdapter.Companion.SubDubType.NULL
) != null
}
.forEach { _ -> return true }
}
return false
@ -173,20 +188,20 @@ class DynamicAnimeParser(extension: AnimeExtension.Installed) : AnimeParser() {
res.groupBy { AnimeNameAdapter.findSeasonNumber(it.name) ?: 0 }
seasonGroups.keys.sortedBy { it.toInt() }
.flatMap { season ->
seasonGroups[season]?.sortedBy { it.episode_number }?.map { episode ->
if (episode.episode_number != 0f) { // Skip renumbering for episode number 0
val potentialNumber =
AnimeNameAdapter.findEpisodeNumber(episode.name)
if (potentialNumber != null) {
episode.episode_number = potentialNumber
} else {
episode.episode_number = episodeCounter
seasonGroups[season]?.sortedBy { it.episode_number }?.map { episode ->
if (episode.episode_number != 0f) { // Skip renumbering for episode number 0
val potentialNumber =
AnimeNameAdapter.findEpisodeNumber(episode.name)
if (potentialNumber != null) {
episode.episode_number = potentialNumber
} else {
episode.episode_number = episodeCounter
}
episodeCounter++
}
episodeCounter++
}
episode
} ?: emptyList()
}
episode
} ?: emptyList()
}
}
return sortedEpisodes.map { SEpisodeToEpisode(it) }
} catch (e: Exception) {
@ -250,7 +265,7 @@ class DynamicAnimeParser(extension: AnimeExtension.Installed) : AnimeParser() {
} catch (e: CloudflareBypassException) {
logger("Exception in search: $e")
withContext(Dispatchers.Main) {
snackString( "Failed to bypass Cloudflare")
snackString("Failed to bypass Cloudflare")
}
emptyList()
} catch (e: Exception) {

View file

@ -13,7 +13,8 @@ object MangaSources : MangaReadSources() {
suspend fun init(fromExtensions: StateFlow<List<MangaExtension.Installed>>, context: Context) {
val sharedPrefs = context.getSharedPreferences("Dantotsu", Context.MODE_PRIVATE)
pinnedMangaSources = sharedPrefs.getStringSet("pinned_manga_sources", emptySet()) ?: emptySet()
pinnedMangaSources =
sharedPrefs.getStringSet("pinned_manga_sources", emptySet()) ?: emptySet()
// Initialize with the first value from StateFlow
val initialExtensions = fromExtensions.first()
@ -24,7 +25,10 @@ object MangaSources : MangaReadSources() {
// Update as StateFlow emits new values
fromExtensions.collect { extensions ->
list = sortPinnedMangaSources(createParsersFromExtensions(extensions), pinnedMangaSources) + Lazier(
list = sortPinnedMangaSources(
createParsersFromExtensions(extensions),
pinnedMangaSources
) + Lazier(
{ OfflineMangaParser() },
"Downloaded"
)
@ -47,7 +51,10 @@ object MangaSources : MangaReadSources() {
}
}
private fun sortPinnedMangaSources(Sources: List<Lazier<BaseParser>>, pinnedMangaSources: Set<String>): List<Lazier<BaseParser>> {
private fun sortPinnedMangaSources(
Sources: List<Lazier<BaseParser>>,
pinnedMangaSources: Set<String>
): List<Lazier<BaseParser>> {
//find the pinned sources
val pinnedSources = Sources.filter { pinnedMangaSources.contains(it.name) }
//find the unpinned sources

View file

@ -62,6 +62,7 @@ data class VideoServer(
) : Serializable {
constructor(name: String, embedUrl: String, extraData: Map<String, String>? = null)
: this(name, FileUrl(embedUrl), extraData)
constructor(name: String, offline: Boolean, extraData: Map<String, String>?)
: this(name, FileUrl(""), extraData, null, offline)