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);
@GetMapping("/manga/{id}/feed")
MangaDexMangaFeedDTO getMangaFeed(@PathVariable UUID id);
MangaDexMangaFeedDTO getMangaFeed(@PathVariable UUID id, @RequestParam("contentRating[]") List<String> contentRating);
@GetMapping("/manga/{id}/feed")
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}")
MangaChapterDataDTO getMangaChapter(@PathVariable UUID chapterId);

View File

@ -15,6 +15,8 @@ import lombok.RequiredArgsConstructor;
import lombok.extern.log4j.Log4j2;
import org.springframework.stereotype.Service;
import static java.util.Objects.isNull;
@Log4j2
@Service(ContentProviders.MANGA_DEX)
@RequiredArgsConstructor
@ -27,13 +29,12 @@ public class MangaDexProvider implements ContentProvider, ManualImportContentPro
public List<ContentProviderMangaChapterResponseDTO> getAvailableChapters(MangaProvider provider) {
try {
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 totalPages = (int) Math.ceil((double) response.total() / 500);
try {
IntStream.range(1, totalPages)
.parallel()
.forEach(
@ -41,7 +42,7 @@ public class MangaDexProvider implements ContentProvider, ManualImportContentPro
mangaDexRateLimiter.acquire();
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());
});
@ -61,6 +62,10 @@ public class MangaDexProvider implements ContentProvider, ManualImportContentPro
&& languagesToImport.containsKey(c.attributes().translatedLanguage()))
.sorted(
(o1, o2) -> {
if (isNull(o1.attributes().chapter()) || isNull(o2.attributes().chapter())) {
return 0;
}
try {
Float chapter1 = Float.parseFloat(o1.attributes().chapter());
Float chapter2 = Float.parseFloat(o2.attributes().chapter());