Add CollapseNearDuplicates method to filter near-duplicate torrent results based on quality, size, seeders, peers, season, voice, and title. Improve BuildRid to use guid/details as stable identifiers when infohash is unavailable. Add season labels to release display in Controller. Add Guid property to JackettResult model.
Removes all UaTUT-related code including:
- Search and resolution methods in MakhnoInvoke.cs
- Search result processing in Controller.cs
- API host configuration in ModInit.cs
This completes the migration to KlonFUN service for content resolution.
Extract StripMoviePrefix method across all movie providers to remove year
prefixes (e.g., "2023 - Movie Title" → "Movie Title") from displayed titles.
Simplify label construction in UaTUT controller by removing redundant movie
name prefix from variant labels.
Add new `webcorshost` configuration option that allows routing all HTTP requests through a CORS proxy for modules that require it. This feature enables compatibility with modules that need CORS bypass while maintaining support for existing features like `streamproxy` and `apn`. Also reduces disconnect time from max 16 hours to 4 hours for improved reconnection behavior.
- Reorganize sources into TVShows/Movies and Anime/Dorama categories
- Update module list in repository.yaml to reflect current services
- Replace CikavaIdeya and UAKino with Mikai and Makhno services
- Update APN support section with current available sources
Update version numbers for AnimeON, Bamboo, CikavaIdeya, Makhno, Mikai,
UAKino, UaTUT, Uaflix, and Unimay modules to reflect latest releases.
Note that CikavaIdeya and UAKino have unusual binary-looking version
numbers that appear intentional.
Rename variables used to store search results across multiple controllers
to follow a consistent naming pattern (checkSeasons, checkEpisodes, checkResults)
instead of generic names like seasons, episodesInfo, and searchResults.
This improves code readability and maintains uniform variable naming
across the codebase.
Add checksearch functionality to validate online search availability
for multiple streaming services including AnimeON, Bamboo, CikavaIdeya,
Makhno, Mikai, StarLight, UAKino, UaTUT, Uaflix, and Unimay controllers.
Each controller now supports a checksearch parameter that returns
appropriate responses when online search validation is enabled.
Changed implicit variable declarations to explicit type declarations
for voiceForSeasons and tVoice variables to improve code clarity
and maintain consistent typing patterns in both controllers.
Add support for restricting season lists by specific voice selection,
implement proper redirect handling when selected season is unavailable
for chosen voice, and add season set validation to ensure consistent
navigation between voices with different season availability
Add logic to validate that the current voice's available seasons match
the selected voice season set before generating voice links. This ensures
consistent behavior when switching between voices with different season
availability.
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.