This commit is contained in:
TylerCG 2025-04-27 20:34:02 -04:00
parent 49307515c8
commit 10aec38c05
2 changed files with 142 additions and 0 deletions

View File

@ -18,6 +18,20 @@ loop = asyncio.get_running_loop()
# JSON cache
cached_data = None
def shows():
html = ''
global cached_data
accepted_D20 = ('Dimension 20', 'Dimension 20 Animated', "Dimension 20's Adventuring Party")
for item in cached_data:
if 'Dimension 20' in item['SHOW']:
if item['SHOW'] in accepted_D20:
name = item['SHOW']
html += '<option value="' + name + '">' + name + '</option>'
else:
name = item['SHOW']
html += '<option value="' + name + '">' + name + '</option>'
return html
# api
@app.get("/dropout/update")
async def dropoutUpdate():
@ -106,3 +120,10 @@ async def webpage(request: Request):
return templates.TemplateResponse("ydl.html", {"request": request})
except Exception as e:
return JSONResponse(status_code=500, content={"status": "error", "message": str(e)})
@app.get("/dropout", include_in_schema=False)
async def webpage(request: Request):
try:
return templates.TemplateResponse("dropout.html", {"request": request, "shows": shows()})
except Exception as e:
return JSONResponse(status_code=500, content={"status": "error", "message": str(e)})

121
app/templates/dropout.html Normal file
View File

@ -0,0 +1,121 @@
<html>
<head>
<title>Dropout.tv</title>
<link rel="apple-touch-icon" sizes="180x180" href="/apple-touch-icon.png">
<link rel="icon" type="image/png" sizes="32x32" href="/favicon-32x32.png">
<link rel="icon" type="image/png" sizes="16x16" href="/favicon-16x16.png">
<link rel="manifest" href="/site.webmanifest">
<script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
<style>
:root {
font-family: system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif;
font-size: 17px;
background-color: #292F36;
color: #ccc;
}
body {
text-align: center;
margin-top: 5em;
}
@media (min-width: 1171px) {
.downloader{
height: 50px;
}
}
@media (max-width: 1170px) {
:root {
font-size: 40px;
}
.downloader{
height: 125px;
width: 700px;
}
}
.downloader {
font-size: 1.25em;
padding: 0.5em;
border-radius: 0.5em;
margin-bottom: 20px;
}
</style>
</head>
<body>
<form id="dropout_download">
<select class="downloader" name="show" id="download_show">
{{ shows }}
</select>
<input class="downloader" name="season" type="text" id="download_season" placeholder="Season">
<!-- <input class="downloader" name="episode" type="text" id="download_episode" placeholder="Episode"><br> -->
<button class="downloader" type="submit">Download</button> <!-- Added a submit button -->
</form>
<div id="downloadResult"></div>
</body>
<script>
function clearInput() {
$('#download_field').val(''); // Clear the input field
}
// Handle the form submission with AJAX
$(document).ready(function () {
$('#dropout_download').submit(function (event) {
event.preventDefault(); // Prevent the default form submission
alert("Episode(s) now downloading");
$.ajax({
type: 'POST', // Use POST method to send data
url: '/dropoutDownloader', // Target URL for the CherryPy handler
data: $('#dropout_download').serializeArray(), // Serialize the form data
success: function (data) {
$('#downloadResult').html(data); // Display the result in the specified div
alert("File has finished downloading");
}
});
});
});
let showsData = [];
// Load JSON data from the file
fetch('dropout.json')
.then(response => response.json())
.then(data => {
showsData = data;
populateShows();
});
function populateShows() {
const showSelect = document.getElementById("download_show");
showsData.forEach(show => {
const option = document.createElement("option");
option.value = show.SHOW;
option.text = show.SHOW;
showSelect.appendChild(option);
});
}
function updateSeasons() {
const showSelect = document.getElementById("download_show");
const seasonSelect = document.getElementById("download_season");
const selectedShow = showSelect.value;
// Clear existing options
seasonSelect.innerHTML = '';
// Find the selected show and update seasons
const show = showsData.find(s => s.SHOW === selectedShow);
if (show) {
show.SEASONS.forEach(season => {
const option = document.createElement("option");
option.value = season;
option.text = "Season " + season;
seasonSelect.appendChild(option);
});
}
}
</script>
</html>