better songtracking

This commit is contained in:
2025-08-31 19:20:50 +02:00
parent 7f833cc512
commit 4a2a5b280d
+29 -11
View File
@@ -5,7 +5,7 @@ import subprocess
import time, datetime import time, datetime
import sys import sys
import threading import threading
import json import json, re
from datetime import datetime from datetime import datetime
import log95 import log95
@@ -22,10 +22,9 @@ playlist_dir = "/home/user/playlists"
name_table_path = "/home/user/mixes/name_table.txt" name_table_path = "/home/user/mixes/name_table.txt"
state_file_path = "/tmp/radioPlayer_state.json" state_file_path = "/tmp/radioPlayer_state.json"
rds_basic_base = "Gramy: {}" rds_base = "Gramy: {} - {}"
rds_base = "Gramy: radio95 - {}" rds_default_artist = "radio95"
rds_default_name = "Program Godzinny" rds_default_name = "Program Godzinny"
rds_default_rtp_data = "4,7,7,1,17"
udp_host = ("127.0.0.1", 5000) udp_host = ("127.0.0.1", 5000)
@@ -157,11 +156,25 @@ def update_rds(track_name: str):
try: try:
name_table: dict[str, str] = load_dict_from_custom_format(name_table_path) name_table: dict[str, str] = load_dict_from_custom_format(name_table_path)
try: try:
if " - " in name_table[track_name]: prt = rds_basic_base.format(name_table[track_name]) name = name_table[track_name]
else: prt = rds_base.format(name_table[track_name])
except KeyError as e: except KeyError as e:
logger.warning(f"File does not have a alias in the name table ({e})") logger.warning(f"File does not have a alias in the name table ({e})")
prt = rds_basic_base.format(track_name.split(".", 1)[0]) name = track_name.split(".",1)[0]
if " - " in name:
count = name.count(" - ")
while count != 1: # yotutube reuploads, to avoid things like ilikedick123 - Micheal Jackson - Smooth Criminal
name = name.split(" - ", 1)[1]
count = name.count(" - ")
artist = name.split(" - ", 1)[0]
title = name.split(" - ", 1)[1]
else:
artist = rds_default_artist
title = name
title = re.sub(r'\s*[\(\[][^\(\)\[\]]*[\)\]]', '', title) # there might be junk
prt = rds_base.format(artist, title)
f = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) f = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
f.settimeout(1.0) f.settimeout(1.0)
@@ -171,11 +184,16 @@ def update_rds(track_name: str):
logger.error("Could not send TEXT to RDS, timeout.") logger.error("Could not send TEXT to RDS, timeout.")
return return
rtp = [4] # type 1
rtp.append(prt.find(artist)) # start 1
rtp.append(len(artist)) # len 1
rtp.append(1) # type 2
rtp.append(prt.find(title)) # start 2
rtp.append(len(title)) # len 2
rtp = list(map(str, rtp))
try: try:
try: f.sendto(f"RTP={','.join(rtp)}\r\n".encode(), udp_host)
f.sendto(f"RTP={rds_default_rtp_data},{len(str(name_table[track_name]))-1}\r\n".encode(), udp_host)
except KeyError:
f.sendto(f"RTP={rds_default_rtp_data},{len(rds_default_name)-1}\r\n".encode(), udp_host)
except socket.timeout: except socket.timeout:
logger.error("Could not send TEXT to RDS, timeout.") logger.error("Could not send TEXT to RDS, timeout.")
return return