feat(MangaDexProvider): add content rating filtering to manga feed retrieval

This commit is contained in:
Rodrigo Verdiani 2025-12-31 14:23:47 -03:00
parent b238f66e08
commit f98b76bc76
2 changed files with 10 additions and 5 deletions

View File

@ -14,11 +14,11 @@ public interface MangaDexClient {
MangaDexMangaDTO getManga(@PathVariable UUID id); MangaDexMangaDTO getManga(@PathVariable UUID id);
@GetMapping("/manga/{id}/feed") @GetMapping("/manga/{id}/feed")
MangaDexMangaFeedDTO getMangaFeed(@PathVariable UUID id); MangaDexMangaFeedDTO getMangaFeed(@PathVariable UUID id, @RequestParam("contentRating[]") List<String> contentRating);
@GetMapping("/manga/{id}/feed") @GetMapping("/manga/{id}/feed")
MangaDexMangaFeedDTO getMangaFeed( MangaDexMangaFeedDTO getMangaFeed(
@PathVariable UUID id, @RequestParam int limit, @RequestParam int offset); @PathVariable UUID id, @RequestParam int limit, @RequestParam int offset, @RequestParam("contentRating[]") List<String> contentRating);
@GetMapping("/at-home/server/{chapterId}") @GetMapping("/at-home/server/{chapterId}")
MangaChapterDataDTO getMangaChapter(@PathVariable UUID chapterId); MangaChapterDataDTO getMangaChapter(@PathVariable UUID chapterId);

View File

@ -15,6 +15,8 @@ import lombok.RequiredArgsConstructor;
import lombok.extern.log4j.Log4j2; import lombok.extern.log4j.Log4j2;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import static java.util.Objects.isNull;
@Log4j2 @Log4j2
@Service(ContentProviders.MANGA_DEX) @Service(ContentProviders.MANGA_DEX)
@RequiredArgsConstructor @RequiredArgsConstructor
@ -27,13 +29,12 @@ public class MangaDexProvider implements ContentProvider, ManualImportContentPro
public List<ContentProviderMangaChapterResponseDTO> getAvailableChapters(MangaProvider provider) { public List<ContentProviderMangaChapterResponseDTO> getAvailableChapters(MangaProvider provider) {
try { try {
mangaDexRateLimiter.acquire(); mangaDexRateLimiter.acquire();
var response = mangaDexClient.getMangaFeed(UUID.fromString(provider.getUrl())); var response = mangaDexClient.getMangaFeed(UUID.fromString(provider.getUrl()), List.of("safe", "suggestive", "erotica", "pornographic"));
var mangas = new ArrayList<>(response.data()); var mangas = new ArrayList<>(response.data());
var totalPages = (int) Math.ceil((double) response.total() / 500); var totalPages = (int) Math.ceil((double) response.total() / 500);
try { try {
IntStream.range(1, totalPages) IntStream.range(1, totalPages)
.parallel() .parallel()
.forEach( .forEach(
@ -41,7 +42,7 @@ public class MangaDexProvider implements ContentProvider, ManualImportContentPro
mangaDexRateLimiter.acquire(); mangaDexRateLimiter.acquire();
var pagedResponse = var pagedResponse =
mangaDexClient.getMangaFeed(UUID.fromString(provider.getUrl()), 500, i * 500); mangaDexClient.getMangaFeed(UUID.fromString(provider.getUrl()), 500, i * 500, List.of("safe", "suggestive", "erotica", "pornographic"));
mangas.addAll(pagedResponse.data()); mangas.addAll(pagedResponse.data());
}); });
@ -61,6 +62,10 @@ public class MangaDexProvider implements ContentProvider, ManualImportContentPro
&& languagesToImport.containsKey(c.attributes().translatedLanguage())) && languagesToImport.containsKey(c.attributes().translatedLanguage()))
.sorted( .sorted(
(o1, o2) -> { (o1, o2) -> {
if (isNull(o1.attributes().chapter()) || isNull(o2.attributes().chapter())) {
return 0;
}
try { try {
Float chapter1 = Float.parseFloat(o1.attributes().chapter()); Float chapter1 = Float.parseFloat(o1.attributes().chapter());
Float chapter2 = Float.parseFloat(o2.attributes().chapter()); Float chapter2 = Float.parseFloat(o2.attributes().chapter());