123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081 |
- #!/usr/bin/env python3
- import asyncio
- import json
- from os import path
- import websockets
- from utils import expand_dir, get_current_yyyy_mm_dd_date, log
- import config as const
- from input import get_cachefile_content
- from recording import (
- is_valid_cd_record_checkfile,
- get_is_recording_active,
- get_cd_count,
- get_cd_marker_count,
- get_full_rec_time,
- get_track_rec_time,
- )
- def get_inactive_recording_status() -> dict:
- return {
- "recording": False,
- "cd": 0,
- "track": 0,
- "cd_time": "00:00",
- "track_time": "00:00",
- }
- async def status_sender(websocket):
- while True:
- if path.isfile(expand_dir(const.CD_RECORD_CACHEFILE)):
- cachefile_content = get_cachefile_content(const.CD_RECORD_CACHEFILE)
- if is_valid_cd_record_checkfile(
- cachefile_content, get_current_yyyy_mm_dd_date()
- ):
- is_recording_active = get_is_recording_active(cachefile_content)
- status = {
- "recording": is_recording_active,
- "cd": get_cd_count(is_recording_active, cachefile_content),
- "track": get_cd_marker_count(
- is_recording_active, cachefile_content
- ),
- "cd_time": get_full_rec_time(
- is_recording_active, cachefile_content
- ),
- "track_time": get_track_rec_time(
- is_recording_active, cachefile_content
- ),
- }
- else:
- status = get_inactive_recording_status()
- else:
- status = get_inactive_recording_status()
- await websocket.send(json.dumps(status))
- await asyncio.sleep(const.CD_RECORD_WEBSOCKET_SLEEP)
- async def handler(websocket):
- log(f"Client connected: {websocket.remote_address}")
- try:
- await status_sender(websocket)
- except websockets.exceptions.ConnectionClosed:
- log("Client disconnected")
- async def main():
- log(
- "Starting CD Rec status WebSocket server on ws://"
- + f"{const.CD_RECORD_WEBSOCKET_HOST}:{const.CD_RECORD_WEBSOCKET_PORT}"
- )
- async with websockets.serve(
- handler, const.CD_RECORD_WEBSOCKET_HOST, const.CD_RECORD_WEBSOCKET_PORT
- ):
- await asyncio.Future() # Run forever
- if __name__ == "__main__":
- asyncio.run(main())
|