Added gemini protocol and made RSS option work

This commit is contained in:
José Carlos Cuevas 2021-08-11 01:37:47 +02:00
parent 3aefaeea99
commit 8bb547cfb4
2 changed files with 96 additions and 10 deletions

View file

@ -4,6 +4,7 @@ certifi==2020.6.20
chardet==3.0.4
feedparser==5.2.1
idna==2.10
ignition-gemini==0.1.7
importlib-metadata==1.7.0
Pillow==7.2.0
pycairo==1.19.1

View file

@ -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])