Files
oe-html-viewer/main.py
2025-03-30 19:59:45 +02:00

95 lines
2.9 KiB
Python

import os
from flask import Flask
from watchdog.observers import Observer
from watchdog.events import FileSystemEventHandler
# -------------- VARIABLES --------------
html_file_path = r'C:\<PATH>'
host = '0.0.0.0' # http://localhost OR http://<ip_address>
port = 80
is_oe11 = True # if using OE11 set it to True, for OE12 set it to False (encoding)
scroll_pixels = 100
scroll_interval = 3 # seconds
bottom_wait_time = 3 # seconds
top_wait_time = 3 # seconds
reload_interval = 35 # seconds
# -------------- END VARIABLES --------------
app = Flask(__name__)
class FileChangeHandler(FileSystemEventHandler):
def __init__(self, app):
self.app = app
def on_modified(self, event):
if event.src_path == html_file_path:
with self.app.app_context():
self.app.config['TEMPLATES_AUTO_RELOAD'] = True
@app.route('/')
def serve_html():
with open(html_file_path, 'r', encoding= ('latin-1' if is_oe11 else 'utf-8') ) as file:
content = file.read()
content += f'''
<style>
html {{
scroll-behavior: smooth;
}}
</style>
<script>
let scrollAmount = {scroll_pixels};
let scrollInterval = {scroll_interval} * 1000;
let bottomWaitTime = {bottom_wait_time} * 1000;
let topWaitTime = {top_wait_time} * 1000;
let reloadInterval = {reload_interval} * 1000;
let scrollPos = 0;
let scrollingDown = true;
function autoScroll() {{
if (scrollingDown) {{
window.scrollBy(0, scrollAmount);
scrollPos += scrollAmount;
if ((window.innerHeight + window.scrollY) >= document.body.offsetHeight) {{
scrollingDown = false;
setTimeout(reloadPage, bottomWaitTime);
return;
}}
}} else {{
window.scrollTo(0, 0);
scrollPos = 0;
scrollingDown = true;
setTimeout(autoScroll, topWaitTime);
return;
}}
setTimeout(autoScroll, scrollInterval);
}}
function reloadPage() {{
window.scrollTo(0, 0);
setTimeout(() => {{
location.reload();
}}, 100);
}}
window.onload = function() {{
window.scrollTo(0, 0);
if (document.body.scrollHeight <= window.innerHeight) {{
setTimeout(reloadPage, reloadInterval);
}} else {{
setTimeout(autoScroll, topWaitTime);
}}
}};
</script>
'''
return content
if __name__ == '__main__':
event_handler = FileChangeHandler(app)
observer = Observer()
observer.schedule(event_handler, path=os.path.dirname(html_file_path), recursive=False)
observer.start()
try:
app.run(host=host, port=port)
except KeyboardInterrupt:
observer.stop()
observer.join()