|
1 | | -# GoAnime Release Notes - Version 1.8.3 |
| 1 | +# GoAnime Release Notes - Version 1.8.4 |
2 | 2 |
|
3 | | -Release date: 2026-04-30 |
| 3 | +Release date: 2026-05-03 |
4 | 4 |
|
5 | 5 | ## Highlights |
6 | 6 |
|
7 | | -- **AllAnime Encryption Update**: Updated AllAnime stream decryption from AES-GCM to AES-256-CTR cipher mode to maintain compatibility with their latest API changes. |
8 | | -- **Zenpen/Kouhen Title Fix**: Fixed critical bug where anime titles with meaningful suffixes (e.g., "Jujutsu Kaisen - Zenpen") were being incorrectly stripped, causing incorrect metadata binding to sibling entries. Now preserves legitimate episode part markers while still removing PT-BR noise. |
9 | | -- **Distinct ID Tracking**: Added support for keeping MyAnimeList (MAL) and AniList IDs separate throughout the playback pipeline. Previously they were conflated, causing incorrect skip intros and tracking data. |
10 | | -- **AnimeFire Quality Menu Improvements**: Fixed three UX bugs in the quality picker: items now sort in descending resolution order, duplicate qualities are disambiguated with mirror labels, and pressing Esc now routes back instead of silently playing the first source. |
11 | | -- **Source Health Diagnostics Enhancement**: Added post-timeout origin probing to distinguish between "client timeout waiting" and "upstream actively down" (Cloudflare 521-524), producing more actionable diagnostic messages. |
12 | | -- **Cloudflare Challenge Detection Refinement**: Fixed false-positive challenge detection that was blocking legitimate Goyabu episode pages mentioning "cloudflare" in footers/comments/ToS. Now targets specific challenge markers instead of the bare word. |
| 7 | +- **SuperFlix API Migration**: Migrated SuperFlix endpoint from `superflixapi.rest` (deprecated) to `superflixapi.online` (canonical). The legacy host performs a 301 redirect, but Go's HTTP Client downgrades POST to GET, breaking requests. Updated across all code and tests. |
| 8 | +- **SuperFlix Content Filtering**: Implemented episode filtering by air date, removing episodes with missing, "null", or future air dates. This resolves issues where placeholder episodes appeared without available sources. |
| 9 | +- **SuperFlix Error Handling Improvements**: Implemented `ensureJSONResponse()` to detect HTML or non-2xx responses and produce clear error messages instead of cryptic "invalid character '<'". Now performs body-sniffing instead of relying solely on Content-Type header. |
| 10 | +- **Temporarily Disabled Sources**: FlixHQ, SFlix, and 9Anime commented out until fixes are implemented. AnimeDrive also temporarily disabled. |
| 11 | +- **Conditional Logic Refactoring**: Replacement of complex if-else chains with switch statements for improved readability and maintainability across the codebase. |
| 12 | +- **Version Bumped**: Updated to 1.8.4 with automatic normalization of the "v" prefix in CI workflows. |
13 | 13 |
|
14 | 14 | ## Features |
15 | 15 |
|
16 | | -- Add regression tests for AllAnime cipher-mode and transport changes. |
17 | | -- Implement post-timeout origin probing for enhanced source diagnostics (FlixHQ, SFlix, 9Anime). |
18 | | -- Add support for distinct MAL and AniList IDs in playback and tracking pipeline. |
19 | | -- Normalize hyphenated search queries in SuperFlix search for better results. |
20 | | -- Improve AnimeFire quality menu with descending sort, mirror disambiguation, and proper abort handling. |
| 16 | +- Migrate SuperFlix API endpoint to canonical `superflixapi.online` host. |
| 17 | +- Add content filtering for SuperFlix episodes: remove episodes with empty, "null", or future air dates. |
| 18 | +- Implement `ensureJSONResponse()` helper for clear detection of HTTP/HTML errors in SuperFlix APIs. |
| 19 | +- Refactor conditional chains across multiple files: replace nested if-else with switch statements for improved readability. |
| 20 | +- Add support for non-UTC timezones in SuperFlix episode filtering (normalizes to UTC internally). |
| 21 | +- Version normalization: automatic TrimPrefix("v") in CI builds to avoid "vv1.8.4" in outputs. |
21 | 22 |
|
22 | 23 | ## Bug Fixes |
23 | 24 |
|
24 | | -- **Critical**: Fix Zenpen/Kouhen title mismatch by preserving meaningful anime title suffixes. CleanTitle now only strips known PT-BR noise patterns, preventing data corruption where "Jujutsu Kaisen: Shimetsu Kaiyuu - Zenpen" was misbound to the Kouhen (Part 2) entry instead of Zenpen (Part 1). This affected Discord RPC, AniSkip, file naming, and tracking. |
25 | | -- Fix AllAnime cipher-mode decryption: update from AES-GCM to AES-256-CTR to maintain stream extraction compatibility. |
26 | | -- Fix case-sensitive source matching for AnimeFire ("Animefire.io" vs "AnimeFire") causing source breakdown diagnostics to report zero AnimeFire results despite successful searches. |
27 | | -- Fix false-positive Cloudflare challenge detection that was blocking legitimate Goyabu episode pages. Relaxed body-text scan from bare "cloudflare" match to specific challenge phrases ("cf-error", "checking your browser", "ray id", etc.) while preserving all real challenge detection. |
28 | | -- Fix AnimeFire quality selection bug: properly index into sorted sources by user selection instead of matching on rendered labels, fixing silent loss of selection when duplicates exist. |
29 | | -- Fix AnimeFire quality picker handling of Esc/Ctrl-C to return ErrBackRequested instead of silently playing the first source. |
30 | | -- Fix dead Blogger token fast-fail by detecting empty batchexecute responses (anti-hijacking prefix only) instead of wasting ~6 seconds on doomed retries. |
31 | | -- Add nil guard to tracker to prevent crashes on update tracking attempts. |
32 | | -- Improve Blogger video URL extraction robustness to handle edge cases and malformed responses. |
33 | | -- Update error messages and log output throughout the codebase for improved clarity and consistency. |
| 25 | +- **Critical**: Fix SuperFlix API host migration: update from `superflixapi.rest` to `superflixapi.online`. The 301 redirect from the legacy host downgrades POST to GET, breaking `/player/bootstrap`. Legacy code received HTML 404 and failed with "invalid character '<' looking for beginning of value". |
| 26 | +- **Critical**: Fix SuperFlix episode filtering: placeholder episodes with `air_date: null` or `air_date: ""` are now removed before returning to the user. Episodes with future air dates are also filtered. This resolves issues where users saw "no servers available" for episodes that haven't yet been released. |
| 27 | +- Fix SuperFlix error messages: implement `ensureJSONResponse()` to detect HTML or non-2xx status codes and produce clear messages instead of "invalid character '<'". Logs now indicate the endpoint, status code, and final URL for diagnosis. |
| 28 | +- Fix SuperFlix air_date timezone handling: filtering now uses UTC internally, preventing leakage of tomorrow's episodes in timezones west of UTC. |
| 29 | +- Temporarily disable FlixHQ, SFlix, and 9Anime source providers until fixes are ready. Sources commented out with `/* */` blocks in provider registry. |
| 30 | +- Temporarily disable AnimeDrive scraper until Cloudflare bypass is implemented. |
| 31 | +- Fix version normalization: strip leading "v" from injected CI version string to avoid "vv1.8.4" in outputs. |
| 32 | +- Refactor logging: replace `log.Fatalln()` with `util.Errorf()` in error handlers of main.go, improving graceful shutdown. |
| 33 | +- Remove Nix configuration files (default.nix, flake.nix, flake.lock, gomod2nix.toml) from repository. |
34 | 34 |
|
35 | 35 | ## Improvements |
36 | 36 |
|
37 | | -- Refactor quality menu sorting and labeling logic into buildQualityMenu helper for testability and maintainability. |
38 | | -- Add comprehensive regression test suites for all major bug fixes (Zenpen/Kouhen, source breakdown, season selection abort, quality menu, Blogger unavailable token, Cloudflare challenges, origin probing). |
39 | | -- Enhance debug logging throughout Goyabu scraper to aid diagnostics of extraction failures. |
40 | | -- Add episode page diagnostic dumps (HTML snapshot) when all Goyabu extraction strategies fail in debug mode. |
41 | | -- Improve download header handling with centralized applyDownloadAuthHeaders function for consistency. |
42 | | -- Add MarginTop/Priority fields to SuperFlix media results for better UI presentation. |
43 | | -- Use slices.Sort instead of deprecated sort.Slice in unified scraper manager. |
| 37 | +- Refactor conditional logic: replace if-else chains with switch statements across multiple modules (`allanime_enhanced.go`, `player.go`, `playvideo.go`, `scraper.go`, `download.go`, `appflow/anime_data.go`, `util/util.go`, `util/perf.go`, `scraper/flixhq.go`, `scraper/sflix.go`, `scraper/superflix.go`) for improved readability and maintainability. |
| 38 | +- Add helper function `filterEpisodesByAirDate()` in SuperFlix scraper to centralize episode date filtering logic. |
| 39 | +- Improve SuperFlix error diagnostics: enrich error messages with player URL, content ID, and HTTP status for easier triage. |
| 40 | +- Add `ErrSuperFlixNoServers` typed error to distinguish content-unavailability (placeholder episodes) from system errors. |
| 41 | +- Rename `isFlixHQSourcePlayer()` to `isMovieOrTVSourcePlayer()` in player.go to reflect that both SuperFlix and FlixHQ share the same stream extraction route. |
| 42 | +- Add comprehensive regression test suites: |
| 43 | + - `runspinner_regression_test.go`: tests for spinner race condition where action completed after runner returned. |
| 44 | + - `source_routing_regression_test.go`: tests to validate correct routing of SuperFlix and FlixHQ through enhanced API. |
| 45 | + - `allanime_ctr_regression_test.go`: improvements in slice allocation to avoid inefficient append operations. |
| 46 | + - `superflix_test.go`: tests for air_date filtering, JSON response validation, HTML error detection, and timezone handling. |
| 47 | + - `version_regression_test.go`: tests for version string normalization without "v" prefix. |
| 48 | +- Update go.mod/go.sum: dependency bump (klauspost/compress v1.18.5 → v1.18.6). |
| 49 | +- Minor code style improvements: replace `baseURL = baseURL + "/"` with `baseURL += "/"` and `timePerFrame = timePerFrame / 2` with `timePerFrame /= 2`. |
44 | 50 |
|
45 | 51 | --- |
46 | 52 |
|
0 commit comments