This commit is contained in:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user