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
50 changes: 40 additions & 10 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,47 @@ All notable changes to this project will be documented here.
Format based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
This project follows [Semantic Versioning](https://semver.org/).

---

## v4.1.0 - 2025-10-25
### ✨ 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.
- Deterministic wraparound ensures seamless looping without scroll jitter.
- Waits up to 5 seconds for guide data to populate before activating.
- Stores preference in localStorage (`autoScrollEnabled`) and exposes simple APIs (`cloneNow`, `status`).

- **Per-Page Modular CSS**
- Introduced separate per-page stylesheets: `about.css`, `change_password.css`, `change_tuner.css`, `logs.css`, and `manage_users.css`.
- Shared global styling moved to `base.css` for consistency.

- **Unified Template Structure**
- New `base.html` and `_header.html` templates consolidate common layout and navigation.
- All major pages now extend from `base.html` for easier maintenance.

- **New JavaScript Modules**
- Added `tuner-settings.js` for handling tuner selection and dynamic UI updates.

### 🧰 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
- 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 Expand Up @@ -34,16 +74,6 @@ This project follows [Semantic Versioning](https://semver.org/).
- PlutoTV / custom tuner aggregation features
- Enhanced guide refresh logic for long-running sessions

---

## [Unreleased]

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

---

## v3.3.0 - 2025-10-15
### Added

Expand Down
4 changes: 2 additions & 2 deletions INSTALL.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
# Installation Guide

**Version:** v4.0.0
**Last Updated:** 2025-10-19
**Version:** v4.1.0
**Last Updated:** 2025-10-25

---

Expand Down
6 changes: 3 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
# 📺 RetroIPTVGuide v4.0.0
# 📺 RetroIPTVGuide v4.1.0

<p align="center">
<a href="https://github.com/thehack904/RetroIPTVGuide">
<img src="https://img.shields.io/badge/version-v4.0.0-blue?style=for-the-badge" alt="Version">
<img src="https://img.shields.io/badge/version-v4.1.0-blue?style=for-the-badge" alt="Version">
</a>
<a href="https://github.com/thehack904/RetroIPTVGuide/pkgs/container/retroiptvguide">
<img src="https://img.shields.io/badge/GHCR-ghcr.io/thehack904/retroiptvguide-green?style=for-the-badge&logo=docker" alt="GHCR">
Expand Down Expand Up @@ -59,7 +59,7 @@ docker run -d -p 5000:5000 ghcr.io/thehack904/retroiptvguide:latest
```

### 🧩 TrueNAS SCALE App
- Upload the provided `retroiptvguide-3.2.0.zip` chart.
- Upload the provided `retroiptvguide-4.1.0.zip` chart.
- Repository: `ghcr.io/thehack904/retroiptvguide`
- Tag: `latest`
- Exposes port `5000`.
Expand Down
108 changes: 51 additions & 57 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.0.0 (2025-10-19)
The 4.0.0 release merges all Testing branch updates into Main, introducing unified installers, new UI templates, and Android TV optimizations.

# 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.
---

## 🔮 Feature Upgrades
Expand All @@ -15,114 +14,109 @@ The 4.0.0 release merges all Testing branch updates into Main, introducing unifi
- [x] Add ability to **add/remove tuners** from the UI (v2.3.0).
- [x] Add ability to rename tuners via the UI (v2.3.0).
- [ ] Support for **.m3u8 single-channel playlists** as tuner sources (planned v3.2.0).
- Option A: Special-case `.m3u8` handling in parser.
- Option B: Add explicit `hls` column to `tuners.db`.
- [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.1.x planned)*
- [ ] Add per-user tuner assignment and default tuner preferences. 🆕 *(v4.2.x planned)*
- [ ] Introduce combined tuner builder (custom tuner aggregation). 🆕 *(v5.x.x planned)*

---

### 2. Logging & Monitoring
- [ ] Move logs from flat file (`activity.log`) into **SQLite DB** for better querying.
- [ ] Add filtering and pagination in logs view (by user, action, or date).
- [ ] Add system health checks (e.g., tuner reachability, XMLTV freshness) to logs.
- [x] **Admin log management**: add button/route to clear logs (with confirmation) (v2.3.1).
- [x] Display log file size on logs page (v2.3.1).
- [x] Post-install HTTP service verification added in Pi installer (v3.1.0).
- [ ] Add unified “Refresh Guide” scheduler (configurable intervals). 🆕 *(v4.2.x planned)*
- [ ] Add filtering and pagination in logs view.
- [ ] 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)*

---

### 3. Guide & Playback
- [ ] Add **search/filter box** to guide for channels/programs.
- [ ] Add ability to set **favorites** for quick channel access.
- [x] Add fallback message (“No Guide Data Available”) for channels missing EPG info (v3.0.1).
- [ ] Add **reminders/notifications** for upcoming programs.
- [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.
- [ ] 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)*

---

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

---

### 5. UI/UX Improvements
- [x] Unified theming across all templates (Light, Dark, AOL/CompuServe, TV Guide Magazine) (v2.3.2).
- [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 and modernized UI templates (`guide.html`, `login.html`, `about.html`, `logs.html`, etc.). ✅ *(v4.0.0)*
- [ ] Unify CSS across all templates (minimize inline styles).
- [ ] Make guide responsive (mobile/tablet view).
- [ ] Add dark/light theme auto-detect from browser/system.
- [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).
- [ ] 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] Create installable container.
### 6. Cross-Platform
- [x] Unified Linux, Windows, and Raspberry Pi installers. ✅ *(v4.0.0)*
- [x] Windows installer via PowerShell + NSSM service (v3.0.0).
- [x] Pi installer auto-configures GPU and verifies HTTP service (v3.1.0).
- [x] Add **Windows update/uninstall parity planned**. 🆕 *(v4.1.x target)*
- [x] Windows update/uninstall parity implemented. ✅ *(v4.1.0)*
- [ ] Create MacOS install/executable.
- [x] Validate/test installers fully on all Windows environments.
- [x] Validate/test installers on all Windows environments.
- [ ] Explore TrueNAS SCALE App Catalog certification. 🆕 *(v5.x.x planned)*

---

### 7. New Features
- [ ] Add the ability to have an **auto-play video stream** upon login (ErsatzTV source).
- [ ] Option to play a known or unlisted channel as default auto-play source.
- [ ] Add auto-play stream on login (ErsatzTV integration).
- [ ] Default auto-play source selection.
- [ ] Begin integration path for **PlutoTV / external IPTV services**. 🆕 *(v5.x.x)*

---

### 8. Planned Enhancements
- [ ] Add **safety checks** in `add_tuner()`:
- Prevent inserting duplicate tuner names.
- Validate XML/M3U URLs before commit.
- [x] Add **GPU verification** after `raspi-config` call (v3.1.0).
- [x] Suppress `rfkill` Wi-Fi message during GPU configuration (v3.1.0).
- [x] Post-install adaptive HTTP check loop (15s poll) (v3.1.0).
- [x] Reorganized project structure and documentation. ✅ *(v4.0.0)*
- [ ] Add safety checks in `add_tuner()` (duplicate prevention + URL validation).
- [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)*

---

## ⚙️ Technical Improvements
- [x] Add uninstall.sh (v2.3.0).
- [ ] Validate/test uninstall script fully on Windows environments.
- [ ] Validate/test uninstall script fully on Windows.
- [ ] Add HTTPS + optional token-based authentication. 🆕 *(v4.5.x)*
- [x] Refactor tuner handling for unified DB structure. ✅ *(v4.0.0)*
- [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.
- [x] Containerize app (Dockerfile + Compose for deployment).
- [x] Automated version bump tool updates all key scripts (v3.1.0).
- [ ] Add CI/CD automation for official .deb and .zip 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 Linux/Windows/RPi installer architecture. ✅ *(v4.0.0)*
- [ ] Add interactive mode selector (Kiosk vs Headless).
- [ ] Add command-line flag `--mode kiosk` for non-interactive installs.
- [ ] Ensure logs/services properly isolated between modes.
- [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.0.0)
- [x] Unified cross-platform installers (`retroiptv_linux.sh`, `retroiptv_windows.ps1`, `retroiptv_rpi.sh`)
- [x] Android/Fire/Google TV mode added with animated CRT glow
- [x] Added `manage_users.html` for full web-based user management
- [x] Modernized `guide.html`, `login.html`, `about.html`, `logs.html`, etc.
- [x] Refactored `app.py` for unified configuration + session logic
- [x] Removed legacy installers (`install.*`, `uninstall.*`, `iptv-server.service`)
- [x] Reorganized documentation (CHANGELOG, README, ROADMAP)
- [x] Release tagged as **v4.0.0**
## ✅ 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.
- [x] Updated documentation (CHANGELOG, README, INSTALL, ROADMAP).
- [x] Windows installer parity update.
- [x] Release tagged as **v4.1.0**
4 changes: 2 additions & 2 deletions app.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
APP_VERSION = "v4.0.0"
APP_RELEASE_DATE = "2025-10-11"
APP_VERSION = "v4.1.0"
APP_RELEASE_DATE = "2025-10-25"

from flask import Flask, render_template, request, redirect, url_for, flash, session
from flask_login import LoginManager, UserMixin, login_user, login_required, logout_user, current_user
Expand Down
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.0.0"
VERSION="4.1.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.0.0"
VERSION="4.1.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
4 changes: 2 additions & 2 deletions retroiptv_windows.ps1
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
<#
RetroIPTVGuide Windows Installer/Uninstaller
Filename: retroiptv_windows.ps1
Version: 4.0.0
Version: 4.1.0

License: Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International
https://creativecommons.org/licenses/by-nc-sa/4.0/
Expand Down Expand Up @@ -55,7 +55,7 @@ if (-not ([Security.Principal.WindowsPrincipal] [Security.Principal.WindowsIdent
$ErrorActionPreference = 'Stop'
$PSDefaultParameterValues['Out-File:Encoding'] = 'utf8'

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

Expand Down
67 changes: 67 additions & 0 deletions static/css/about.css
Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@
/* Per-page styles for About page (scoped) */

.container-about {
max-width: 820px;
margin: 40px auto 80px;
padding: 0 16px;
box-sizing: border-box;
}

.about-box {
padding: 20px;
border-radius: 8px;
background: rgba(255,255,255,0.04);
border: 1px solid rgba(255,255,255,0.03);
box-shadow: 0 6px 18px rgba(0,0,0,0.12);
}

.about-box h2 {
margin: 0 0 12px;
font-size: 1.4rem;
font-weight: 700;
color: inherit;
text-align: center;
}

.about-box ul {
list-style: none;
padding: 0;
margin: 8px 0 0 0;
font-size: 0.98rem;
}

.about-box li {
padding: 10px 12px;
border-bottom: 1px solid rgba(255,255,255,0.04);
display: flex;
justify-content: space-between;
gap: 12px;
}

.about-box li:last-child {
border-bottom: none;
}

/* Ensure labels and values wrap nicely on small screens */
.about-box li strong { min-width: 160px; display:inline-block; color:inherit; }
.about-box li span { color: inherit; word-break: break-word; }

/* Light theme overrides */
body.light .about-box {
background: #fff;
border-color: rgba(0,0,0,0.06);
color: #000;
box-shadow: 0 4px 10px rgba(0,0,0,0.06);
}
body.light .about-box li { border-bottom: 1px solid rgba(0,0,0,0.06); }

/* Retro magazine tweaks */
body.retro-magazine .about-box { background: #fff; border: 1px solid #000; }

/* Responsive */
@media (max-width: 640px) {
.container-about { padding: 0 12px; margin: 28px 12px 60px; }
.about-box { padding: 14px; }
.about-box li { padding: 8px 6px; display:block; }
.about-box li strong { display:block; margin-bottom:6px; }
}
Loading