Compare commits

...

2 Commits

@ -1,5 +1,3 @@
#!/usr/bin/env python
# Python imports
import os.path
import sys
@ -13,16 +11,15 @@ from gi.repository import Gtk, Gio
import gettext
import locale
# Printing library import
import smallprint
if os.path.exists('locale/po') and os.path.exists('res'):
# We're in the development tree
DIR = "locale/po/"
RESOURCES = "res/"
elif sys.platform != 'win32' and sys.platform != 'darwin':
DIR = "/usr/share/locale/"
RESOURCES = "/usr/local/share/jsoninspector"
else:
DIR = "po"
RESOURCES = "res/"

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

@ -30,34 +30,7 @@
<property name="can_focus">False</property>
<child>
<object class="GtkImageMenuItem">
<property name="label">gtk-new</property>
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="use_underline">True</property>
<property name="use_stock">True</property>
</object>
</child>
<child>
<object class="GtkImageMenuItem">
<property name="label">gtk-open</property>
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="use_underline">True</property>
<property name="use_stock">True</property>
</object>
</child>
<child>
<object class="GtkImageMenuItem">
<property name="label">gtk-save</property>
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="use_underline">True</property>
<property name="use_stock">True</property>
</object>
</child>
<child>
<object class="GtkImageMenuItem">
<property name="label">gtk-save-as</property>
<property name="label">gtk-preferences</property>
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="use_underline">True</property>
@ -83,64 +56,6 @@
</child>
</object>
</child>
<child>
<object class="GtkMenuItem">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="yes">_Editar</property>
<property name="use_underline">True</property>
<child type="submenu">
<object class="GtkMenu">
<property name="visible">True</property>
<property name="can_focus">False</property>
<child>
<object class="GtkImageMenuItem">
<property name="label">gtk-cut</property>
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="use_underline">True</property>
<property name="use_stock">True</property>
</object>
</child>
<child>
<object class="GtkImageMenuItem">
<property name="label">gtk-copy</property>
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="use_underline">True</property>
<property name="use_stock">True</property>
</object>
</child>
<child>
<object class="GtkImageMenuItem">
<property name="label">gtk-paste</property>
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="use_underline">True</property>
<property name="use_stock">True</property>
</object>
</child>
<child>
<object class="GtkImageMenuItem">
<property name="label">gtk-delete</property>
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="use_underline">True</property>
<property name="use_stock">True</property>
</object>
</child>
</object>
</child>
</object>
</child>
<child>
<object class="GtkMenuItem">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="yes">_Ver</property>
<property name="use_underline">True</property>
</object>
</child>
<child>
<object class="GtkMenuItem">
<property name="visible">True</property>
@ -206,14 +121,143 @@
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="orientation">vertical</property>
<property name="spacing">5</property>
<child>
<placeholder/>
<object class="GtkButton" id="PrintTextFileButton">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
<property name="margin_left">5</property>
<property name="margin_right">5</property>
<child>
<object class="GtkBox">
<property name="visible">True</property>
<property name="can_focus">False</property>
<child>
<object class="GtkLabel">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="yes">Print text file</property>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="padding">5</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkImage">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="stock">gtk-file</property>
<property name="icon_size">3</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
</object>
</child>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<placeholder/>
<object class="GtkButton" id="PrintImageFileButton">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
<property name="margin_left">5</property>
<property name="margin_right">4</property>
<child>
<object class="GtkBox">
<property name="visible">True</property>
<property name="can_focus">False</property>
<child>
<object class="GtkLabel">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="yes">Print image file</property>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="padding">5</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkImage">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="stock">gtk-orientation-landscape</property>
<property name="icon_size">6</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
</object>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="padding">5</property>
<property name="position">1</property>
</packing>
</child>
<child>
<placeholder/>
<object class="GtkButton" id="PrintPDFFileButton">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
<child>
<object class="GtkBox">
<property name="visible">True</property>
<property name="can_focus">False</property>
<child>
<object class="GtkLabel">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="yes">Print PDF file</property>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="padding">5</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkImage">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="stock">gtk-select-all</property>
<property name="icon_size">3</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
</object>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">2</property>
</packing>
</child>
</object>
<packing>

@ -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…
Cancel
Save