Implements dynamic season template building that respects voice-specific
season availability. Adds proper handling of voice indices and creates
filtered season lists based on available content for each voice option.
This ensures season navigation remains synchronized when switching between
different voice tracks with varying season availability.
The code now properly handles cases where the requested season is not found in the voice seasons list by checking if the match has a valid Season before accessing its properties. This prevents potential null reference exceptions when generating season links.
- Removed debug logging statements that were causing noisy output in production
- Simplified season filtering logic by using nullable int for seasonVoiceIndex
- Improved season link generation to handle requested season availability more efficiently
- Refactored season item selection logic to be more maintainable and readable
The logic for generating voice links was incorrect - it was checking for requested season availability instead of checking if there are multiple seasons available. This caused season lists to not show properly for multi-season voices.
The fix ensures that:
- Multi-season voices always show the season list to keep filters correct
- Single-season voices link directly to that season
- The season parameter is correctly set based on the actual number of seasons
Added debug logging to track voice selection and season filtering behavior during season number filtering. This helps diagnose issues with voice-season relationships and filtering logic.
When a requested season is not available in the selected voice, redirect to season list instead of showing foreign seasons. This prevents displaying seasons from other voices that the user may not have access to.
When a user requests a season that doesn't exist for a selected voice, the system now redirects to the first available season for that voice instead of silently using the first season. This ensures users are always directed to valid content and prevents confusion when season data is inconsistent across different voice options.
The previous implementation assumed all voices had the same number of seasons and used index-based access, which caused issues when voices had different season counts. The new implementation:
- Extracts season numbers from season titles using regex
- Creates a unified list of all available season numbers across all voices
- Handles cases where voices have no seasons or missing season data
- Selects appropriate season numbers when specific seasons are requested
- Maintains backward compatibility with existing URL parameters
This fixes issues with season selection when different voice tracks have varying season counts or when some voices lack season information entirely.
Previously, the code assumed all voices had the same number of seasons
as the first voice, which could cause errors or incorrect behavior when
voices had varying season counts. Now calculates the maximum seasons
across all voices and safely handles cases where a specific voice
doesn't have the requested season index.
Anime content classification now respects the serial/preferSeries parameter
to determine whether to treat anime as a series or movie, improving content
type detection accuracy across both Makhno and UaTUT controllers.
Add support for Ukrainian, Russian, and English category names in both
Makhno and UaTUT controllers. This improves internationalization by
recognizing category names in different languages.
Supported categories now include:
- Series: Серіал, Сериал, Аніме, Аниме, Мультсеріал, Мультсериал, TV
- Movies: Фільм, Фильм, Мультфільм, Мультфильм, Movie
Refactored filtering logic to use dedicated helper methods for better
code maintainability.
Allow APN configuration to be specified as a single string value
in addition to the existing boolean + host format. When 'apn' is
a string, it is used as the host and enabled is set automatically.
Add StripLampacArgs method to remove account_email, uid, and nws_id
parameters from streaming URLs before processing. This enhances privacy
by preventing user identification data from being passed through to
external services. The change is applied across all controllers that
handle stream URL generation.
When episode URLs contain 'ashdi.vip', use HostStreamProxy to generate
the play URL instead of the standard accsArgs call URL method. This
provides better compatibility with this specific streaming provider.
Refactor episode link construction to use a common BuildStreamUrl method
in Makhno and UaTUT controllers, and add streamlink support to UAKino
controller. This change standardizes how streaming URLs are generated and
passed to the episode template, reducing code duplication and improving
maintainability.
Reorder parsing logic to attempt JSON extraction first before falling back
to regex-based m3u8 and source tag matching. This ensures structured data
is preferred when available, with fallbacks for legacy formats.
Add diagnostic logging when parsing fails to help identify issues with
voice and file data extraction. Enhance file array detection to handle
Playerjs-based content by implementing range-based search strategy.
Add fallback mechanisms for locating file arrays using different quote
styles and regex matching. Include debug logging to track JSON parsing
and voice extraction process.
Replace regex-based file array extraction with a more robust bracket
matching algorithm that properly handles nested structures. The new
implementation uses manual parsing to track bracket depth, ensuring
correct extraction of JSON arrays from HTML content.
Add ApnHelper class to handle APN configuration and URL wrapping functionality.
This includes methods for parsing configuration, applying settings, detecting
specific domains, and building proxied URLs with proper encoding. Also fix
regex patterns in MakhnoInvoke to correctly match URLs with double quotes.
Integrate Makhno video streaming service with support for movies and
serials. The module provides search functionality, player data retrieval,
and streaming capabilities through multiple external APIs including
Wormhole, Ashdi, and UaTUT. Features include:
- HTTP controller for handling playback requests
- Support for multiple voice translations and seasons
- Proxy management and caching
- TMDB integration for metadata enrichment
- Online API integration for event handling
Added language validation to only allow online API calls for Japanese and
Chinese language variants. Early return for unsupported languages prevents
unnecessary API calls.
Add serial parameter to Search method to enable enhanced search logic for
series content. When serial flag is set, perform additional search using
English title to find more results. Improve voice selection by properly
handling display names with fallbacks to key or default label.
Implement comprehensive multi-season handling for AnimeON and Mikai
controllers to properly display and navigate anime series with multiple
seasons.
For AnimeON:
- Fix season numbering to use actual season numbers instead of array indices
- Group seasons by SeasonNumber property with fallback to index-based numbering
- Update season selection links to use correct season identifiers
For Mikai:
- Add relation fetching to discover sequels, prequels, and related anime
- Implement season detail collection and ordering by release date
- Refactor voice building to support multiple seasons per voice actor
- Update season selection UI to display all available seasons
- Add MikaiRelation and MikaiRelationAnime models for API data handling