Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
42 changes: 31 additions & 11 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,36 @@ This project follows [Semantic Versioning](https://semver.org/).

---

## v4.2.0 - 2025-11-06
This version introduces mobile responsiveness, a new theme, refinements to auto-scroll, and backend API structures.

### Added
- Added mobile-friendly CSS and JS for improved viewing on mobile devices
- Added RetroIPTV Theme
- Added backend API structures for future updates / efforts

### Changed
- Enhanced auto-scroll handling with new modular files: `auto-scroll.js` and `auto-scroll-manager.js`.
- Improved responsive layout for guide and settings pages on small screens.

### Fixed
- Fixed font scaling and layout issues in mobile and embedded browsers.
- Fixed path references for Flask static files and templates.
- Resolved layout inconsistencies across themes and display sizes.
- General code cleanup and alignment for CI/CD consistency.

---

## [Unreleased]

- Planned: add `.m3u8` tuner support.
- Planned: move logs to SQLite DB.
- Planned: log filtering and pagination.

---

## v4.1.0 - 2025-10-25
### New Features
### New Features
- **Auto-Scroll Guide System**
- Added `static/js/auto-scroll.js` enabling smooth, continuous automatic scrolling of the live TV guide.
- Uses `requestAnimationFrame` with a `setInterval` watchdog fallback for consistent performance.
Expand All @@ -26,24 +54,16 @@ This project follows [Semantic Versioning](https://semver.org/).
- **New JavaScript Modules**
- Added `tuner-settings.js` for handling tuner selection and dynamic UI updates.

### 🧰 Improvements
### Improvements
- Updated `INSTALL.md`, `README.md`, and `ROADMAP.md` to document the new layout and structure.
- `app.py` updated to serve new static assets and integrate template inheritance.
- All installer scripts (`retroiptv_linux.sh`, `retroiptv_rpi.sh`, `retroiptv_windows.ps1`) updated for v4.1.0 compatibility and new folder paths.

### 🐞 Fixes
### Fixes
- Reduced redundancy across templates by introducing a unified base layout.
- Improved guide performance and browser compatibility with the new auto-scroll implementation.
- Minor visual and layout corrections across settings and guide pages.

---

## [Unreleased]

- Planned: add `.m3u8` tuner support.
- Planned: move logs to SQLite DB.
- Planned: log filtering and pagination.

---
## v4.0.0 — 2025-10-19
**Status:** Public Release (Feature Complete)
Expand Down
58 changes: 30 additions & 28 deletions ROADMAP.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,8 @@ This document tracks **planned upgrades** and ideas for improving the IPTV Flask
These are **not yet implemented**, but provide a development path for future releases.

---
# Current Version: **v4.1.0 (2025-10-25)**
This version refines templates and adds an auto scroll feature w/ and enable/disable feature. This also has background improvements to align HTML/CSS templates.
---
# Current Version: **v4.2.0 (2025-11-06)**
This version focuses on mobile responsiveness, new RetroIPTV Theme, backend API integration for future efforts

## 🔮 Feature Upgrades

Expand All @@ -16,8 +15,8 @@ This version refines templates and adds an auto scroll feature w/ and enable/dis
- [ ] Support for **.m3u8 single-channel playlists** as tuner sources (planned v3.2.0).
- [x] Validate tuner URLs (ping/check format before saving) (v2.0.0).
- [ ] Optional auto-refresh of tuner lineup on a schedule.
- [ ] Add per-user tuner assignment and default tuner preferences. 🆕 *(v4.2.x planned)*
- [ ] Introduce combined tuner builder (custom tuner aggregation). 🆕 *(v5.x.x planned)*
- [ ] Add per-user tuner assignment and default tuner preferences. *(v4.3.x planned)*
- [ ] Introduce combined tuner builder (custom tuner aggregation). *(v5.x.x planned)*

---

Expand All @@ -27,58 +26,60 @@ This version refines templates and adds an auto scroll feature w/ and enable/dis
- [ ] Add system health checks (tuner reachability, XMLTV freshness).
- [x] **Admin log management**: clear logs + file size indicator (v2.3.1).
- [x] Post-install HTTP service verification in Pi installer (v3.1.0).
- [ ] Unified “Refresh Guide” scheduler. 🆕 *(v4.2.x planned)*
- [x] Unified “Refresh Guide” scheduler. *(v4.2.0)*

---

### 3. Guide & Playback
- [x] **Auto-Scroll feature** added for the Live Guide (v4.1.0).
- Uses `requestAnimationFrame` for smooth scroll with fallback watchdog.
- Deterministic looping and localStorage preference tracking.
- [x] Improved auto-scroll performance and modular handling (v4.2.0).
- [x] Added responsive layout for mobile devices (v4.2.0).
- [ ] Add search/filter box to guide.
- [ ] Add ability to set favorites.
- [x] Fallback message for missing EPG info (v3.0.1).
- [ ] Add reminders/notifications for upcoming programs.
- [ ] Add EPG caching for faster guide reloads. 🆕 *(v5.x.x planned)*
- [ ] Add EPG caching for faster guide reloads. *(v5.x.x planned)*

---

### 4. User Management
- [x] Add **manage_users.html** for integrated user control panel. *(v4.0.0)*
- [x] Add **manage_users.html** for integrated user control panel. *(v4.0.0)*
- [ ] Role-based access control (admin/user/read-only).
- [ ] Add email or 2FA support for login.
- [ ] Show last login time in admin panel.
- [ ] User role/channel restrictions. 🆕 *(v5.x.x planned)*
- [ ] User role/channel restrictions. *(v5.x.x planned)*

---

### 5. UI/UX Improvements
- [x] Unified theming across all templates (v2.3.2).
- [x] Android / Fire / Google TV optimized mode with CRT glow header. ✅ *(v4.0.0)*
- [x] Consolidated UI templates (`guide.html`, `login.html`, etc.). *(v4.0.0)*
- [x] Android / Fire / Google TV optimized. *(v4.0.0)*
- [x] Consolidated UI templates (`guide.html`, `login.html`, etc.). *(v4.0.0)*
- [x] **Refactored UI templates into shared `base.html` and `_header.html` (v4.1.0)**.
- [x] **Modular CSS and JS added (v4.1.0)** – per-page styling and script loading.
- [x] Introduced new JS modules: `auto-scroll.js`, `tuner-settings.js`.
- [ ] Make guide responsive (mobile/tablet).
- [x] **Mobile responsive layout and navigation (v4.2.0)**.
- [ ] Add dark/light theme auto-detect.
- [ ] Frozen header timeline to prevent scrolling with channel listing.
- [x] About page under Settings menu (v2.3.1).

---

### 6. Cross-Platform
- [x] Unified Linux, Windows, and Raspberry Pi installers. *(v4.0.0)*
- [x] Windows update/uninstall parity implemented. *(v4.1.0)*
- [x] Unified Linux, Windows, and Raspberry Pi installers. *(v4.0.0)*
- [x] Windows update/uninstall parity implemented. *(v4.1.0)*
- [ ] Create MacOS install/executable.
- [x] Validate/test installers on all Windows environments.
- [ ] Explore TrueNAS SCALE App Catalog certification. 🆕 *(v5.x.x planned)*
- [ ] Explore TrueNAS SCALE App Catalog certification. *(v5.x.x planned)*

---

### 7. New Features
- [ ] Add auto-play stream on login (ErsatzTV integration).
- [ ] Default auto-play source selection.
- [ ] Begin integration path for **PlutoTV / external IPTV services**. 🆕 *(v5.x.x)*
- [ ] Begin integration path for **PlutoTV / external IPTV services**. *(v5.x.x)*

---

Expand All @@ -87,36 +88,37 @@ This version refines templates and adds an auto scroll feature w/ and enable/dis
- [x] GPU verification after `raspi-config` (v3.1.0).
- [x] Suppress `rfkill` Wi-Fi message during GPU config (v3.1.0).
- [x] Adaptive HTTP check loop (v3.1.0).
- [x] **Project structure and documentation reorganized** *(v4.0.0–4.1.0)*
- [x] **Project structure and documentation reorganized** *(v4.0.0–4.2.0)*

---

## ⚙️ Technical Improvements
- [x] Add uninstall.sh (v2.3.0).
- [ ] Validate/test uninstall script fully on Windows.
- [ ] Add HTTPS + optional token-based authentication. 🆕 *(v4.5.x)*
- [x] Refactor tuner handling for unified DB. *(v4.0.0)*
- [ ] Add HTTPS + optional token-based authentication. *(v4.5.x)*
- [x] Refactor tuner handling for unified DB. *(v4.0.0)*
- [x] **Updated bump_version and installer scripts to auto-track new version (v4.1.0)**
- [x] Containerize app (Dockerfile + Compose).
- [ ] Add migrations for DB schema changes.
- [ ] CI/CD automation for official builds. 🆕 *(v5.x.x)*
- [ ] CI/CD automation for official builds. *(v5.x.x)*
- [ ] Add test suite for tuner parsing, authentication, and logging.

---

## 🍓 Installer Enhancements
- [x] Unified installer architecture. *(v4.0.0)*
- [x] Windows update/uninstall parity complete. *(v4.1.0)*
- [x] Unified installer architecture. *(v4.0.0)*
- [x] Windows update/uninstall parity complete. *(v4.1.0)*
- [ ] Add kiosk/headless mode selector.
- [ ] Add `--mode kiosk` flag for non-interactive installs.
- [ ] Validate update/uninstall paths on all OSes.

---

## ✅ Completed (v4.1.0)
- [x] Modular CSS/JS introduced.
- [x] Base templating system (`base.html`, `_header.html`) added.
- [x] Auto-scroll feature integrated with toggle memory.
## ✅ Completed (v4.2.0)
- [x] Added mobile responsive layout.
- [x] Improved auto-scroll handling and modular JS design.
- [x] Updated documentation (CHANGELOG, README, INSTALL, ROADMAP).
- [x] Windows installer parity update.
- [x] Release tagged as **v4.1.0**
- [x] Added RetroIPTV Theme (default).
- [x] Release tagged as **v4.2.0**


2 changes: 1 addition & 1 deletion retroiptv_linux.sh
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
# License: Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International (CC BY-NC-SA 4.0)

set -euo pipefail
VERSION="4.1.0"
VERSION="4.2.0"
TIMESTAMP=$(date +"%Y-%m-%d_%H-%M-%S")
LOGFILE="retroiptv_${TIMESTAMP}.log"
exec > >(tee -a "$LOGFILE") 2>&1
Expand Down
2 changes: 1 addition & 1 deletion retroiptv_rpi.sh
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
#!/bin/bash
VERSION="4.1.0"
VERSION="4.2.0"
# RetroIPTVGuide Raspberry Pi Installer (Headless, Pi3/4/5)
# Installs to /home/iptv/iptv-server for consistency with Debian/Windows
# Logs to /var/log/retroiptvguide/install-YYYYMMDD-HHMMSS.log
Expand Down
2 changes: 1 addition & 1 deletion retroiptv_windows.ps1
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,7 @@ if (-not ([Security.Principal.WindowsPrincipal] [Security.Principal.WindowsIdent
$ErrorActionPreference = 'Stop'
$PSDefaultParameterValues['Out-File:Encoding'] = 'utf8'

$VERSION = "4.1.0"
$VERSION = "4.2.0"
$ScriptDir = Split-Path -Parent -Path $MyInvocation.MyCommand.Path
Set-Location $ScriptDir

Expand Down
21 changes: 21 additions & 0 deletions static/css/base.css
Original file line number Diff line number Diff line change
Expand Up @@ -448,6 +448,27 @@ body.retro-magazine .now-line { background:#000; height:3px; }
body.retro-magazine #current-tuner { color:#000000 !important; font-weight:bold; }
body.retro-magazine .time-header-fixed .left-spacer { background: var(--timebar-bg, #fff) !important; }

/* RetroIPTV Theme */
body.retroiptv{--timebar-bg:#f6e7cc;--timebar-border:#3b0f1a;--timebar-color:#3b0f1a;--chan-col-bg:#f6e1c8;--now-color:#ffd24a;--accent-teal:#3fb7b0;--accent-coral:#e86b74;background:#e9e8e6;color:#111;font-family:"Poppins",system-ui,-apple-system,Segoe UI,Roboto,Arial,sans-serif}
body.retroiptv .header{background:linear-gradient(180deg,var(--accent-teal),#31988f);color:#fff;border-bottom:2px solid var(--timebar-border);box-shadow:0 3px 0 rgba(59,15,26,.12)}
body.retroiptv .header .links>a,body.retroiptv .header .links>.dropdown>.dropbtn,body.retroiptv .header .links>span,body.retroiptv .header .links>div#clock{color:#fff;font-weight:700;text-transform:uppercase;letter-spacing:.06em}
body.retroiptv .dropdown-content,body.retroiptv .submenu-content{background:linear-gradient(180deg,#f6e1c8,#fffaf0);border:1px solid rgba(59,15,26,.85);color:var(--timebar-border);box-shadow:0 6px 18px rgba(59,15,26,.08);border-radius:6px}
body.retroiptv .dropdown-content a,body.retroiptv .submenu-content li a{color:var(--timebar-border);padding:10px 14px;font-weight:600}
body.retroiptv .dropdown-content a:hover,body.retroiptv .submenu-content li a:hover{background:rgba(63,183,176,.06);color:var(--accent-coral)}
body.retroiptv .summary{background:linear-gradient(180deg,#fff4e6,#f6e1c8);border:2px solid rgba(59,15,26,.8);color:var(--timebar-border);padding:12px;border-radius:8px;box-shadow:0 6px 14px rgba(59,15,26,.06)}
body.retroiptv .summary h3{margin:0 0 8px 0;font-family:"Fredoka One","Poppins",sans-serif;font-weight:700;color:var(--timebar-border);font-size:1.05rem}
body.retroiptv #video{background:#000;border:4px solid rgba(59,15,26,.85);border-radius:6px;box-shadow:0 8px 20px rgba(59,15,26,.12);object-fit:cover;max-width:100%}
body.retroiptv .chan-col{background:linear-gradient(180deg,var(--chan-col-bg),#f3dbc0);border-right:2px solid rgba(59,15,26,.85)}
body.retroiptv .grid-col{background:linear-gradient(180deg,#fffefc,#fff)}
body.retroiptv .chan-name{color:var(--timebar-border);padding:10px;display:flex;flex-direction:column;align-items:center;justify-content:center;font-weight:700}
body.retroiptv .time-header-wrap,body.retroiptv .time-header-fixed{background:var(--timebar-bg);color:var(--timebar-color);border-bottom:2px solid rgba(59,15,26,.9);box-shadow:0 3px 8px rgba(59,15,26,.06)}
body.retroiptv .time-cell{color:var(--timebar-color);font-weight:700;padding:6px 10px;border-right:1px solid rgba(255,255,255,.06)}
body.retroiptv .program{background:linear-gradient(180deg,#fff,#f3e8d6);border:2px solid rgba(59,15,26,.6);color:var(--timebar-border);border-radius:8px;padding:6px 8px;font-size:12px;box-shadow:0 4px 10px rgba(59,15,26,.06)}
body.retroiptv .program.now{background:linear-gradient(180deg,var(--now-color),#ffd97a);border:2px solid rgba(59,15,26,.9);color:#111;font-weight:700;box-shadow:0 6px 18px rgba(59,15,26,.12)}
body.retroiptv .now-line,body.retroiptv .time-header-fixed .now-line{background:linear-gradient(180deg,var(--now-color),#ffb81f);width:3px;box-shadow:0 0 8px rgba(241,185,63,.35)}
body.retroiptv a{color:var(--timebar-border)}body.retroiptv a:hover{color:var(--accent-coral)}
@media(max-width:900px){body.retroiptv .header .links{display:none}body.retroiptv .hamburger{display:inline-flex;color:#fff}body.retroiptv .summary{padding:10px;border-radius:6px}body.retroiptv .player{flex-direction:column}body.retroiptv #video{width:100%;max-height:45vh;border-width:3px}body.retroiptv .grid-row{height:48px!important}body.retroiptv .program{font-size:12px;border-radius:6px;padding:4px 6px}body.retroiptv .time-header-fixed{height:40px}}

/* Additional theme-specific overrides kept (no truncation) */

/* Ensure layering & z-index helpers */
Expand Down
Loading