cache manager
Build and Push Docker Images / build-and-push (push) Successful in 16s

This commit is contained in:
2026-02-11 21:39:39 +01:00
parent 9f87297d35
commit fecd8389e9
5 changed files with 237 additions and 19 deletions
+17 -2
View File
@@ -4,7 +4,7 @@ import mimetypes
from http.server import BaseHTTPRequestHandler, HTTPServer
from urllib.parse import parse_qs, urlparse
from .schedule import build_playlist
from .schedule import build_playlist_data
def get_base_url(handler: BaseHTTPRequestHandler) -> str:
@@ -21,6 +21,7 @@ class IPTVHandler(BaseHTTPRequestHandler):
self._channel_repo = getattr(server, "channel_repo", None)
self._schedule_builder = getattr(server, "schedule_builder", None)
self._epg_builder = getattr(server, "epg_builder", None)
self._cache_manager = getattr(server, "cache_manager", None)
super().__init__(request, client_address, server)
def log_message(self, format, *args):
@@ -98,7 +99,19 @@ class IPTVHandler(BaseHTTPRequestHandler):
return
path_keys = channel.get("paths", [])
base = get_base_url(self)
playlist = build_playlist(path_keys, base)
playlist_data = None
if self._cache_manager:
playlist_data = self._cache_manager.get_playlist(channel_id)
if playlist_data is not None:
playlist = [(name, f"{base}/stream?path={path_str}") for name, path_str in playlist_data]
else:
playlist_data = build_playlist_data(path_keys)
playlist = [(name, f"{base}/stream?path={path_str}") for name, path_str in playlist_data]
if self._cache_manager:
self._cache_manager.set_playlist(channel_id, playlist_data)
lines = ["#EXTM3U"]
for name, url in playlist:
lines.append(f"#EXTINF:-1,{name}")
@@ -176,10 +189,12 @@ def create_server(
epg_builder,
host: str = "0.0.0.0",
port: int = 8080,
cache_manager=None,
) -> HTTPServer:
"""Create HTTP server with injected dependencies."""
server = HTTPServer((host, port), IPTVHandler)
server.channel_repo = channel_repo
server.schedule_builder = schedule_builder
server.epg_builder = epg_builder
server.cache_manager = cache_manager
return server