Add a dedicated resolver that parses the Ashdi multivoice JSON array and
returns every available stream entry instead of a single resolved URL.
Update controller fallback handling to build MovieTpl output from the full
stream list, preserving optional item titles as display labels and defaulting
to "Фільм" when absent. This exposes separate playable variants in results
and avoids collapsing multivoice entries into one stream link.
Remove automatic `?multivoice` query injection when resolving Ashdi VOD
URLs. Each VOD now resolves through its own stream endpoint without
forcing voice aggregation into a single mixed array.
This keeps stream selection isolated per item and avoids unintended
cross-voice merging during direct link resolution.
Handle Ashdi responses where `file` contains a JSON array encoded in the
page script instead of a plain URL. Extract the balanced array payload,
parse it safely, and return the first stream `file` entry when present.
This prevents unresolved VOD links when complex playlist structures are
embedded inline and keeps existing simple URL handling unchanged.
Handle playlist items differently when `playlists-lists` voice tabs are
missing so film pages no longer collapse multiple stream versions into a
single fallback voice group.
When tabs are absent, treat each `li` as a stream variant and resolve its
target voice by `data-voice` (or item text) with on-demand group creation.
Keep existing tab-based matching logic unchanged for serial/episode layouts.
Drop the secondary PlayerJsDecoder extraction path and keep complex VOD
payloads untouched by returning the original value. Align the module
manifest by removing the now-unused shared PlayerJsDecoder dependency.
Move Ashdi URL handling into a dedicated resolver in `UAKinoInvoke` and
reuse it from controller paths instead of appending query params inline.
Resolve Ashdi pages to direct player file URLs, with fallback extraction
strategies and safe error handling, then build stream links from resolved
targets.
Avoid duplicate movie entries by skipping already processed resolved URLs,
and propagate the selected season number when rendering episode metadata.
Handle cases where UAKino playlist requests return empty results by
resolving stream URLs directly from the content page HTML.
Add a fallback parser that extracts video sources from `link[itemprop=video]`
or `iframe#pre`, and use it to return playable movie or single-episode
responses instead of failing immediately.
Ensure Ashdi links consistently include `multivoice` for movie playback,
including episode file URLs, to improve stream compatibility.
Replace flat search result handling with a grouped model where each show
contains a list of season entries, enabling deterministic serial flow for
single-show and multi-season matches.
Update controller logic to branch serial/movie processing against grouped
results, add explicit season selection handling, and reuse selected season
URLs on follow-up requests.
Adjust search parsing to collect raw items, filter non-content entries, and
group by normalized show identity before caching, removing early year-based
filtering from cached returns.
Add new online source module for UAKino website providing movie and series search and playback functionality. Includes controller, model definitions, online API integration, search implementation with caching, and module initialization. Implements similar result handling for multiple search results and serial/movie playback differentiation.