# HG changeset patch # User drewp@bigasterisk.com # Date 2024-05-23 23:42:17 # Node ID f6e40619cf271173f29d328d04fdfa3086fb2ac2 # Parent 4b8f8fabeb2f5520b2d2aaa528e0003a484742ea reformat diff --git a/src/light9/ascoltami/player.py b/src/light9/ascoltami/player.py --- a/src/light9/ascoltami/player.py +++ b/src/light9/ascoltami/player.py @@ -1,10 +1,15 @@ -#!/usr/bin/python """ alternate to the mpd music player, for ascoltami """ -import time, logging, traceback -from gi.repository import Gst # type: ignore +import logging +import time +import traceback +from dataclasses import dataclass +from pathlib import Path + +from gi.repository import Gst +from rdflib import URIRef from twisted.internet import task from light9.metrics import metrics log = logging.getLogger() @@ -40,8 +45,7 @@ class Player: self.pollForMessages() t = self.currentTime() - log.debug("watch %s < %s < %s", self._lastWatchTime, - self._autoStopTime, t) + log.debug("watch %s < %s < %s", self._lastWatchTime, self._autoStopTime, t) if self._lastWatchTime < self._autoStopTime < t: log.info("autostop") self.pause() @@ -94,10 +98,7 @@ class Player: self.setupAutostop() def seek(self, t): - isSeekable = self.playbin.seek_simple( - Gst.Format.TIME, - Gst.SeekFlags.FLUSH | Gst.SeekFlags.ACCURATE | Gst.SeekFlags.SKIP, - t * Gst.SECOND) + isSeekable = self.playbin.seek_simple(Gst.Format.TIME, Gst.SeekFlags.FLUSH | Gst.SeekFlags.ACCURATE | Gst.SeekFlags.SKIP, t * Gst.SECOND) if not isSeekable: raise ValueError('seek_simple failed') self._playStartTime = time.time() @@ -154,14 +155,7 @@ class Player: """json-friendly object describing the interesting states of the player nodes""" success, state, pending = self.playbin.get_state(timeout=0) - return { - "current": { - "name": state.value_nick - }, - "pending": { - "name": state.value_nick - } - } + return {"current": {"name": state.value_nick}, "pending": {"name": state.value_nick}} def pause(self): self.pipeline.set_state(Gst.State.PAUSED) @@ -174,8 +168,7 @@ class Player: return False pos = self.currentTime() autoStop = self.duration() - self.autoStopOffset - return not self.isPlaying() and abs( - pos - autoStop) < 1 # i've seen .4 difference here + return not self.isPlaying() and abs(pos - autoStop) < 1 # i've seen .4 difference here def resume(self): self.pipeline.set_state(Gst.State.PLAYING) diff --git a/src/light9/ascoltami/webapp.py b/src/light9/ascoltami/webapp.py --- a/src/light9/ascoltami/webapp.py +++ b/src/light9/ascoltami/webapp.py @@ -7,11 +7,11 @@ import time from typing import cast from rdflib import RDFS, Graph, URIRef -from light9.ascoltami.player import Player from sse_starlette.sse import EventSourceResponse from starlette.requests import Request from starlette.responses import JSONResponse, PlainTextResponse +from light9.ascoltami.player import Player from light9.namespaces import L9 from light9.showconfig import getSongsFromShow, showUri, songOnDisk @@ -96,6 +96,7 @@ async def post_time(request: Request) -> async def timeStream(request: Request): graph = cast(Graph, request.app.state.graph) player = cast(Player, request.app.state.player) + async def event_generator(): last_sent = None last_sent_time = 0.0