parent
1de944fa36
commit
7991aebb69
@ -0,0 +1,58 @@ |
||||
import json |
||||
import os |
||||
from flask import Flask, render_template |
||||
from apscheduler.schedulers.background import BackgroundScheduler |
||||
from threading import Thread # Importiere die Thread-Klasse |
||||
|
||||
app = Flask(__name__) |
||||
|
||||
json_file_path = 'websites.json' |
||||
websites = [] |
||||
|
||||
def load_websites(): |
||||
try: |
||||
with open(json_file_path, 'r') as json_file: |
||||
websites_data = json.load(json_file) |
||||
return websites_data.get('websites', []) |
||||
except FileNotFoundError: |
||||
print("Die Datei 'websites.json' wurde nicht gefunden.") |
||||
return [] |
||||
|
||||
def has_file_changed(): |
||||
try: |
||||
current_mtime = os.path.getmtime(json_file_path) |
||||
return current_mtime != has_file_changed.last_mtime |
||||
except FileNotFoundError: |
||||
return False |
||||
|
||||
has_file_changed.last_mtime = 0 |
||||
|
||||
def update_websites(): |
||||
global websites |
||||
if has_file_changed(): |
||||
print("Die Datei 'websites.json' wurde geändert. Aktualisiere die Websites.") |
||||
websites = load_websites() |
||||
has_file_changed.last_mtime = os.path.getmtime(json_file_path) |
||||
|
||||
@app.route('/') |
||||
def index(): |
||||
update_websites() |
||||
if websites: |
||||
return render_template('index.html', current_website=websites[0], websites=websites) |
||||
else: |
||||
return "Keine Websites verfügbar." |
||||
|
||||
def periodic_update(): |
||||
print("Periodisches Update alle 10 Sekunden.") |
||||
update_websites() |
||||
|
||||
if __name__ == '__main__': |
||||
scheduler = BackgroundScheduler() |
||||
scheduler.add_job(func=periodic_update, trigger="interval", seconds=10) |
||||
|
||||
# Erstelle einen Thread für den Scheduler und starte ihn |
||||
scheduler_thread = Thread(target=scheduler.start) |
||||
scheduler_thread.start() |
||||
|
||||
# Starte die Flask-Anwendung |
||||
app.run(debug=False) |
||||
@ -0,0 +1,85 @@ |
||||
<!DOCTYPE html> |
||||
<html lang="en"> |
||||
<head> |
||||
<meta charset="UTF-8"> |
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0"> |
||||
<title>Digital Signage</title> |
||||
<script src="https://code.jquery.com/jquery-3.6.4.min.js"></script> |
||||
<style> |
||||
body { |
||||
margin: 0; |
||||
padding: 0; |
||||
font-family: Arial, sans-serif; |
||||
} |
||||
|
||||
#websiteFrame { |
||||
width: 100%; |
||||
height: 100vh; |
||||
border: 0; |
||||
} |
||||
|
||||
#container { |
||||
display: flex; |
||||
flex-direction: column; |
||||
align-items: center; |
||||
justify-content: center; |
||||
height: 100vh; |
||||
} |
||||
|
||||
#navigation { |
||||
display: flex; |
||||
margin-top: 10px; |
||||
} |
||||
|
||||
#prevBtn, #nextBtn { |
||||
margin: 0 10px; |
||||
padding: 8px 16px; |
||||
font-size: 14px; |
||||
} |
||||
|
||||
@media (max-width: 600px) { |
||||
#navigation { |
||||
flex-direction: column; |
||||
} |
||||
|
||||
#prevBtn, #nextBtn { |
||||
margin: 5px 0; |
||||
} |
||||
} |
||||
</style> |
||||
</head> |
||||
<body> |
||||
<div id="container"> |
||||
<iframe id="websiteFrame" src="{{ current_website }}" frameborder="0"></iframe> |
||||
<!-- <div id="navigation"> |
||||
<button id="prevBtn">Vorherige Seite</button> |
||||
<button id="nextBtn">Nächste Seite</button> |
||||
</div> --> |
||||
</div> |
||||
|
||||
<script> |
||||
var websites = {{ websites|tojson|safe }}; |
||||
var currentIndex = 0; |
||||
|
||||
function updateWebsite() { |
||||
$("#websiteFrame").attr("src", websites[currentIndex]); |
||||
} |
||||
|
||||
$("#prevBtn").click(function() { |
||||
currentIndex = (currentIndex - 1 + websites.length) % websites.length; |
||||
updateWebsite(); |
||||
}); |
||||
|
||||
$("#nextBtn").click(function() { |
||||
currentIndex = (currentIndex + 1) % websites.length; |
||||
updateWebsite(); |
||||
}); |
||||
|
||||
// Starte den Wechselprozess alle 10 Sekunden |
||||
setInterval(function() { |
||||
currentIndex = (currentIndex + 1) % websites.length; |
||||
updateWebsite(); |
||||
}, 10000); |
||||
</script> |
||||
</body> |
||||
</html> |
||||
@ -0,0 +1,7 @@ |
||||
{ |
||||
"websites": [ |
||||
"https://161hz.de", |
||||
"https://hs.matthes.me", |
||||
"https://cdn.161hz.de" |
||||
] |
||||
} |
||||
@ -0,0 +1,7 @@ |
||||
{ |
||||
"websites": [ |
||||
"https://161hz.de", |
||||
"https://161hz.stream", |
||||
"https://ontime.161hz.stream" |
||||
] |
||||
} |
||||
Loading…
Reference in new issue