|
|
|
@ -11,6 +11,7 @@ import os.path
|
|
|
|
|
# 3rd party imports
|
|
|
|
|
from escpos.printer import Usb, Dummy, File
|
|
|
|
|
import feedparser
|
|
|
|
|
import ignition
|
|
|
|
|
from PIL import Image
|
|
|
|
|
import re
|
|
|
|
|
import requests
|
|
|
|
@ -41,7 +42,7 @@ def initialize():
|
|
|
|
|
printer_endpoint = config.get("PRINTER_ENDPOINT") or 0x01
|
|
|
|
|
|
|
|
|
|
# return Usb(prid1, prid2, printer_interface, printer_endpoint)
|
|
|
|
|
return File("/dev/usb/lp2")
|
|
|
|
|
return File("/dev/usb/lp4")
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def reset_defaults(printer):
|
|
|
|
@ -108,7 +109,94 @@ def print_weather(printer):
|
|
|
|
|
logger.error("No weather info available")
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def print_rss(printer, link, news=1):
|
|
|
|
|
def print_gemini(printer, link):
|
|
|
|
|
"""
|
|
|
|
|
Given a Gemini link, it prints the file to the printer
|
|
|
|
|
and tries to do some interpretation if it is gemtext
|
|
|
|
|
"""
|
|
|
|
|
response = ignition.request(link)
|
|
|
|
|
|
|
|
|
|
if not response.success():
|
|
|
|
|
logger.error(f"Received error {response.status}")
|
|
|
|
|
return
|
|
|
|
|
|
|
|
|
|
reset_defaults(printer)
|
|
|
|
|
if response.meta == "text/gemini":
|
|
|
|
|
for raw_line in str(response.data()).split("\n"):
|
|
|
|
|
line = raw_line.rstrip()
|
|
|
|
|
if len(line) == 0:
|
|
|
|
|
printer.text("\n")
|
|
|
|
|
continue
|
|
|
|
|
|
|
|
|
|
if line.startswith("# "):
|
|
|
|
|
printer.set(align="left",
|
|
|
|
|
text_type="BU",
|
|
|
|
|
width=2, height=2,
|
|
|
|
|
smooth=True)
|
|
|
|
|
printer.text(line[2:])
|
|
|
|
|
|
|
|
|
|
elif line.startswith("## "):
|
|
|
|
|
printer.set(align="left",
|
|
|
|
|
text_type="BU",
|
|
|
|
|
width=1, height=1,
|
|
|
|
|
smooth=True)
|
|
|
|
|
printer.text(line[3:])
|
|
|
|
|
|
|
|
|
|
elif line.startswith("### "):
|
|
|
|
|
printer.set(align="left",
|
|
|
|
|
font="a",
|
|
|
|
|
text_type="U",
|
|
|
|
|
width=1, height=1,
|
|
|
|
|
smooth=True)
|
|
|
|
|
printer.text(line[4:])
|
|
|
|
|
|
|
|
|
|
elif line.startswith("#### "):
|
|
|
|
|
printer.set(align="left",
|
|
|
|
|
font="b",
|
|
|
|
|
text_type="U",
|
|
|
|
|
width=1, height=1,
|
|
|
|
|
smooth=True)
|
|
|
|
|
printer.text(line[5:])
|
|
|
|
|
|
|
|
|
|
elif line.startswith("=>"):
|
|
|
|
|
reset_defaults(printer)
|
|
|
|
|
printer.set(align="left",
|
|
|
|
|
font="b")
|
|
|
|
|
printer.text(line[3:])
|
|
|
|
|
reset_defaults(printer)
|
|
|
|
|
lnk = _process_link(link, line[3:])
|
|
|
|
|
printer.text("\n")
|
|
|
|
|
printer.qr(lnk, size=4)
|
|
|
|
|
|
|
|
|
|
else:
|
|
|
|
|
printer.set(align="left",
|
|
|
|
|
font="b")
|
|
|
|
|
printer.text(line)
|
|
|
|
|
|
|
|
|
|
printer.text("\n")
|
|
|
|
|
|
|
|
|
|
else:
|
|
|
|
|
printer.text(response.data())
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def _process_link(orig_link, link_text):
|
|
|
|
|
"""
|
|
|
|
|
Extracts the link from the text, and completes it if
|
|
|
|
|
necessary
|
|
|
|
|
"""
|
|
|
|
|
uri = link_text.split()[0]
|
|
|
|
|
|
|
|
|
|
if "://" in link_text:
|
|
|
|
|
return uri
|
|
|
|
|
|
|
|
|
|
if link_text.startswith("/"):
|
|
|
|
|
return orig_link + link_text
|
|
|
|
|
|
|
|
|
|
else:
|
|
|
|
|
return orig_link + "/" + link_text
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def print_rss(printer, link, news=3):
|
|
|
|
|
"""
|
|
|
|
|
Given an RSS link and a printer, prints the news from it
|
|
|
|
|
"""
|
|
|
|
@ -222,6 +310,7 @@ def create_parser():
|
|
|
|
|
|
|
|
|
|
parser.add_argument("--weather", default=False)
|
|
|
|
|
parser.add_argument("--news", default=False)
|
|
|
|
|
parser.add_argument("--gemini", default=False)
|
|
|
|
|
parser.add_argument("--text", nargs=1, default=None)
|
|
|
|
|
parser.add_argument("--file", default=None, type=open)
|
|
|
|
|
parser.add_argument("--image", nargs=1, default=None)
|
|
|
|
@ -247,15 +336,11 @@ if __name__ == "__main__":
|
|
|
|
|
print_weather(printer)
|
|
|
|
|
printer.text("\n\n")
|
|
|
|
|
|
|
|
|
|
if args.gemini:
|
|
|
|
|
print_gemini(printer, args.gemini)
|
|
|
|
|
|
|
|
|
|
if args.news:
|
|
|
|
|
print_rss(printer, "https://victorhckinthefreeworld.com/feed/")
|
|
|
|
|
printer.text("\n\n")
|
|
|
|
|
print_rss(printer, "https://pedalibre.org/feed/")
|
|
|
|
|
printer.text("\n\n")
|
|
|
|
|
print_rss(printer, "https://skyandtelescope.org/observing/sky-at-a-glance/feed/")
|
|
|
|
|
printer.text("\n\n")
|
|
|
|
|
print_rss(printer, "https://www.space.com/feeds/all", news=2)
|
|
|
|
|
printer.text("\n\n")
|
|
|
|
|
print_rss(printer, args.news)
|
|
|
|
|
|
|
|
|
|
if args.image:
|
|
|
|
|
print_image(printer, args.image[0])
|
|
|
|
|