From 8165ce41e3bf6863e53593436f40ddc42464dd52 Mon Sep 17 00:00:00 2001 From: Johnnybegood90 Date: Mon, 9 Mar 2026 14:27:40 +0100 Subject: [PATCH] =?UTF-8?q?Initial=20commit=20=E2=80=94=20GridTV?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 1 + README.md | 178 ++++++++ config.example.json | 5 + index.php | 1031 +++++++++++++++++++++++++++++++++++++++++++ setup.php | 264 +++++++++++ 5 files changed, 1479 insertions(+) create mode 100644 .gitignore create mode 100644 README.md create mode 100644 config.example.json create mode 100644 index.php create mode 100644 setup.php diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..d344ba6 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +config.json diff --git a/README.md b/README.md new file mode 100644 index 0000000..ce3ccd2 --- /dev/null +++ b/README.md @@ -0,0 +1,178 @@ +# ๐Ÿ“บ GridTV + +> Guide TV IPTV en temps rรฉel, pensรฉ pour [Tunarr](https://github.com/chrisbenincasa/tunarr) et toute source XMLTV/M3U. + +![PHP](https://img.shields.io/badge/PHP-8.0+-777BB4?style=flat-square&logo=php&logoColor=white) +![Nginx](https://img.shields.io/badge/Nginx-ready-009639?style=flat-square&logo=nginx&logoColor=white) +![License](https://img.shields.io/badge/license-MIT-blue?style=flat-square) + +--- + +## โœจ Fonctionnalitรฉs + +- ๐ŸŽ›๏ธ **Grille timeline** โ€” vue horizontale faรงon guide TV classique, avec ligne "maintenant" en temps rรฉel +- ๐Ÿ“ฑ **Responsive** โ€” vue liste optimisรฉe sur mobile +- โฑ๏ธ **Barre de progression** en direct sur le programme en cours +- ๐Ÿ•ถ๏ธ **Programmes passรฉs** attรฉnuรฉs automatiquement +- ๐Ÿ“‹ **Tooltip** au survol โ€” titre, synopsis, saison/รฉpisode, horaires, durรฉe +- ๐Ÿ”— **Boutons copie** EPG & M3U en un clic dans la topbar +- โš™๏ธ **Setup guidรฉ** au premier lancement โ€” zรฉro fichier ร  รฉditer ร  la main +- ๐Ÿ”„ **Rechargement automatique** de l'EPG toutes les 30 minutes +- 0๏ธโƒฃ **Zรฉro dรฉpendance** โ€” PHP vanilla + nginx, c'est tout + +--- + +## ๐Ÿ“ธ Aperรงu + +``` +โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” +โ”‚ MonGroupe / GridTV Lun 09 Mar 14:32:18 โ—€1h Maintenant 1hโ–ถ EPG M3U โ— LIVE โ”‚ +โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค +โ”‚ 1 Action โ”‚ โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆ Terminator โ–ˆโ–ˆโ–ˆโ–ˆ โ”‚ Die Hard โ”‚ ... โ”‚ +โ”‚ 2 Legend โ”‚ Bio de Jimi Hendrix โ”‚ โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆ โ”‚ ... โ”‚ +โ”‚ 3 Sรฉries โ”‚ Sopranos S02E07 โ–ˆโ–ˆโ–ˆโ–ˆ โ”‚ ... โ”‚ โ”‚ +โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ +``` + +--- + +## ๐Ÿš€ Installation + +### Prรฉrequis + +- Serveur web avec **PHP 8.0+** et **php-fpm** +- **Nginx** (ou Apache) +- Une source **EPG au format XMLTV** (ex: Tunarr, Jellyfin, xTeVe...) +- *(Optionnel)* Une playlist **M3U** + +--- + +### 1. Cloner le repo + +```bash +git clone https://github.com/Johnnybegood90/gridtv.git /var/www/gridtv +cd /var/www/gridtv +``` + +--- + +### 2. Permissions + +```bash +# Le serveur web doit pouvoir รฉcrire config.json lors du setup +chmod 775 /var/www/gridtv +chown -R www-data:www-data /var/www/gridtv +``` + +--- + +### 3. Configurer Nginx + +```nginx +server { + listen 80; + server_name guide.ton-domaine.fr; + + root /var/www/gridtv; + index index.php; + + location / { + try_files $uri $uri/ /index.php; + } + + location ~ \.php$ { + include snippets/fastcgi-php.conf; + fastcgi_pass unix:/run/php/php8.2-fpm.sock; + } +} +``` + +> ๐Ÿ’ก Adapte la version de PHP (`php8.2-fpm`) ร  celle installรฉe sur ton serveur. + +```bash +nginx -t && systemctl reload nginx +``` + +--- + +### 4. Premier lancement โ€” Setup + +Ouvre ton navigateur sur `http://guide.ton-domaine.fr`. + +GridTV dรฉtecte l'absence de config et te redirige automatiquement vers la page de setup : + +| Champ | Description | +|---|---| +| **Nom du groupe** | S'affiche en haut ร  gauche (ex: *JohnnyBeGood*, *MaTV*...) | +| **URL EPG (XMLTV)** | L'URL de ton guide รฉlectronique des programmes | +| **URL M3U** *(optionnel)* | Ta playlist IPTV, pour copie rapide depuis la topbar | + +Une fois validรฉ, le fichier `config.json` est crรฉรฉ sur le serveur. **La page setup devient inaccessible.** + +--- + +### 5. Modifier la config plus tard + +```bash +# Via SSH +nano /var/www/gridtv/config.json +``` + +```json +{ + "group_name": "MonGroupe TV", + "epg_url": "http://192.168.0.3:8000/api/xmltv.xml", + "m3u_url": "http://192.168.0.3:8000/api/channels.m3u" +} +``` + +--- + +## ๐Ÿ“ Structure du projet + +``` +gridtv/ +โ”œโ”€โ”€ index.php # Le guide TV (redirige vers setup si pas de config) +โ”œโ”€โ”€ setup.php # Page de configuration initiale +โ”œโ”€โ”€ config.example.json # Template de config (ร  copier โ†’ config.json) +โ”œโ”€โ”€ .gitignore # config.json exclu du repo +โ””โ”€โ”€ README.md +``` + +> `config.json` est dans le `.gitignore` โ€” tes URLs privรฉes ne seront jamais poussรฉes sur GitHub. + +--- + +## โš™๏ธ Configuration avancรฉe + +Les constantes suivantes sont modifiables directement dans `index.php` : + +```js +const PX_PER_MIN = 5; // Zoom horizontal (pixels par minute) +const HOURS_BEFORE = 1; // Heures passรฉes visibles dans la grille +const HOURS_AFTER = 3; // Heures futures visibles +const ROW_H = 80; // Hauteur d'une ligne chaรฎne (px) +``` + +--- + +## ๐Ÿงฉ Compatibilitรฉ EPG + +GridTV parse le format **XMLTV standard**. Testรฉ avec : + +- โœ… [Tunarr](https://github.com/chrisbenincasa/tunarr) +- โœ… [xTeVe](https://github.com/xteve-project/xTeVe) +- โœ… [Jellyfin](https://jellyfin.org/) (via plugin LiveTV) +- โœ… Tout fichier XMLTV conforme ร  la spec + +--- + +## ๐Ÿค Contribuer + +Les PRs sont les bienvenues ! Si t'as une idรฉe, une correction, ou une feature โ€” ouvre une issue ou envoie direct une PR. + +--- + +## ๐Ÿ“„ Licence + +MIT โ€” fais-en ce que tu veux. diff --git a/config.example.json b/config.example.json new file mode 100644 index 0000000..82b010a --- /dev/null +++ b/config.example.json @@ -0,0 +1,5 @@ +{ + "group_name": "MonGroupe TV", + "epg_url": "http://votre-serveur/api/xmltv.xml", + "m3u_url": "http://votre-serveur/api/channels.m3u" +} diff --git a/index.php b/index.php new file mode 100644 index 0000000..4bf1620 --- /dev/null +++ b/index.php @@ -0,0 +1,1031 @@ + + + + + + +GridTV โ€” <?= $group_name ?> + + + + + +
+
Chargement du guide
+
+
+ +
+
โš  Impossible de charger l'EPG
+
Vรฉrifiez l'URL de votre flux XMLTV.
+
+ + +
+
+ +
+
+
+
+
+ +
+ +
+
00:00:00
+ +
+ + + + +
+
LIVE
+
+ + +
+
+
Chaรฎnes
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ + +
+ + + + diff --git a/setup.php b/setup.php new file mode 100644 index 0000000..538d575 --- /dev/null +++ b/setup.php @@ -0,0 +1,264 @@ + $group_name, + 'epg_url' => $epg_url, + 'm3u_url' => $m3u_url, + ]; + $written = file_put_contents( + __DIR__ . '/config.json', + json_encode($config, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES) + ); + if ($written === false) { + $error = 'Impossible d\'รฉcrire config.json. Vรฉrifiez les permissions du dossier (chmod 775 .).'; + } else { + $success = true; + } + } +} +?> + + + + + +GridTV โ€” Configuration + + + + +
+ + +
+ Bienvenue sur GridTV โ€” votre guide TV IPTV.
+ Configurez votre instance en remplissant les champs ci-dessous. +
+ + +
+ + + +
+ โœ“ Configuration enregistrรฉe dans config.json.
+ Cette page ne sera plus accessible. Pour modifier la config, รฉditez config.json via SSH. +
+ + + +
+ +
+ + +
S'affiche en haut ร  gauche dans la topbar.
+
+ +
+ + +
URL du fichier XMLTV gรฉnรฉrรฉ par Tunarr ou autre source.
+
+ +
+ + +
Permet de copier l'URL M3U depuis la topbar du guide.
+
+ + + +
+ + + +
+ Note : La configuration est stockรฉe dans config.json sur le serveur. + Ce fichier est exclu du dรฉpรดt Git (.gitignore). + Pour modifier les paramรจtres ultรฉrieurement, รฉditez ce fichier directement via SSH. +
+ +
+ +