changes needed to adapt to new environment
This commit is contained in:
69
main.py
69
main.py
@@ -1,5 +1,8 @@
|
||||
#!/usr/bin/env python3
|
||||
|
||||
import base64
|
||||
import datetime
|
||||
import io
|
||||
import json
|
||||
import logging
|
||||
import math
|
||||
@@ -8,15 +11,18 @@ import subprocess
|
||||
import threading
|
||||
import time
|
||||
from collections import OrderedDict
|
||||
from pathlib import Path
|
||||
|
||||
import PIL.Image
|
||||
import bottle
|
||||
import numpy as np
|
||||
import serial
|
||||
# noinspection PyUnresolvedReferences
|
||||
import bottle.ext.websocket as bottle_ws
|
||||
import geventwebsocket.websocket
|
||||
import numpy as np
|
||||
import urllib.request
|
||||
import serial
|
||||
# noinspection PyUnresolvedReferences
|
||||
from bottle.ext.websocket import GeventWebSocketServer
|
||||
import geventwebsocket.websocket
|
||||
|
||||
import config
|
||||
import filters
|
||||
@@ -507,7 +513,7 @@ def pixel(x, y, r, g, b, w):
|
||||
data.buffer[y][x][2] = b
|
||||
if data.channels == 4:
|
||||
data.buffer[y][x][3] = w
|
||||
runner.datasource.pushData(data)
|
||||
runner.app.datasource.pushData(data)
|
||||
return "ok"
|
||||
|
||||
|
||||
@@ -558,6 +564,61 @@ def frame_ws(ws: geventwebsocket.websocket.WebSocket):
|
||||
runner.app.datasource.pushData(data)
|
||||
|
||||
|
||||
@bottle.route("/save_frame")
|
||||
def save_frame():
|
||||
screenshot_dir = Path("./screenshots")
|
||||
screenshot_dir.mkdir(parents=True, exist_ok=True)
|
||||
data = runner.datasource.getData()
|
||||
PIL.Image.fromarray(data.buffer.copy().astype("u1")).save(screenshot_dir.joinpath(f"frame-{datetime.datetime.now().astimezone().replace(tzinfo=None).isoformat()}.png"))
|
||||
return "ok"
|
||||
|
||||
|
||||
@bottle.post("/load_frame")
|
||||
def load_frame():
|
||||
src = bottle.request.json["src"]
|
||||
buf = np.array(PIL.Image.open(io.BytesIO(urllib.request.urlopen(src).read())), dtype=np.uint8)
|
||||
|
||||
if buf.shape == (80, 40, 3) or buf.shape == (80, 40, 4):
|
||||
buf = buf.swapaxes(0, 1)
|
||||
elif buf.shape == (40, 80, 3) or buf.shape == (40, 80, 4):
|
||||
pass
|
||||
else:
|
||||
return 415
|
||||
|
||||
if runner.app.name != "pixelcanvas":
|
||||
startApp("pixelcanvas")
|
||||
for _ in range(200):
|
||||
if runner.requestedApp is None:
|
||||
break
|
||||
time.sleep(0.01)
|
||||
else:
|
||||
return 500
|
||||
|
||||
runner.app.datasource.pushData(Frame(buf, buf.shape[2]))
|
||||
return "ok"
|
||||
|
||||
|
||||
@bottle.route("/gallery_frames")
|
||||
def gallery_frames():
|
||||
screenshot_dir = Path("./screenshots")
|
||||
if not screenshot_dir.exists():
|
||||
return []
|
||||
frames = []
|
||||
for p in screenshot_dir.glob("frame-*.png"):
|
||||
try:
|
||||
dt = datetime.datetime.fromisoformat(p.stem.removeprefix("frame-")).astimezone().astimezone(datetime.timezone.utc)
|
||||
i = "data:image/png;base64," + base64.b64encode(p.read_bytes()).decode()
|
||||
frames.append({
|
||||
"dt": dt.isoformat(),
|
||||
"caption": dt.strftime("%d.%m.%Y %H:%M"),
|
||||
"src": i,
|
||||
})
|
||||
except:
|
||||
continue
|
||||
frames.sort(key=lambda f: f["dt"], reverse=True)
|
||||
return json.dumps(frames)
|
||||
|
||||
|
||||
@bottle.route("/")
|
||||
def index():
|
||||
return bottle.static_file("index.html", root='html')
|
||||
|
||||
Reference in New Issue
Block a user