You've already forked RadioPlayer
mirror of
https://github.com/radio95-rnt/RadioPlayer.git
synced 2026-02-26 21:53:54 +01:00
bruh
This commit is contained in:
@@ -34,10 +34,9 @@ class Module(ActiveModifier):
|
|||||||
official = True
|
official = True
|
||||||
if song.startswith("!"):
|
if song.startswith("!"):
|
||||||
song = song[1:]
|
song = song[1:]
|
||||||
official = False # NOT FLOATINGPOINTERROR
|
official = False
|
||||||
|
|
||||||
song = Path(song).absolute()
|
return Path(song).absolute(), official
|
||||||
return song, official
|
|
||||||
|
|
||||||
if len(songs):
|
if len(songs):
|
||||||
song, official = get_song()
|
song, official = get_song()
|
||||||
@@ -61,7 +60,6 @@ class Module(ActiveModifier):
|
|||||||
|
|
||||||
logger.info(f"Playing {song.name} instead, as instructed by toplay")
|
logger.info(f"Playing {song.name} instead, as instructed by toplay")
|
||||||
|
|
||||||
|
|
||||||
if len(songs):
|
if len(songs):
|
||||||
# There are more tracks on the temp list
|
# There are more tracks on the temp list
|
||||||
new_song, new_official = get_song(False)
|
new_song, new_official = get_song(False)
|
||||||
@@ -93,7 +91,6 @@ class Module(ActiveModifier):
|
|||||||
elif future.day > now.day: # late night goes mid day, as it starts at midnight
|
elif future.day > now.day: # late night goes mid day, as it starts at midnight
|
||||||
logger.warning("Skipping track as it the next day")
|
logger.warning("Skipping track as it the next day")
|
||||||
return (None, None), None
|
return (None, None), None
|
||||||
|
|
||||||
return (self.last_track, next_track), False
|
return (self.last_track, next_track), False
|
||||||
|
|
||||||
activemod = Module()
|
activemod = Module()
|
||||||
@@ -5,8 +5,7 @@ DAY_END = 18
|
|||||||
LATE_NIGHT_START = 0
|
LATE_NIGHT_START = 0
|
||||||
LATE_NIGHT_END = 5
|
LATE_NIGHT_END = 5
|
||||||
|
|
||||||
from modules import BaseIMCModule, InterModuleCommunication
|
from . import BaseIMCModule, InterModuleCommunication, PlaylistAdvisor, log95, Path
|
||||||
from . import PlaylistAdvisor, log95, Path
|
|
||||||
import os, datetime
|
import os, datetime
|
||||||
|
|
||||||
from typing import TextIO
|
from typing import TextIO
|
||||||
@@ -24,25 +23,25 @@ class Time:
|
|||||||
except OSError: return 0
|
except OSError: return 0
|
||||||
|
|
||||||
def check_if_playlist_modifed(playlist_path: Path) -> bool:
|
def check_if_playlist_modifed(playlist_path: Path) -> bool:
|
||||||
current_day, current_hour = datetime.datetime.now().strftime('%A').lower(), datetime.datetime.now().hour
|
current_day, current_hour = (time := datetime.datetime.now()).strftime('%A').lower(), time.hour
|
||||||
morning_playlist_path = Path(playlist_dir, current_day, "morning").absolute()
|
|
||||||
day_playlist_path = Path(playlist_dir, current_day, "day").absolute()
|
|
||||||
night_playlist_path = Path(playlist_dir, current_day, "night").absolute()
|
|
||||||
late_night_playlist_path = Path(playlist_dir, current_day, "late_night").absolute()
|
|
||||||
|
|
||||||
if DAY_START <= current_hour < DAY_END:
|
if DAY_START <= current_hour < DAY_END:
|
||||||
|
day_playlist_path = Path(playlist_dir, current_day, "day").absolute()
|
||||||
if playlist_path != day_playlist_path:
|
if playlist_path != day_playlist_path:
|
||||||
logger.info("Time changed to day hours, switching playlist...")
|
logger.info("Time changed to day hours, switching playlist...")
|
||||||
return True
|
return True
|
||||||
elif MORNING_START <= current_hour < MORNING_END:
|
elif MORNING_START <= current_hour < MORNING_END:
|
||||||
|
morning_playlist_path = Path(playlist_dir, current_day, "morning").absolute()
|
||||||
if playlist_path != morning_playlist_path:
|
if playlist_path != morning_playlist_path:
|
||||||
logger.info("Time changed to morning hours, switching playlist...")
|
logger.info("Time changed to morning hours, switching playlist...")
|
||||||
return True
|
return True
|
||||||
elif LATE_NIGHT_START <= current_hour < LATE_NIGHT_END:
|
elif LATE_NIGHT_START <= current_hour < LATE_NIGHT_END:
|
||||||
|
late_night_playlist_path = Path(playlist_dir, current_day, "late_night").absolute()
|
||||||
if playlist_path != late_night_playlist_path:
|
if playlist_path != late_night_playlist_path:
|
||||||
logger.info("Time changed to late night hours, switching playlist...")
|
logger.info("Time changed to late night hours, switching playlist...")
|
||||||
return True
|
return True
|
||||||
else:
|
else:
|
||||||
|
night_playlist_path = Path(playlist_dir, current_day, "night").absolute()
|
||||||
if playlist_path != night_playlist_path:
|
if playlist_path != night_playlist_path:
|
||||||
logger.info("Time changed to night hours, switching playlist...")
|
logger.info("Time changed to night hours, switching playlist...")
|
||||||
return True
|
return True
|
||||||
@@ -53,6 +52,7 @@ class Module(PlaylistAdvisor):
|
|||||||
self.last_mod_time = 0
|
self.last_mod_time = 0
|
||||||
self.last_playlist = None
|
self.last_playlist = None
|
||||||
self.class_imc = None
|
self.class_imc = None
|
||||||
|
|
||||||
self.custom_playlist = None
|
self.custom_playlist = None
|
||||||
self.custom_playlist_path = Path("/tmp/radioPlayer_list")
|
self.custom_playlist_path = Path("/tmp/radioPlayer_list")
|
||||||
self.custom_playlist_last_mod = 0
|
self.custom_playlist_last_mod = 0
|
||||||
@@ -66,7 +66,7 @@ class Module(PlaylistAdvisor):
|
|||||||
return self.custom_playlist
|
return self.custom_playlist
|
||||||
elif self.custom_playlist: self.custom_playlist = None
|
elif self.custom_playlist: self.custom_playlist = None
|
||||||
|
|
||||||
current_day, current_hour = datetime.datetime.now().strftime('%A').lower(), datetime.datetime.now().hour
|
current_day, current_hour = (time := datetime.datetime.now()).strftime('%A').lower(), time.hour
|
||||||
|
|
||||||
morning_playlist = Path(playlist_dir, current_day, "morning").absolute()
|
morning_playlist = Path(playlist_dir, current_day, "morning").absolute()
|
||||||
day_playlist = Path(playlist_dir, current_day, "day").absolute()
|
day_playlist = Path(playlist_dir, current_day, "day").absolute()
|
||||||
@@ -92,35 +92,32 @@ class Module(PlaylistAdvisor):
|
|||||||
logger.info(f"Playing {current_day} day playlist...")
|
logger.info(f"Playing {current_day} day playlist...")
|
||||||
self.last_mod_time = Time.get_playlist_modification_time(day_playlist)
|
self.last_mod_time = Time.get_playlist_modification_time(day_playlist)
|
||||||
self.last_playlist = day_playlist
|
self.last_playlist = day_playlist
|
||||||
return day_playlist
|
|
||||||
elif MORNING_START <= current_hour < MORNING_END:
|
elif MORNING_START <= current_hour < MORNING_END:
|
||||||
logger.info(f"Playing {current_day} morning playlist...")
|
logger.info(f"Playing {current_day} morning playlist...")
|
||||||
self.last_mod_time = Time.get_playlist_modification_time(morning_playlist)
|
self.last_mod_time = Time.get_playlist_modification_time(morning_playlist)
|
||||||
self.last_playlist = morning_playlist
|
self.last_playlist = morning_playlist
|
||||||
return morning_playlist
|
|
||||||
elif LATE_NIGHT_START <= current_hour < LATE_NIGHT_END:
|
elif LATE_NIGHT_START <= current_hour < LATE_NIGHT_END:
|
||||||
logger.info(f"Playing {current_day} late_night playlist...")
|
logger.info(f"Playing {current_day} late night playlist...")
|
||||||
self.last_mod_time = Time.get_playlist_modification_time(late_night_playlist)
|
self.last_mod_time = Time.get_playlist_modification_time(late_night_playlist)
|
||||||
self.last_playlist = late_night_playlist
|
self.last_playlist = late_night_playlist
|
||||||
return late_night_playlist
|
|
||||||
else:
|
else:
|
||||||
logger.info(f"Playing {current_day} night playlist...")
|
logger.info(f"Playing {current_day} night playlist...")
|
||||||
self.last_mod_time = Time.get_playlist_modification_time(night_playlist)
|
self.last_mod_time = Time.get_playlist_modification_time(night_playlist)
|
||||||
self.last_playlist = night_playlist
|
self.last_playlist = night_playlist
|
||||||
return night_playlist
|
return self.last_playlist
|
||||||
def new_playlist(self) -> bool:
|
def new_playlist(self) -> bool:
|
||||||
if self.custom_playlist and self.custom_playlist_path.exists():
|
if self.custom_playlist and self.custom_playlist_path.exists():
|
||||||
mod_time = Time.get_playlist_modification_time(self.custom_playlist)
|
if Time.get_playlist_modification_time(self.custom_playlist) > self.custom_playlist_last_mod:
|
||||||
if mod_time > self.custom_playlist_last_mod:
|
|
||||||
logger.info("Custom playlist changed on disc, reloading...")
|
logger.info("Custom playlist changed on disc, reloading...")
|
||||||
self.custom_playlist = None
|
self.custom_playlist = None
|
||||||
return True
|
return True
|
||||||
return False
|
return False
|
||||||
elif self.custom_playlist_path.exists(): return True
|
elif self.custom_playlist_path.exists(): return True
|
||||||
|
|
||||||
if not self.last_playlist: return True
|
if not self.last_playlist: return True
|
||||||
|
|
||||||
if check_if_playlist_modifed(self.last_playlist): return True
|
if check_if_playlist_modifed(self.last_playlist): return True
|
||||||
mod_time = Time.get_playlist_modification_time(self.last_playlist)
|
if Time.get_playlist_modification_time(self.last_playlist) > self.last_mod_time:
|
||||||
if mod_time > self.last_mod_time:
|
|
||||||
logger.info("Playlist changed on disc, reloading...")
|
logger.info("Playlist changed on disc, reloading...")
|
||||||
return True
|
return True
|
||||||
return False
|
return False
|
||||||
|
|||||||
@@ -9,8 +9,7 @@ def format_time(seconds) -> str:
|
|||||||
class Module(PlayerModule):
|
class Module(PlayerModule):
|
||||||
def progress(self, index: int, track: Track, elapsed: float, total: float, real_total: float) -> None:
|
def progress(self, index: int, track: Track, elapsed: float, total: float, real_total: float) -> None:
|
||||||
if track.official:
|
if track.official:
|
||||||
data = f"{track.path.name}: {format_time(elapsed)} / {format_time(total)}"
|
data = f"{track.path.name}: {format_time(elapsed)} / {format_time(total)}\n"
|
||||||
# print(data, end="\r", flush=True)
|
|
||||||
Path("/tmp/radioPlayer_progress").write_text(data)
|
Path("/tmp/radioPlayer_progress").write_text(data)
|
||||||
|
|
||||||
module = Module()
|
module = Module()
|
||||||
@@ -5,6 +5,6 @@ from . import PlaylistModifierModule, Track
|
|||||||
class Module(PlaylistModifierModule):
|
class Module(PlaylistModifierModule):
|
||||||
def modify(self, global_args: dict, playlist: list[Track]):
|
def modify(self, global_args: dict, playlist: list[Track]):
|
||||||
if int(global_args.get("no_shuffle", 0)) == 0: random.shuffle(playlist)
|
if int(global_args.get("no_shuffle", 0)) == 0: random.shuffle(playlist)
|
||||||
return None
|
return playlist
|
||||||
|
|
||||||
playlistmod = (Module(), 0)
|
playlistmod = (Module(), 0)
|
||||||
@@ -8,10 +8,8 @@ assert _log_out # pyright: ignore[reportUnboundVariable]
|
|||||||
logger = log95.log95("PlayView", output=_log_out)
|
logger = log95.log95("PlayView", output=_log_out)
|
||||||
|
|
||||||
class Module(PlayerModule):
|
class Module(PlayerModule):
|
||||||
def __init__(self) -> None:
|
def __init__(self) -> None: self.playlist = []
|
||||||
self.playlist = []
|
def on_new_playlist(self, playlist: list[Track]): self.playlist = [str(t.path.absolute()) for t in playlist]
|
||||||
def on_new_playlist(self, playlist: list[Track]):
|
|
||||||
self.playlist = [str(t.path.absolute()) for t in playlist]
|
|
||||||
def progress(self, index: int, track: Track, elapsed: float, total: float, real_total: float) -> None:
|
def progress(self, index: int, track: Track, elapsed: float, total: float, real_total: float) -> None:
|
||||||
if os.path.exists("/tmp/radioPlayer_skip"):
|
if os.path.exists("/tmp/radioPlayer_skip"):
|
||||||
self._imc.send(self, "procman", {"op": 2})
|
self._imc.send(self, "procman", {"op": 2})
|
||||||
@@ -22,8 +20,7 @@ class Module(PlayerModule):
|
|||||||
# discrepancy, which means that the playing file was modified by the active modifier
|
# discrepancy, which means that the playing file was modified by the active modifier
|
||||||
# we are playing a file that was not determined in the playlist, that means it was chosen by the active modifier and made up on the fly
|
# we are playing a file that was not determined in the playlist, that means it was chosen by the active modifier and made up on the fly
|
||||||
lines = self.playlist[:index] + [f"> ({track.path})"] + [self.playlist[index]] + self.playlist[index+1:]
|
lines = self.playlist[:index] + [f"> ({track.path})"] + [self.playlist[index]] + self.playlist[index+1:]
|
||||||
else:
|
else: lines = self.playlist[:index] + [f"> {self.playlist[index]}"] + self.playlist[index+1:]
|
||||||
lines = self.playlist[:index] + [f"> {self.playlist[index]}"] + self.playlist[index+1:]
|
|
||||||
with open("/tmp/radioPlayer_playlist", "w") as f:
|
with open("/tmp/radioPlayer_playlist", "w") as f:
|
||||||
for line in lines:
|
for line in lines:
|
||||||
try: f.write(line + "\n")
|
try: f.write(line + "\n")
|
||||||
|
|||||||
@@ -170,10 +170,9 @@ class RadioPlayer:
|
|||||||
for (spec, module, module_name) in self.modules:
|
for (spec, module, module_name) in self.modules:
|
||||||
assert spec.loader
|
assert spec.loader
|
||||||
try:
|
try:
|
||||||
start = time.monotonic()
|
start = time.perf_counter()
|
||||||
time.perf_counter()
|
|
||||||
spec.loader.exec_module(module)
|
spec.loader.exec_module(module)
|
||||||
time_took = time.monotonic() - start
|
time_took = time.perf_counter() - start
|
||||||
if time_took > 0.2: self.logger.warning(f"{module_name} took {time_took:.1f}s to start")
|
if time_took > 0.2: self.logger.warning(f"{module_name} took {time_took:.1f}s to start")
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
traceback.print_exc(file=self.logger.output)
|
traceback.print_exc(file=self.logger.output)
|
||||||
@@ -215,7 +214,8 @@ class RadioPlayer:
|
|||||||
playlist: list[Track] = []
|
playlist: list[Track] = []
|
||||||
[playlist.extend(Track(Path(line).absolute(), True, True, True, args) for line in lns) for (lns, args) in parsed] # i can read this, i think
|
[playlist.extend(Track(Path(line).absolute(), True, True, True, args) for line in lns) for (lns, args) in parsed] # i can read this, i think
|
||||||
|
|
||||||
for module in self.playlist_modifier_modules: playlist = module.modify(global_args, playlist) or playlist # id one liner this but the assignement is stopping me
|
[(playlist := module.modify(global_args, playlist) or playlist) for module in self.playlist_modifier_modules if module] # yep
|
||||||
|
|
||||||
prefetch(playlist[0].path)
|
prefetch(playlist[0].path)
|
||||||
[mod.on_new_playlist(playlist) for mod in self.simple_modules + [self.active_modifier] if mod] # one liner'd everything
|
[mod.on_new_playlist(playlist) for mod in self.simple_modules + [self.active_modifier] if mod] # one liner'd everything
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user