From 2cb6190a42f25e0f015621cb4d72aea843a5f1c0 Mon Sep 17 00:00:00 2001 From: mxnticek Date: Thu, 4 Dec 2025 13:00:07 +0100 Subject: [PATCH] Update .forgejo/scripts/radio.py --- .forgejo/scripts/radio.py | 24 +++++++++++------------- 1 file changed, 11 insertions(+), 13 deletions(-) diff --git a/.forgejo/scripts/radio.py b/.forgejo/scripts/radio.py index 21f0d58..aa726c0 100644 --- a/.forgejo/scripts/radio.py +++ b/.forgejo/scripts/radio.py @@ -122,7 +122,7 @@ def fetch_stations_with_retry(rb, country_code, max_retries=5, initial_backoff=1 def create_multi_country_playlist(country_codes, output_file=None, group_title="Radio Stations", default_logo_url="https://amz.odjezdy.online/xbackbone/VUne9/HilOMeka75.png/raw", use_country_as_group=False, - tvh_compatible=False): # <<< ZMĚNA: Přidán nový argument + tvh_compatible=False): rb = init_radio_browser() # použije autodetekovaný mirror output_file = generate_safe_output_path(output_file, country_codes) @@ -186,23 +186,25 @@ def create_multi_country_playlist(country_codes, output_file=None, group_title=" group = s['country_name'] if use_country_as_group else group_title stream_url = s['url'] - # <<< ZMĚNA: Blok pro formátování URL pro Tvheadend + # Blok pro formátování URL pro Tvheadend if tvh_compatible: # Připravíme metadata - odstraníme mezery a problematické znaky service_name = name.replace(" ", "_").replace('"', "'").replace("=", "-").replace(":", "-") - provider_name = stream_url # Poskytovatel je URL, jak je v textu + provider_name = "RadioBrowser" # Jednoduchý string místo URL + + # Escapujeme URL pro bezpečné použití v shellu + escaped_url = stream_url.replace('"', '\\"').replace("'", "\\'") url_to_write = ( - f"pipe://ffmpeg -loglevel fatal -i {stream_url} -vn -acodec copy -flags +global_header " - f"-strict -2 -metadata service_provider={provider_name} " - f"-metadata service_name={service_name} -f mpegts -mpegts_service_type digital_radio pipe:1" + f'pipe://ffmpeg -loglevel fatal -i "{escaped_url}" -vn -acodec copy -flags +global_header ' + f'-strict -2 -metadata service_provider="{provider_name}" ' + f'-metadata service_name="{service_name}" -f mpegts -mpegts_service_type digital_radio pipe:1' ) else: url_to_write = stream_url - # <<< KONEC ZMĚNY f.write(f'#EXTINF:-1 group-title="{group}" tvg-logo="{logo}",{s["country_code"]} | {name}\n') - f.write(f"{url_to_write}\n") # Použijeme upravenou nebo původní URL + f.write(f"{url_to_write}\n") print(f"🎧 Playlist vytvořen: {output_file} ({len(unique_stations)} stanic)") return output_file @@ -216,15 +218,12 @@ def main(): parser.add_argument("country_codes", nargs="*", help="Two-letter country codes") parser.add_argument("-o", "--output", help="Output file path") parser.add_argument("-g", "--group", default="Radio Stations", help="Group title") - parser.add_argument("--logo", default="https://amz.odjezdy.online/xbackbone/VUne9/HilOMeka75.png/raw", + parser.add_argument("--logo", default="https://amz.odjezdy.online/xbackend/VUne9/HilOMeka75.png/raw", help="Default logo URL") parser.add_argument("--use-country-as-group", "-ucag", action="store_true", help="Use full country name as group-title") - - # <<< ZMĚNA: Přidán argument pro TVH kompatibilitu parser.add_argument("--tvh-compatible", "-tvh", action="store_true", help="Generovat M3U kompatibilní s Tvheadend (pipe://ffmpeg)") - # <<< KONEC ZMĚNY args = parser.parse_args() @@ -237,7 +236,6 @@ def main(): sys.exit(1) try: - # <<< ZMĚNA: Předání nového argumentu create_multi_country_playlist(codes, args.output, args.group, args.logo, args.use_country_as_group, args.tvh_compatible) except KeyboardInterrupt: