|
@@ -3,6 +3,9 @@ from flask_paginate import Pagination, get_page_parameter, get_page_args
|
|
|
from flask_caching import Cache
|
|
|
from flask import request
|
|
|
import pendulum
|
|
|
+import subprocess
|
|
|
+import base64
|
|
|
+import os
|
|
|
|
|
|
app = Flask(__name__)
|
|
|
|
|
@@ -63,13 +66,33 @@ def display_messages(area):
|
|
|
)
|
|
|
|
|
|
|
|
|
+def ansi_to_png(raw_ansi_bytes, idx):
|
|
|
+ pid = os.getppid()
|
|
|
+ ansifile = "{0}-{1}.ans".format(idx, pid)
|
|
|
+ pngfile = "{0}-{1}.png".format(idx, pid)
|
|
|
+ with open(ansifile, "wb") as fp:
|
|
|
+ fp.write(raw_ansi_bytes)
|
|
|
+ subprocess.run(["./ansilove", "-d", "-o", pngfile, ansifile])
|
|
|
+ with open(pngfile, "rb") as fp:
|
|
|
+ png = fp.read()
|
|
|
+ os.unlink(ansifile)
|
|
|
+ os.unlink(pngfile)
|
|
|
+ return base64.b64encode(png).decode("utf-8")
|
|
|
+
|
|
|
+
|
|
|
+# <img alt="My Image" src="data:image/png;base64,
|
|
|
@app.route("/read/<area>/<int:msgno>")
|
|
|
def display_message(area, msgno):
|
|
|
if area not in bases:
|
|
|
return render_template("missing-area.html")
|
|
|
|
|
|
message = jammin.read_message(bases[area], msgno)
|
|
|
+
|
|
|
if "text" in message:
|
|
|
- message["text"] = message["text"].replace("\r", "\n") # <br >\n")
|
|
|
+ if "\x1b" in message["text"]:
|
|
|
+ # Ok, the message contains ANSI CODES -- Convert
|
|
|
+ message["png"] = ansi_to_png(message["bytes"].replace(b"\r", b"\n"), msgno)
|
|
|
+ else:
|
|
|
+ message["text"] = message["text"].replace("\r", "\n") # <br >\n")
|
|
|
|
|
|
return render_template("message.html", message=message, area=area, msgnumber=msgno)
|