feat(portuguese): add blnovels plugin - #2546
Merged
rajarsheechatterjee merged 1 commit intoSep 24, 2026
Merged
Conversation
New LNReader source for blnovels.com (Madara theme, Portuguese/Brazil), closes the source request in lnreader#2541. Authored by an autonomous AI agent (pi coding agent); not human-reviewed. Co-Authored-By: pi coding agent <noreply@pi.dev>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Addition
New Portuguese source plugin for
blnovels.com, a Brazilian BL site. Requested in #2541. Addsplugins/portuguese/blnovels.ts(id: blnovels, v1.0.0) and its 96x96 icon. No existing file is touched.Standalone plugin rather than a Madara
sources.jsonentry, although the site runs the Madara theme: the shared template sends noUser-Agent(this Cloudflare-fronted site needs per-source browser headers; reworking the template would touch all 77 generated sources), serves chapter dates only as Portuguese relative titles in atitleattribute (the template would stamp every chapter "today", inventing data), and serves its chapter list inline — the legacyadmin-ajax manga_get_chaptersendpoint answers HTTP 400 here, so the template's chapter path is dead.Behavior: catalog popular/latest with real pagination (12 cards/page, 404 past the end), search matching site ground truth, novel detail (author,
Status, genres, summary, full-size covers with WP size suffixes stripped — 66/66 sampled URLs return 200), inline chapter list verified complete on a 175-chapter novel and byte-identical in order to the site's own ajax chapter endpoint, chapter text as real prose only, and the site's own advanced-search filters (60 genre slugs, status, order). Dates parse where the site provides them; older chapters with no date getnull— no date is invented. Non-2xx responses throw with the HTTP status so runner-side Cloudflare blocks report INCONCLUSIVE, and bot-interstitial titles throw instead of parsing empty.Verification
check:pluginpasses all four steps live (12 popular, 2 search results, 9-chapter novel, 18758-char chapter). A 175-chapter novel lists chapters 1–175 ascending with unique numbers and populated metadata. Playground run: 12 popular cards, a 45-chapter novel detail (chapters 1–45 oldest-first, dates only where the site provides them), a 12050-char chapter of real Portuguese prose, and a 4-card search matching ground truth.build:compileandbuild:manifestclean; new files clean under eslint, prettier, andtsc(repo-wide findings are pre-existing in untouched files).Caveat: single network vantage point, automated run only — the Cloudflare INCONCLUSIVE path is implemented per the runner's documented heuristic but was never triggered here. AI-authored change, no human review.