# TB Torrent for TizenBrew

Lokalny odtwarzacz torrent/magnet dla telewizorów Samsung Tizen. Usługa Node.js pobiera fragmenty wybranego pliku do rotacyjnego cache w RAM, udostępnia lokalny strumień HTTP Range, a aplikacja TV odtwarza go przez Samsung AVPlay. Telefon w tej samej sieci działa jako panel sterowania.

> Projekt jest przeznaczony wyłącznie do materiałów, do których użytkownik ma prawa lub zgodę na pobieranie i rozpowszechnianie.

## Wersja 12.0.0

W TizenBrew moduł instalujemy jako:

```text
tbtorrent@11
```

Zapis `@11` wybiera najnowszą wersję z gałęzi `11.x.x`.

### Napisy zewnętrzne

Wersja 11 nie dodaje przesłanego pliku ASS, SSA, SRT ani VTT do listy ścieżek AVPlay i nie korzysta z zawodnego na tym modelu TV `setSubtitlePosition()` dla zewnętrznych napisów.

- oryginalny upload pozostaje niezmieniony,
- aplikacja tworzy w RAM własną oś czasu wpisów,
- wartości `-500`, `-100`, `0`, `+100`, `+500 ms` przesuwają bezpośrednio czas początku i końca każdego wpisu,
- napisy są wybierane z już przesuniętej osi czasu według aktualnej pozycji filmu,
- nakładające się dialogi mogą być pokazywane razem,
- techniczne klatki animacji karaoke ASS są pomijane wyłącznie w kopii przeznaczonej do wyświetlania,
- identyczne zdarzenia powielone na kilku warstwach ASS są scalane,
- panel pokazuje liczbę zdarzeń źródłowych, użytecznych wpisów, pominiętych animacji i scalonych duplikatów,
- użytkownik może ustawić rozmiar liter, odstęp między literami i odstęp między wierszami,
- ustawienia wyglądu są zapisywane lokalnie na telewizorze i nie zmieniają oryginalnego pliku.

Dzięki temu zewnętrzne napisy nie pojawiają się w polu „Napisy wbudowane”, a synchronizacja nie zależy od obsługi zewnętrznego pliku przez konkretny firmware AVPlay.

### Sterowanie odtwarzaniem

- pauza pokazuje nowoczesną ikonę oraz powiększony, szerszy pasek umieszczony niżej, z bieżącym czasem i długością filmu,
- animacja Play jest białym trójkątem z cieniem, bez czarnego prostokąta,
- przycisk Wstecz podczas pełnoekranowego odtwarzania najpierw pauzuje film, a dopiero potem pokazuje ekran z kodem QR,
- szybkie przewijania są łączone i wykonywane kolejno,
- pierwsze niedokładne cofnięcie AVPlay otrzymuje jedną kontrolowaną korektę.

### Cache i czyszczenie

- cache filmu działa wyłącznie w RAM,
- dostępne limity: `32`, `64`, `96`, `128`, `192`, `256`, `320`, `384`, `448 MB`,
- ustawienie domyślne: `64 MB`,
- zatrzymanie torrentu zwalnia bieżący cache,
- pełne czyszczenie skanuje pozostałości wcześniejszych wersji,
- usługa wyłącza się po zamknięciu aplikacji TV.

Port panelu wersji 11: `8810`. Przy starcie usługa próbuje wygasić starsze instancje działające na portach `8790–8809`.

## Pierwsze uruchomienie

1. Zainstaluj `tbtorrent@11`.
2. Uruchom aplikację na telewizorze.
3. Zeskanuj nowy kod QR; adres panelu powinien używać portu `8810`.
4. Opcjonalnie wykonaj „Sprawdź zajęte miejsce TB Torrent” oraz „Wyczyść wszystkie dane TB Torrent”.
5. Wczytaj torrent, wybierz film, prześlij napisy i sprawdź w panelu komunikat `renderer: oś czasu TB Torrent`.

## Budowanie i testy

```bash
npm install
node scripts/build-engine.js
node scripts/build-mod.js
npm run check
npm run test:subtitles
npm run test:subtitle-timeline
npm run test:subtitle-delay
npm run test:panel
npm run test:app-safety
npm run test:upload
npm run test:memory-cache
npm run test:rolling
npm run test:rolling-stream
npm run test:rolling-destroy
npm run test:service
npm run test:node12
npm run test:torrent
npm run test:vm
npm run test:vm:torrent
npm run test:stability
npm run test:seek-coalescing
npm run test:legacy-cache
npm run test:legacy-shutdown
npm run test:cache-config
npm run test:full-cleanup
npm run test:locked-scan
npm run test:tv-watchdog
npm run pack:preview
```

## Publikacja

```bash
cd /home/surviman/ai-workspace/apps/tizenbrew-torrent-player
npm publish --access public
```

Nazwa paczki:

```text
tbtorrent
```

## Dalszy plan: VPN

Obsługa VPN pozostaje oddzielnym etapem rozwoju. Nie jest dołączona do wersji 12, aby nie zmieniać działającego toru torrent → cache RAM → AVPlay.
