diff --git a/__pycache__/apirequest.cpython-37.pyc b/__pycache__/apirequest.cpython-37.pyc index 1c3ec9e..ce0d2b1 100644 Binary files a/__pycache__/apirequest.cpython-37.pyc and b/__pycache__/apirequest.cpython-37.pyc differ diff --git a/__pycache__/imageprinter.cpython-37.pyc b/__pycache__/imageprinter.cpython-37.pyc index cbb7568..e976153 100644 Binary files a/__pycache__/imageprinter.cpython-37.pyc and b/__pycache__/imageprinter.cpython-37.pyc differ diff --git a/apirequest.py b/apirequest.py index ae99ae7..b426fea 100644 --- a/apirequest.py +++ b/apirequest.py @@ -17,6 +17,18 @@ def getcategory(category): return output +def getimages(category, number): + counter = 1 + output=[] + for post in data: + if data[post]["category"] == category: + if counter == number: + images = data[post]["images"] + for image in images: + output.append("http://127.0.0.1:5000"+image["url"]) + counter+=1 + return output + def get(category, number): counter = 1 output = [] @@ -28,6 +40,26 @@ def get(category, number): counter+=1 return output +def gettitle(category, number): + counter = 1 + output = [] + for post in data: + if data[post]["category"] == category: + if counter == number: + output.append(data[post]["title"]) + counter+=1 + return output + +def getcontent(category, number): + counter = 1 + output = [] + for post in data: + if data[post]["category"] == category: + if counter == number: + output.append(data[post]["content"]) + counter+=1 + return output + #getcategory("thesis") #get("thesis", 2) #thesis, exercise or term diff --git a/imageprinter.py b/imageprinter.py index b31255b..c081e7e 100644 --- a/imageprinter.py +++ b/imageprinter.py @@ -83,7 +83,7 @@ def print(filename): height_pixels, width_pixels = im.size - with open('/dev/tty', 'wb') as fp: + with open('/dev/usb/lp0', 'wb') as fp: fp.write(ESC+b"@") fp.write(ESC+b"\x7B"+b"\x41") fp.write(ESC + b"3" + six.int2byte(22)); # Adjust line-feed size diff --git a/print.py b/print.py index 46ccb0e..749b6ec 100644 --- a/print.py +++ b/print.py @@ -10,6 +10,11 @@ import sys, termios, tty, os, time import apirequest import imageprinter import requests +import subprocess +from subprocess import check_output +import datetime +import time + class Printer(): ESC = b'\x1B' @@ -18,7 +23,7 @@ class Printer(): CARIDGE_RET = b'\x0D' CHARWIDTH = 78 strokes = 0 - debug = True + debug = False target = "/dev/usb/lp0" if debug: target = "/dev/tty" @@ -37,16 +42,26 @@ class Printer(): printer.write(self.LINE_FEED) self.strokes = 0 - def printstring(self,string): + def printstring(self,string, formating="p"): + with open(self.target, 'wb') as printer: if self.debug: - printer.write(bytes(str(string), 'utf-8')) + if formating == "u": + printer.write(b"\x1B"+b"\x5B"+b"\x34"+b"\x6D") + printer.write(bytes(str(string), 'utf-8')) + printer.write(b"\x1B"+b"\x5B"+b"\x30"+b"\x6D") + + else: + printer.write(bytes(str(string), 'utf-8')) else: printer.write(self.ESC+b"\x7B"+b"\x41") printer.write(bytes(str(string), 'utf-8')) printer.write(self.ESC+b"\x25"+b"\x46"+b"\x0F"+b"\x00"+b"\x04"+b"\x08"+b"\x00") + try: + self.newline() + except: + time.sleep(1) self.newline() - def newline(self): global strokes @@ -55,12 +70,35 @@ class Printer(): self.strokes = 0 + def printimagefromurl(self, url): + page = requests.get(url) + f_ext = os.path.splitext(url)[-1] + f_name = 'img{}'.format(f_ext) + with open(f_name, 'wb') as f: + f.write(page.content) + + if printer.debug: + rows, columns = os.popen('stty size', 'r').read().split() + subprocess.call(["catimg","-w",columns,f_name]) + else: + imageprinter.print(f_name) + + class Terminal(): lineinput = "" commandMode = True writeloop = True + commands = { + "help":"get help on the commands", + "start":"start publication", + "list":"list theses and exercises", + "exercise ":"see the exercise with the specified", + "thesis ":"see the thesis with the specified", + "exit":"finish the publication", + } + def __init__(self,printer, persons): self.printer = printer self.persons = persons @@ -73,8 +111,9 @@ class Terminal(): self.lineinput = "" continue - def waitforinput(self): + def waitforinput(self, nocommand=False): self.writeloop = True + self.printer.printchar("> ") while self.writeloop: char = self.getch() if (ord(char) == 27): @@ -82,8 +121,14 @@ class Terminal(): exit(0) if (ord(char) == 13): self.printer.newline() - self.command(self.lineinput) - self.lineinput = "" + if not nocommand: + if not self.lineinput == "": + self.command(self.lineinput) + self.lineinput = "" + self.printer.printchar("> ") + else: + self.writeloop = False + else: self.lineinput+=char self.printer.printchar(char) @@ -99,33 +144,65 @@ class Terminal(): termios.tcsetattr(fd, termios.TCSADRAIN, old_settings) return ch + def scanwifi(self): + self.printer.newline() + out = check_output(["nmcli", "dev", "wif"]) + self.printer.printstring(out.decode("utf-8")) + + def list(self): + printer.printstring("theses on POETIC SOFTWARE", "u") + result = apirequest.getcategory("thesis") + for i, line in enumerate(result): + printer.printstring(str(i+1)+" "+line) + printer.newline() + printer.printstring("exercises in POETIC SOFTWARE","u") + result = apirequest.getcategory("exercise") + for i, line in enumerate(result): + printer.printstring(str(i+1)+" "+line) + printer.newline() + def command(self, command): #print("received command: "+str(command)) if "help" == str(command): - self.printer.printstring("type commands to print the publication") - self.printer.printstring("help:") - self.printer.printstring(" get help on the commands") + self.printer.printstring("The user in this publication is an active agent. The publication can be assembled according to your own wishes using commands. The following commands can be used.") + for key, help in self.commands.items(): + self.printer.printstring(key+":") + self.printer.printstring(" "+help) #self.writeloop = False + elif "list" == str(command): + self.list() + + elif "start" == str(command) or "restart" == str(command): + main() + elif str(command).split(" ")[0] == "exercise" or str(command).split(" ")[0] == "thesis": part = str(command).split(" ")[0] - try: - arguments = str(command.strip()).split(" ") - arguments.pop(0) + arguments = str(command.strip()).split(" ") + arguments.pop(0) + if len(arguments) < 1: + self.printer.printstring("no argument given. Usage: "+part+" ") + else: for i,arg in enumerate(arguments): if arg.isdigit(): number = int(arg) if number > len(apirequest.getcategory(part)): self.printer.printstring("Number must be inbetween 1 and "+ str(len(apirequest.getcategory(part)))) else: - result = apirequest.get(part, number) + result = apirequest.getimages(part, number) + for img in result: + printer.printimagefromurl(img) + result = apirequest.gettitle(part, number) + for line in result: + self.printer.printstring(line, "u") + result = apirequest.getcontent(part, number) for line in result: self.printer.printstring(line) + if apirequest.gettitle(part, number)[0] == "Wifi Poem": + self.scanwifi() self.printer.newline() else: - raise Exeption("not a number") - except: - self.printer.printstring("ERROR: no argument given. Usage: "+part+" ") + self.printer.printstring("not a number") elif str(command).split(" ")[0] == "whois": if str(command).split(" ")[1] in self.persons: @@ -134,10 +211,15 @@ class Terminal(): self.printer.printstring("Sorry not found, try " + random.choice(list(self.persons))) elif "exit" == str(command): - self.printer.printstring("Imprint") - result = apirequest.get("imprint", 1) - for line in result: - self.printer.printstring(line) + self.printer.printstring("Imprint", "u") + self.printer.newline() + self.printer.printstring("2019, Piet Zwart Institute, Rotterdam") + self.printer.printstring("Published by Alexander Roidl") + self.printer.printstring("and (enter your name)") + self.printer.newline() + self.waitforinput(nocommand=True) + self.printer.newline() + self.printer.printstring("Special thanks to Aymeric Mansoux, Marloes de Valk, Michael Murtaugh, André Castro, Clara Balaguer, Amy Suo Wu, Leslie Robbins, Angeliki, Alice, Tash, Zalan, Joca, Jule") self.printer.newline() main() @@ -155,41 +237,28 @@ persons = { } printer = Printer() term = Terminal(printer, persons) - -def printimagefromurl(url): - page = requests.get(url) - f_ext = os.path.splitext(url)[-1] - f_name = 'img{}'.format(f_ext) - with open(f_name, 'wb') as f: - f.write(page.content) - - imageprinter.print(f_name) +now = datetime.datetime.now() def main(): term.waittostart() printer.printstring("W E L C O M E !") - - printimagefromurl('https://apod.nasa.gov/apod/image/1701/potw1636aN159_HST_2048.jpg') - + printer.newline() + #printimagefromurl('https://apod.nasa.gov/apod/image/1701/potw1636aN159_HST_2048.jpg') + printer.printstring(now.strftime("%Y-%m-%d %H:%M")) + printer.newline() printer.printstring("---------------") printer.printstring("POETIC SOFTWARE") printer.printstring("---------------") printer.printstring("type help for help") printer.newline() - result = apirequest.get("introduction", 1) + result = apirequest.gettitle("introduction", 1) + for line in result: + printer.printstring(line, "u") + result = apirequest.getcontent("introduction", 1) for line in result: printer.printstring(line) printer.newline() - printer.printstring("theses on POETIC SOFTWARE") - result = apirequest.getcategory("thesis") - for i, line in enumerate(result): - printer.printstring(str(i+1)+" "+line) - printer.newline() - printer.printstring("exercises in POETIC SOFTWARE") - result = apirequest.getcategory("exercise") - for i, line in enumerate(result): - printer.printstring(str(i+1)+" "+line) - printer.newline() + term.list() printer.printstring("SELECT which one to see, for exercise type: exercise and for thesis type: thesis ") printer.newline() term.waitforinput()