Added gemini protocol and made RSS option work
This commit is contained in:
parent
3aefaeea99
commit
8bb547cfb4
2 changed files with 96 additions and 10 deletions
|
@ -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
|
||||
|
|
105
smallprint.py
105
smallprint.py
|
@ -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])
|
||||
|
|
Loading…
Reference in a new issue