ChessCommanderFlet / audio_utils.py
Danisz's picture
Refactor into JS execution
0b2be8e
Raw History Blame Contribute Delete
1.11 kB
import asyncio
import logging
import flet as ft
logger = logging.getLogger(__name__)
async def get_base64_audio(page: ft.Page, audio_blob_uri: str) -> str | None:
start_time = asyncio.get_event_loop().time()
result = None
try:
logger.info("Result URI: %s", audio_blob_uri)
logger.info("="*100)
# Use the eval_js method to execute JavaScript and get the result directly
result = await page.eval_js(f"""
const blob = await fetch('{audio_blob_uri}').then(r => r.blob());
const base64data = await new Promise((resolve) => {{
const reader = new FileReader();
reader.onloadend = () => resolve(reader.result.split(',')[1]);
reader.readAsDataURL(blob);
}});
return base64data;
""")
except Exception as e:
logger.error(f"Error in get_base64_audio: {str(e)}")
finally:
end_time = asyncio.get_event_loop().time()
elapsed_time = end_time - start_time
logger.info(f"Time taken to get base64 audio: {elapsed_time:.2f} seconds")
return result