feat: add basic play/pause web ui
This commit is contained in:
18
server.py
18
server.py
@@ -1,13 +1,12 @@
|
||||
import threading
|
||||
from .generate import generate
|
||||
|
||||
# from generate import generate
|
||||
from fastapi import FastAPI
|
||||
from fastapi.responses import FileResponse
|
||||
from fastapi.staticfiles import StaticFiles
|
||||
|
||||
app = FastAPI()
|
||||
current_index = 0
|
||||
|
||||
app.mount("/", StaticFiles(directory="web", html=True), name="web")
|
||||
current_index = -1
|
||||
|
||||
|
||||
def advance():
|
||||
@@ -23,8 +22,19 @@ def advance():
|
||||
else:
|
||||
current_index = current_index + 1
|
||||
|
||||
print(f"advancing, current index {current_index}")
|
||||
|
||||
t = threading.Timer(60, advance)
|
||||
t.start()
|
||||
|
||||
|
||||
advance()
|
||||
|
||||
|
||||
@app.get("/current.mp3")
|
||||
def get_current_audio():
|
||||
print("hello")
|
||||
return FileResponse(f"{current_index}.mp3")
|
||||
|
||||
|
||||
app.mount("/", StaticFiles(directory="web", html=True), name="web")
|
||||
|
@@ -2,10 +2,15 @@
|
||||
<html>
|
||||
<head>
|
||||
<title>infinifi</title>
|
||||
<link rel="stylesheet" href="/style.css">
|
||||
</head>
|
||||
<body>
|
||||
<main>
|
||||
<p>test</p>
|
||||
<main class="container">
|
||||
<h1 class="header">infinifi</h1>
|
||||
<h2>infinite lo-fi music in the background</h2>
|
||||
<div class="button-container">
|
||||
<button id="play-btn" class="button">play</button>
|
||||
</div>
|
||||
</main>
|
||||
<script type="text/javascript" src="/script.js"></script>
|
||||
</body>
|
||||
|
@@ -0,0 +1,34 @@
|
||||
const playBtn = document.getElementById("play-btn");
|
||||
|
||||
let isPlaying = false;
|
||||
let currentAudio;
|
||||
let volume = 1;
|
||||
|
||||
function playAudio() {
|
||||
currentAudio = new Audio("/current.mp3");
|
||||
currentAudio.onplay = () => {
|
||||
isPlaying = true;
|
||||
playBtn.innerText = "pause";
|
||||
};
|
||||
currentAudio.onpause = () => {
|
||||
isPlaying = false;
|
||||
playBtn.innerText = "play";
|
||||
};
|
||||
|
||||
currentAudio.volume = volume;
|
||||
|
||||
currentAudio.load();
|
||||
currentAudio.play();
|
||||
}
|
||||
|
||||
function pauseAudio() {
|
||||
currentAudio.pause();
|
||||
}
|
||||
|
||||
playBtn.onclick = () => {
|
||||
if (isPlaying) {
|
||||
pauseAudio();
|
||||
} else {
|
||||
playAudio();
|
||||
}
|
||||
};
|
||||
|
95
web/style.css
Normal file
95
web/style.css
Normal file
@@ -0,0 +1,95 @@
|
||||
:root {
|
||||
font-family: monospace;
|
||||
--background-color: #f0f0f0;
|
||||
}
|
||||
|
||||
html,
|
||||
body {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
body {
|
||||
height: 100vh;
|
||||
margin: 0;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
background-color: #f0f0f0;
|
||||
opacity: 1;
|
||||
background-image: radial-gradient(#000000 0.5px, #f0f0f0 0.5px);
|
||||
background-size: 10px 10px;
|
||||
}
|
||||
|
||||
h1,
|
||||
h2,
|
||||
h3,
|
||||
h4,
|
||||
h5,
|
||||
h6 {
|
||||
margin: 0;
|
||||
opacity: 80%;
|
||||
font-weight: 400;
|
||||
}
|
||||
|
||||
.header {
|
||||
font-weight: 800;
|
||||
margin-bottom: 1rem;
|
||||
}
|
||||
|
||||
.container {
|
||||
width: 50%;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: start;
|
||||
}
|
||||
|
||||
.button-container {
|
||||
margin-top: 2rem;
|
||||
display: flex;
|
||||
}
|
||||
|
||||
.button {
|
||||
border: 2px solid black;
|
||||
position: relative;
|
||||
font-family: monospace;
|
||||
font-weight: 800;
|
||||
padding: 0.5rem 1rem;
|
||||
}
|
||||
|
||||
.button:hover {
|
||||
background-color: #f0f0f0;
|
||||
background-size: 10px 10px;
|
||||
background-image: repeating-linear-gradient(
|
||||
45deg,
|
||||
#c9c9c9 0,
|
||||
#c9c9c9 1px,
|
||||
#f0f0f0 0,
|
||||
#f0f0f0 50%
|
||||
);
|
||||
}
|
||||
|
||||
.button:active {
|
||||
background: black !important;
|
||||
color: white;
|
||||
transform: translate(2px, 2px);
|
||||
}
|
||||
|
||||
.button:active::after {
|
||||
content: none;
|
||||
}
|
||||
|
||||
.button:after {
|
||||
display: block;
|
||||
position: absolute;
|
||||
margin: -2px;
|
||||
width: inherit;
|
||||
top: 1px;
|
||||
left: 1px;
|
||||
right: -1px;
|
||||
bottom: -1px;
|
||||
padding: 0.5rem 1rem;
|
||||
content: "";
|
||||
background-color: black;
|
||||
z-index: -1;
|
||||
transform: translate(2px, 2px);
|
||||
}
|
Reference in New Issue
Block a user