# 🎬 Mozisarok Videó Feltöltő Kliens (Videa & VK)

Professzionális, platformfüggetlen Python videó feltöltő és menedzselő alkalmazás **Windows 11** és **Ubuntu Linux** rendszerekhez.

Támogatja a **Videa.hu** és **VK.com** felületekre történő feltöltést, a **Mozisarok API** integrációt, az automatikus embed link konvertálást, a több fiókos használatot, a párhuzamosítás beállítását és a **MySQL** adatbázis kapcsolatkészletet (connection pool).

---

## 🌟 Főbb Jellemzők

1. **Szolgáltatók & Bővíthetőség:**
   - **Közvetlen lemezről olvasó adatfolyam (Zero-RAM Disk Streaming):**
     - A videófájlokat **NEM tölti be a memóriába (RAM-ba)**, hanem közvetlenül a lemezről (disk) olvassa és küldi el a hálózatra a [`DiskStreamingMultipart`](file:///d:/projects/uploader/stream_uploader.py#L8-L125) osztály segítségével.
     - **Külön állítható szeletméret (Chunk size):** Videa és VK esetén is külön-külön megadható a szelet mérete (pl. 1, 4, 8, 16, 32, 64 MB).
     - **Alapértelmezett méret:** Mindkét szolgáltatóhoz **16 MB** (`DEFAULT_VIDEA_CHUNK_SIZE_MB = 16`, `DEFAULT_VK_CHUNK_SIZE_MB = 16`).
     - Így akár 10 GB, 20 GB vagy 50 GB feletti filmeknél is stabil, minimális memóriahasználat mellett és optimális hálózati sebességgel zajlik a feltöltés.
   - **Videa.hu:**
     - Több fiókos kezelés (`accounts` táblában tárolva).
     - Automatikus munkamenet-ellenőrzés és bejelentkezés.
     - **"Nem listázott" (unlisted / mode: 2)** láthatóság kötelező érvényesítése.
     - Állítható párhuzamosítás: beállítható, hogy egyszerre hány videó töltsön fel (pl. 1, 2, 3, 5 db).
     - **Teljes körű konvertálási várakozás & Video Scraper konvertálás:**
       - Feltöltés után a rendszer **nem küldi el azonnal a nyers linket**, hanem a Videa belső getProgressByRequest interfészén keresztül megvárja, amíg a Videa a videót 100%-ban teljesen lekonvertálja (élő százalékos visszajelzéssel a Web UI-on és a CLI-ben).
       - A konvertálás befejeztével a [Video Scraper](http://node6.lunes.host:3093/api/process) segítségével legenerálja a tiszta embed lejátszó linket (https://videa.hu/player?f=...&default_quality=highest).
       - Kizárólag ezt a végleges, lekonvertált embed linket küldi be a Mozisarok-ra.
     - **Azonnali megszakítás / törlés:** A folyamatban lévő feltöltés vagy konvertálás bármelyik pillanatban azonnal megszakítható és törölhető.
   - **VK.com:**
     - VK API `video.save` és közvetlen videófájl feltöltés.
     - Automatikus `video_ext.php` embed link generálás.
   - **Bővíthető architektúra:** OOP provider minta (`BaseVideoProvider`), amelyhez később tetszőleges új platform könnyen hozzáadható.

2. **Mozisarok API Integráció (5 lépéses folyamat):**
   - **1. Hitelesítés:** Token érvényességének automatikus ellenőrzése (`GET /auth/validate`), szükség esetén bejelentkezés (`POST /auth/login`).
   - **2. Keresés & Adatlap választás:** Keresés cím alapján (`GET /media/search`), gazdagított adatlapok (borítókép, leírás, évszám, TMDB ID, sorozatoknál évad/epizód).
   - **3. Előkészítés & Várakozási Sor (Queue):** Videófájl hozzárendelése az adatlaphoz (nyelv, felirat, minőség, évad/epizód), sorba helyezés és **manuális indítás**.
   - **4. Link konvertálás & Mozisarok beküldés & MySQL mentés:** Embed formátumra alakítás, beküldés jóváhagyásra a Mozisarok-ra (`POST /media/links`), valamint az adatlap, videó linkek és a használt fiók elmentése a MySQL adatbázisba.
   - **5. Ellenőrzés:** Mozisarok videó státuszának és az embed link elérhetőségének ellenőrzése.

3. **MySQL Adatbázis & Kapcsolatkészlet:**
   - A megadott Aiven MySQL adatbázis (`uploader`).
   - Szálbiztos kapcsolatkészlet (Connection Pool) alapértelmezetten **4 aktív csatlakozással** (`DB_POOL_SIZE=4`).
   - 4 strukturált tábla: `accounts`, media_items, `videos`, `app_settings`.
   - Részletes állapotkövetés a `videos.status` mezőben (`várakozik`, feltöltés alatt, feltöltve, konvertálás alatt, eküldés alatt, kész, `megszakítva`).

4. **Biztonság & Titkosított Jelszó- és Tokenkezelés (AES-128 / Fernet):**
   - **Teljes hitelesítőadat-titkosítás az adatbázisban:** A MySQL-ben tárolt fiókjelszavak (`accounts`.password), API tokenek (`accounts`.token), munkamenet sütik (`accounts`.cookies) és a Mozisarok JWT token (`app_settings`.mozisarok_token) AES-128-CBC + HMAC-SHA256 (Fernet) algoritmussal titkosítva kerülnek elmentésre.
   - **Feloldó kulcs a konfigurációs fájlban (`.env`):** A feloldó kulcs az `ENCRYPTION_KEY` változóban található.
   - **Automatikus kulcsgenerálás:** Ha a `.env` fájl hiányzik vagy az `ENCRYPTION_KEY` üres, a rendszer indításkor automatikusan generál egy erős kriptográfiai kulcsot és elmenti a `.env` fájlba.
   - **Egyéni feloldó jelszó támogatása:** Ha tetszőleges emberi jelszót adsz meg (pl. `ENCRYPTION_KEY=SajatJelszavam123`), a modul automatikusan SHA-256 hash levezetéssel képzi belőle a szükséges 32 bájtos kulcsot.
   - **Automatikus migráció:** Az alkalmazás induláskor automatikusan átvizsgálja az adatbázist, és a még titkosítatlan, korábbi jelszavakat és tokeneket egy menetben letitkosítja a helyükön.
   - **Transzparens működés:** A háttérfolyamatok és szolgáltató modulok (Videa/VK bejelentkezés, Mozisarok API) olvasáskor transzparensen a feloldott adatokat kapják vissza.

5. **Automatikus Rendszer- és Állapot-helyreállítás (Crash & Stop Recovery):**
   - **Visszaállás váratlan leállás, lefagyás vagy újraindítás után:** A rendszer a MySQL adatbázisban tárolt állapotok alapján pontosan felméri, hogy melyik videó hol tartott.
   - **Feltöltés alatt álló videók védelme:** A `feltöltés alatt` lévő videókat **NEM folytatja automatikusan** a rendszer, elkerülve a nem kívánt sávszélesség-fogyasztást és a sérült töredékek feltöltését. Ezek státusza automatikusan `várakozik`-ra vált (`A feltöltés korábban félbeszakadt rendszerleállás miatt. Manuálisan indítható.`), és bekerülnek a várakozási sorba szüneteltetett állapotban.
   - **Ellenőrzés alatt álló videók befejezése:** Az `ellenőrzés alatt`, `beküldés alatt`, `konvertálás alatt` lévő videóknál automatikusan leellenőrzi a rendszer, hogy a videó fel van-e töltve és elérhető-e a tárhelyen/Mozisarokon. Ha elérhető és rendben van, automatikusan lezárja és `kész` állapotba állítja.

7. **Rendszernapló & Valós Idejű Hibakeresés (Logs & Debugging):**
   - **Központi többcsatornás naplózás:** Konzolra, forgó fájlba (logs/app.log, 10MB x 5 biztonsági mentés) és szálbiztos in-memory gyűrűpufferbe (max 2500 bejegyzés) íródó naplók.
   - **Beépített webes naplóterminál (Web UI):**
     - Dedikált **6. Rendszernapló** fül és gyorselérési gomb a fejlécben.
     - Valós idejű élő frissítés (2 másodperces automatikus lekérés, zöld állapotjelzővel).
     - Szűrés szintek szerint (ERROR, WARNING, INFO, DEBUG), modulok szerint (VideaProvider, VKProvider, QueueManager, MozisarokClient stb.) és dinamikus szöveges keresővel.
     - Egykattintásos naplóletöltés (GET /api/logs/download) és kiürítés (DELETE /api/logs).
   - **Részletes debug információk Videa és VK hibákhoz:** Pontos HTTP válaszkódok, átirányítási URL-ek, munkamenet státusz és válaszminta naplózása a hibák azonnali felderítéséhez.

8. **Kétféle kezelőfelület (Web & CLI):**
   - **Modern Webes Dashboard (FastAPI):** Letisztult sötét téma, beépített többplatformos fájlböngésző, élő haladási sávok, fiókkezelő modal.
   - **Interaktív Terminál Kliens (Rich CLI):** Ideális Ubuntu szerverekhez / SSH hozzáféréshez és Windows PowerShellhez.

---

## 🚀 Telepítés és Indítás

### Követelmények:
- Python 3.10+
- Internetkapcsolat a Mozisarok API, Videa, VK és a MySQL felhő eléréséhez

### 1. Windows 11:
Egyszerűen kattints duplán a `start.bat` fájlra, vagy futtasd PowerShellből:
```powershell
.\start.bat
```
Vagy kézzel:
```powershell
pip install -r requirements.txt
python main.py --web
```
Ezután nyisd meg a böngészőben: **http://localhost:8000**

Terminál felülethez:
```powershell
python main.py --cli
```

### 2. Ubuntu Linux:
Futtasd a mellékelt bash scriptet:
```bash
chmod +x start.sh
./start.sh
```
Vagy kézzel:
```bash
python3 -m pip install -r requirements.txt
python3 main.py --web
```
Terminál felülethez:
```bash
python3 main.py --cli
```

---

## 📁 Projekt Struktúra

```
d:\projects\uploader\
├── API.md                      # Mozisarok Backend API leírás
├── info.txt                    # Végpontok és MySQL kapcsolati adatok
├── config.py                   # Központi konfiguráció és környezeti változók
├── database.py                 # MySQL kapcsolatkészlet (4 conn) és adatbázis műveletek
├── mozisarok_client.py         # Mozisarok API kliens (auth, search, links, verify)
├── converter.py                # Embed link konvertáló kliens (node6.lunes.host)
├── queue_manager.py            # Feltöltési várakozási sor és párhuzamos szálkezelő
├── stream_uploader.py          # Lemezről olvasó (Zero-RAM) adatfolyam-kezelő
├── logger_config.py            # Rendszernapló konfiguráció (Konzol, Forgó fájl, Memória puffer)
├── logs/                       # Rendszernapló fájlok könyvtára (app.log)
├── app.py                      # FastAPI webalkalmazás és REST API
├── cli.py                      # Interaktív terminál felület (Rich)
├── main.py                     # Fő indítófájl (--web vagy --cli kapcsolóval)
├── requirements.txt            # Python csomagfüggőségek
├── start.bat                   # Gyorsindító script Windows 11-re
├── start.sh                    # Gyorsindító script Ubuntu Linuxra
├── static/                     # Webes felület (HTML, CSS, JS)
│   ├── index.html
│   ├── style.css
│   └── app.js
└── tests/                      # Automatizált tesztek
    └── test_uploader.py
```

---

## 🧪 Tesztek Futtatása

A tesztcsomag ellenőrzi a MySQL kapcsolatot, a fiókműveleteket, az adatlap- és videómentést, az embed konvertálót és a Mozisarok keresést:
```bash
python -m unittest tests/test_uploader.py
```
