150 Commits

Author SHA1 Message Date
Felix
7fbe28421d
Merge pull request #26 from lampame/uakino
Uakino
2026-05-15 20:26:54 +03:00
Felix
79f75ef168 refactor(uakino): resolve Ashdi VOD links before stream URL assembly
Switch movie and serial stream preparation to resolve Ashdi VOD URLs first
and then pass the resolved value into stream URL construction.

Also make serial handling asynchronous and inject the invoke dependency so
episode file links can be normalized consistently with movie playback flow.
2026-05-15 20:16:58 +03:00
Felix
d145313c5b fix(uakino): always request ashdi vod with multivoice parameter
Ensure Ashdi VOD fetches include the `multivoice` query flag so the response
contains the full stream array instead of a single variant. This restores
complete track availability for downstream parsing and labeling logic.
2026-05-15 20:08:08 +03:00
Felix
b6a884d6e3 feat(uakino): return all Ashdi VOD streams with per-track labels
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.
2026-05-15 20:03:34 +03:00
Felix
460f527a6f refactor(uakino): stop appending multivoice query in Ashdi VOD resolver
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.
2026-05-15 19:58:20 +03:00
Felix
6800c5d393 fix(uakino): parse Ashdi file arrays to resolve direct stream URL
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.
2026-05-15 19:53:00 +03:00
Felix
a2071449f9 fix(uakino): group movie stream entries when voice tabs are absent
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.
2026-05-15 19:40:06 +03:00
Felix
9e677b4113 refactor(uakino): remove PlayerJS decode fallback from Ashdi resolver
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.
2026-05-15 19:30:42 +03:00
Felix
90e7ec4602 build(uakino): include PlayerJs decoder shared dependency
Add `PlayerJsDecoder.cs` to the UAKino module manifest so the module ships
with the shared PlayerJS decoding utility required at runtime.
2026-05-15 19:28:13 +03:00
Felix
15ff1ee10c refactor(uakino): centralize Ashdi VOD resolution and dedupe movie streams
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.
2026-05-15 19:26:55 +03:00
Felix
80f0869401 fix(uakino): add HTML page fallback when playlist API returns no data
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.
2026-05-15 19:06:29 +03:00
Felix
a54bc0e435 refactor(uakino): restructure search results into grouped season entries
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.
2026-05-15 19:05:01 +03:00
Felix
317cb6292c feat(uakino): add UAKino online source module
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.
2026-05-15 18:46:00 +03:00
Felix
adfa97e810 fix(jacktor): use season-specific extracted year in search URLs
Previously, the same year parameter was used for all seasons in generated
search links. The change calculates a distinct year per season by finding
the minimum ExtractedYear from torrents that contain that season and have
a valid year (>1900), falling back to the provided year when no matches
exist. This improves the accuracy of search results for multi-season
content where seasons may have different release years.
2026-05-05 22:01:02 +03:00
Felix
5829c65426 refactor(jacktor): simplify year validation logic in search filtering
Extract year extraction before conditional check and combine conditions
into a single if statement. This improves readability without changing
the filtering behavior.
2026-05-05 21:55:23 +03:00
Felix
5e551b2746 refactor(imports): migrate PlayerJsDecoder from global to explicit usings
Remove global using directive for LME.Common.Playerjs from GlobalUsings.cs
and add explicit using statements in module Invoke files that reference
PlayerJsDecoder. This improves namespace clarity and reduces unnecessary
global imports across the codebase.
2026-05-05 21:53:25 +03:00
Felix
cfdf0f2d76 refactor(playerjs): rename PlayerJsDecoder namespace to LME.Common.Playerjs
Move the PlayerJsDecoder class from Shared.Engine to LME.Common.Playerjs
namespace to align with the common library structure. Update global usings
in GlobalUsings.cs and add references to PlayerJsDecoder.cs in module
manifest files to reflect the new namespace location.
2026-05-05 21:50:50 +03:00
Felix
020f331729 feat(shared): implement player payload extraction and decoding infrastructure
Add PlayerJsDecoder class with comprehensive methods for extracting player
payloads from HTML content, handling atob-encoded strings, and parsing JSON
configurations. The implementation includes regex patterns for various
encoding schemes, loose JSON parsing with trailing comma tolerance, and
helper function resolution. Additionally, configure global usings for
Shared.Services, Shared.Services.Hybrid, and Shared.Models.Base to improve
type accessibility across the shared library.
2026-05-05 21:44:31 +03:00
Felix
fd01af1e2c refactor(shared): consolidate player payload decoding into Shared.Engine namespace
Move PlayerPayload class into PlayerJsDecoder.cs and rename namespace to
Shared.Engine. Remove linked source file references from anime projects
(AnimeON, Mikai, NMoonAnime) to prevent duplicate compilation and ensure
single source of truth through Shared.dll.
2026-05-05 21:40:22 +03:00
Felix
b253a21cdf refactor(shared): migrate player payload decoding to common namespace
Move PlayerJsDecoder and PlayerPayload from LME.Shared to LME.Common.Playerjs
namespace. Replace ProjectReference with direct Compile includes for source files
in AnimeON, Mikai, and NMoonAnime projects. Update all using directives to
reference the new namespace across Invoke files.

Note: Controller.cs contains a typo (Firts instead of First) that requires
correction in a subsequent commit.
2026-05-05 21:31:48 +03:00
Felix
60867dabae Update 2026-05-05 20:52:40 +03:00
Felix
0f89b08ee1 fix(jacktor): skip year extraction and tolerance check for serial content
Move year extraction and comparison inside conditional to only apply for
non-serial content (serial != 1). Previously, year tolerance was enforced
for all search results, causing serial content to be incorrectly filtered
when year mismatches occurred. Serial content often spans multiple years,
so year matching is less reliable for identification. This change ensures
serials bypass the year check while movies/single episodes still benefit
from year-based filtering. Bump module version to 2.2.
2026-05-05 20:52:31 +03:00
Felix
d36f29b7be refactor(shared): extract player payload decoding logic into shared library
Move player payload extraction and decoding logic from individual modules
(AnimeON, Mikai, NMoonAnime) into a new LME.Shared library. This reduces
code duplication and centralizes the parsing logic for better maintainability.
The new PlayerJsDecoder class handles various player script formats including
atob-encoded payloads, JSON.parse helpers, and different file payload structures.
All consuming modules now reference the shared project and use the common decoder.

Also fix typo in NMoonAnime Controller (Firts -> First).
2026-05-05 20:40:13 +03:00
Felix
0f6b048545 fix(controller): adjust continue statement placement in stream loop
Move the continue statement outside the conditional block to ensure
correct loop control flow. The previous nesting could cause unintended
skipping or processing of stream iterations based on condition evaluation,
potentially leading to logic errors in stream handling.
2026-05-02 16:11:21 +03:00
Felix
b00795c464 refactor(controller): restructure Ashdi stream handling logic
Move the foreach loop inside the null/empty check for ashdiStreams to ensure
proper iteration only when streams are available. This improves code readability
and prevents potential issues with iterating over null or empty collections.
2026-05-02 16:08:27 +03:00
Felix
04bb7d48b5 Усі модулі тепер коректно передають об'єкт SubtitleTpl у шаблони Lampac, що дозволяє відображати субтитри в інтерфейсі плеєра. 2026-05-02 15:54:56 +03:00
Felix
ce58434c31 Add DW Indexer 2026-04-20 20:30:27 +03:00
Felix
9a3ebd5f3c docs: update README with new APN configuration and proxy URL changes 2026-04-20 09:17:00 +03:00
Felix
77f712feef
Merge pull request #25 from lampame/Shared
## Що зроблено

Цей PR рефакторить спільний повторюваний код у `LME.*` модулях і виносить його в окрему спільну теку `LME.Shared`, яка підключається через `syntaxPaths` у `manifest.json`.

### Основні зміни

1. Додано спільні файли:
- `LME.Shared/GlobalUsings.cs`
- `LME.Shared/Apn/ApnHelper.cs`
- `LME.Shared/Online/OnlineRegistry.cs`
- `LME.Shared/Update/ModuleUpdateService.cs`

2. Оновлено всі `LME.* /manifest.json`:
- додано `syntaxPaths` для підключення спільних `.cs` файлів із `LME.Shared`.

3. Спрощено `ModInit.cs` у всіх `LME.*`:
- прибрано дубльований `RegisterWithSearch(...)` і замінено на `OnlineRegistry.RegisterWithSearch(...)`.
- прибрано дубльований `UpdateService/ConnectResponse` і замінено на wrapper над `ModuleUpdateService`.

4. Видалено дублікати з модулів:
- `LME.*/GlobalUsings.cs`
- `LME.*/ApnHelper.cs` (де були)

5. Виправлено namespace-конфлікт:
- `LME.Shared.Online` -> `LME.Common.Online`
- `LME.Shared.Update` -> `LME.Common.Update`
- оновлено `global using` відповідно.

6. Виправлено збірку `LME.JackTor`:
- додано `using Microsoft.AspNetCore.Mvc;` у `LME.JackTor/ModInit.cs` (для `ActionResult` у `UpdateService.Validate`).

7. Оновлено `README.md`:
- зроблено читабельну структуру.
- додано повноцінні UA + EN секції.
- додано навігацію на початку.
- явно зазначено, що при вибірковому `modules:` у `repository.yaml` потрібно додавати `LME.Shared`.

## Чому це потрібно

- Менше дублювання коду між модулями.
- Простіше супроводжувати й оновлювати спільну логіку.
- Менше ризику розсинхрону поведінки між модулями.

## Важливо для користувачів

При вибірковому встановленні через `repository.yaml` треба включати `LME.Shared`:

```yaml
modules:
  - LME.Shared
  - LME.AnimeON
  - LME.Unimay
```

Інакше модулі з `syntaxPaths` не знайдуть спільні файли під час компіляції.
2026-04-17 17:51:06 +03:00
Felix
f4f132734f feat: add Microsoft.AspNetCore.Mvc namespace to ModInit.cs 2026-04-17 17:44:28 +03:00
Felix
95ebe28999 refactor: rename LME.Shared namespaces to LME.Common for consistency 2026-04-17 17:43:23 +03:00
Felix
94fcbc535e docs: update project documentation in README.md 2026-04-17 17:16:55 +03:00
Felix
35c16258f8 refactor: centralize module update logic and search registration into shared services while removing redundant helper files 2026-04-17 17:16:47 +03:00
Felix
fc68b69fd2
Update Docker volume path in README 2026-04-16 10:19:06 +03:00
Felix
06977f1088
Update README.md 2026-04-16 10:17:32 +03:00
Felix
2902d850df feat: add manifest.json for module configuration
Adds a new manifest.json file with enable and dynamic flags to configure module behavior.
2026-04-13 15:03:39 +03:00
Felix
af865b9373 fix: remove redundant code block and duplicate initialization logic in Controller.cs 2026-04-12 11:27:17 +03:00
Felix
543aa5f047 refactor: replace dots with underscores in module route paths and identifiers
- Updated all HTTP route paths from "lite/lme.module" to "lite/lme_module" across LME.AnimeON, LME.Bamboo, LME.JackTor, LME.KlonFUN, LME.Makhno, LME.Mikai, LME.NMoonAnime, LME.StarLight, LME.UafilmME, LME.Uaflix, and LME.Unimay controllers
- Standardized error messages, log prefixes, cache keys, and other string identifiers to use underscores instead of dots for consistency with naming conventions
- Applied changes to ModInit.cs, OnlineApi.cs, and invoke classes to maintain uniformity in module references
2026-04-12 11:14:26 +03:00
Felix
a45e26537a docs(readme): update module references with LME prefix and repository URL
- Add Ukrainian note explaining LME prefix usage
- Update all module names in lists and examples to include LME prefix
- Change repository URL to lampac-ukraine organization
- Modify Docker volume path and YAML config accordingly
- Remove APN support section
- Add log to .gitignore
2026-04-12 10:23:39 +03:00
Felix
2cb90e15a9 refactor(modules): prefix namespaces and identifiers with LME 2026-04-12 10:20:44 +03:00
Felix
581b3438a5 refactor(modules): prefix namespaces and identifiers with LME
- Updated namespaces across all online modules to include LME prefix (e.g., AnimeON -> LME.AnimeON)
- Changed routes from /lite/plugin to /lite/lme.plugin
- Prefixed cache keys with lme. (e.g., jacktor: -> lme.jacktor:)
- Updated module settings names and init calls to LME.Plugin
- Bumped version numbers and updated manifest files with LME-prefixed class names
- Replaced OnError calls to use lme.plugin identifiers
- Modified log messages to include lme.plugin prefix for consistency
2026-04-12 09:29:49 +03:00
Felix
8e2ddcc3de refactor(modules): set enabled to true by default in module initialization
Update all ModInit.cs files to create a defaults object, set enabled=true, and pass it to ModuleInvoke.Init for consistent default behavior across modules. This ensures modules are enabled by default without altering existing configurations.
2026-04-11 17:37:46 +03:00
Felix
a5173e6389 refactor(.qwen): remove configuration settings files
Eliminate outdated .qwen settings.json and settings.json.orig to streamline repository structure and align with updated ignore rules.
2026-04-10 16:31:14 +03:00
Felix
0e1d1472ba chore: add .qwen to .gitignore 2026-04-10 16:30:44 +03:00
Felix
e784b09e6d refactor(modules): migrate with_search registration to CoreInit.conf.online
All modules with search functionality now register via CoreInit.conf.online.with_search
instead of the previous Online.ModInit.conf.with_search location.

Updated modules:
- AnimeON, Bamboo, JackTor, KlonFUN, Makhno, Mikai
- NMoonAnime, StarLight, UafilmME, Uaflix, Unimay

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-04-10 16:25:18 +03:00
Felix
b8f3ea7568 docs: rename project title to Lampac NextGen 2026-04-09 15:50:54 +03:00
Felix
ff90f149f0 chore: update .gitignore to exclude vscode settings
Add .vscode/settings.json to the ignore list to prevent committing local editor configurations.
2026-04-04 12:17:53 +03:00
Felix
b1a7ce510d feat(uafilmme): add UafilmME streaming plugin with APN support
Integrate a new online streaming source for UafilmME, including API invocation, search, and playback functionality. Adds APN proxy helper for Ashdi streams, module initialization, and related models and controllers to extend the existing online framework.
2026-04-04 12:09:18 +03:00
Felix
0aed459fab perf(uaflix): implement lazy season parsing for serials
Refactor season selection logic to use lazy loading instead of full aggregation, improving performance when choosing seasons. Added GetSeasonIndex and GetSeasonEpisodes methods, and SeasonUrls property to PaginationInfo for efficient season URL management.
2026-04-04 08:48:37 +03:00
Felix
31549455ee feat(apn): add magic_apn support for Ashdi streams
Introduce a new configuration option `magic_apn` that allows automatic enabling of APN for Ashdi streams when using the inner player. The configuration is an object with an `ashdi` property that specifies the host to use for Ashdi APN.

Changes include:
- Add `TryGetMagicAshdiHost` method to parse `magic_apn` configuration
- Add `NormalizeHost`
2026-04-01 18:54:32 +03:00