feat(library): Filter MangaDex DMCA library entries with search keyword mangadex-dmca (#936)
* Filter MangaDex DMCA entries with search keyword `mangadex-dmca` * Load from raw file * using IO dispatcher --------- Co-authored-by: az4521 <18432684+az4521@users.noreply.github.com>
This commit is contained in:
parent
4db0a96b6c
commit
83b32b4c0a
2 changed files with 1908 additions and 0 deletions
|
|
@ -2,6 +2,7 @@ package eu.kanade.tachiyomi.ui.library
|
||||||
|
|
||||||
import android.app.Application
|
import android.app.Application
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
|
import android.util.Log
|
||||||
import androidx.compose.runtime.Immutable
|
import androidx.compose.runtime.Immutable
|
||||||
import androidx.compose.runtime.getValue
|
import androidx.compose.runtime.getValue
|
||||||
import androidx.compose.runtime.setValue
|
import androidx.compose.runtime.setValue
|
||||||
|
|
@ -48,6 +49,7 @@ import exh.search.QueryComponent
|
||||||
import exh.search.SearchEngine
|
import exh.search.SearchEngine
|
||||||
import exh.search.Text
|
import exh.search.Text
|
||||||
import exh.source.EH_SOURCE_ID
|
import exh.source.EH_SOURCE_ID
|
||||||
|
import exh.source.MANGADEX_IDS
|
||||||
import exh.source.MERGED_SOURCE_ID
|
import exh.source.MERGED_SOURCE_ID
|
||||||
import exh.source.isEhBasedManga
|
import exh.source.isEhBasedManga
|
||||||
import exh.source.isMetadataSource
|
import exh.source.isMetadataSource
|
||||||
|
|
@ -335,6 +337,12 @@ class LibraryScreenModel(
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
screenModelScope.launchIO {
|
||||||
|
if (mangaDexDmcaUuids.isEmpty()) {
|
||||||
|
mangaDexDmcaUuids = loadMangaDexDmcaUuids(context = Injekt.get<Application>())
|
||||||
|
}
|
||||||
|
}
|
||||||
// KMK <--
|
// KMK <--
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -1058,6 +1066,15 @@ class LibraryScreenModel(
|
||||||
|
|
||||||
private suspend fun filterLibrary(unfiltered: List<LibraryItem>, query: String?, loggedInTrackServices: Map<Long, TriState>): List<LibraryItem> {
|
private suspend fun filterLibrary(unfiltered: List<LibraryItem>, query: String?, loggedInTrackServices: Map<Long, TriState>): List<LibraryItem> {
|
||||||
return if (unfiltered.isNotEmpty() && !query.isNullOrBlank()) {
|
return if (unfiltered.isNotEmpty() && !query.isNullOrBlank()) {
|
||||||
|
// AZ -->
|
||||||
|
if (query.trim().lowercase() == "mangadex-dmca") {
|
||||||
|
// Special easter egg query
|
||||||
|
return unfiltered.fastFilter {
|
||||||
|
it.libraryManga.manga.source in MANGADEX_IDS &&
|
||||||
|
it.libraryManga.manga.url.removePrefix("/manga/").lowercase() in mangaDexDmcaUuids
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// AZ <--
|
||||||
// Prepare filter object
|
// Prepare filter object
|
||||||
val parsedQuery = searchEngine.parseQuery(query)
|
val parsedQuery = searchEngine.parseQuery(query)
|
||||||
val mangaWithMetaIds = getIdsOfFavoriteMangaWithMetadata.await()
|
val mangaWithMetaIds = getIdsOfFavoriteMangaWithMetadata.await()
|
||||||
|
|
@ -1607,4 +1624,33 @@ class LibraryScreenModel(
|
||||||
return LibraryToolbarTitle(title, count)
|
return LibraryToolbarTitle(title, count)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// KMK -->
|
||||||
|
companion object {
|
||||||
|
/** List of MangaDex UUIDs subject to DMCA takedowns */
|
||||||
|
@Volatile
|
||||||
|
private var mangaDexDmcaUuids = hashSetOf<String>()
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Loads the list of MangaDex UUIDs subject to DMCA takedowns from an external file.
|
||||||
|
* The file should be placed at res/raw/mangadex_dmca_uuids.txt, one UUID per line.
|
||||||
|
*/
|
||||||
|
private suspend fun loadMangaDexDmcaUuids(context: Context): HashSet<String> = withIOContext {
|
||||||
|
try {
|
||||||
|
val inputStream = context.resources.openRawResource(
|
||||||
|
eu.kanade.tachiyomi.R.raw.mangadex_dmca_uuids,
|
||||||
|
)
|
||||||
|
inputStream.bufferedReader().useLines { lines ->
|
||||||
|
lines.map { it.trim().lowercase() }
|
||||||
|
.filter { it.isNotEmpty() && !it.startsWith("#") }
|
||||||
|
.toHashSet()
|
||||||
|
}
|
||||||
|
} catch (e: Exception) {
|
||||||
|
// Log the error and return an empty set if the file cannot be read.
|
||||||
|
Log.e("LibraryScreenModel", "Error loading MangaDex DMCA UUIDs", e)
|
||||||
|
hashSetOf()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// KMK <--
|
||||||
}
|
}
|
||||||
|
|
|
||||||
1862
app/src/main/res/raw/mangadex_dmca_uuids.txt
Normal file
1862
app/src/main/res/raw/mangadex_dmca_uuids.txt
Normal file
File diff suppressed because it is too large
Load diff
Loading…
Reference in a new issue