diff --git a/__pycache__/apirequest.cpython-37.pyc b/__pycache__/apirequest.cpython-37.pyc index ce0d2b1..91f026b 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 daedf26..6b549db 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 b426fea..ce5e0ff 100644 --- a/apirequest.py +++ b/apirequest.py @@ -1,7 +1,7 @@ import requests import json -r = requests.get("http://127.0.0.1:5000/api/getcontent") +r = requests.get("http://127.0.0.1:1234/api/getcontent") data = r.json() def getcategory(category): @@ -25,7 +25,21 @@ def getimages(category, number): if counter == number: images = data[post]["images"] for image in images: - output.append("http://127.0.0.1:5000"+image["url"]) + output.append("http://127.0.0.1:1234"+image["url"]) + counter+=1 + return output + +def getlinks(category, number): + counter = 1 + output=[] + for post in data: + if data[post]["category"] == category: + if counter == number: + links = data[post]["removedLinks"] + for link in links: + item = data.get(link) + output.append(item['title']) + output.append(item['content']) counter+=1 return output diff --git a/print.py b/print.py index 9376cdc..332277d 100644 --- a/print.py +++ b/print.py @@ -20,8 +20,12 @@ class Printer(): ESC = b'\x1B' FORMFEED = b'\x0C' UNDERLINEDON = b'\x1B'+b'\x2D'+b'\x31' + UNDERLINEDOFF = b'\x1B'+b'\x2D'+b'\x30' ITALICON = b'\x1B'+b'\x34' ITALICOFF = b'\x1B'+b'\x35' + CPITWELF = b'\x1B'+b'\x4D' + NLQ= b'\x1B'+b'\x78'+b'\x31' + NLQ2 = b'\x1B'+b'\x6B'+b'\x01' BOLDON = b'\x1B'+b'\x45' BOLDOFF = b'\x1B'+b'\x46' DHON = b'\x1B'+b'\x77'+b'\x01' @@ -31,21 +35,22 @@ class Printer(): CHANGE_EMULATION = ESC+b'\x7B'+b'\x65' LINE_FEED = b'\n' CARIDGE_RET = b'\x0D' - CHARWIDTH = 78 + CHARWIDTH = 70 #78 is actual, but -8 for safty printedheight = 0 pages = 1 strokes = 0 - debug = True + lineheight = 33 + debug = False target = "/dev/usb/lp0" if debug: target = "/dev/tty" - def formfeed(self): + def formfeed(self, exit=False): with open(self.target, 'wb') as printer: if not self.debug: - while self.checkpagebreak(printer) == False: - self.printedheight+=(44/216) + while self.checkpagebreak(printer, exit) == False: + self.printedheight+=(self.lineheight/216) printer.write(self.LINE_FEED) @@ -62,7 +67,7 @@ class Printer(): self.strokes += 1 if(self.strokes>self.CHARWIDTH): self.checkpagebreak(printer) - self.printedheight+=(44/216) + self.printedheight+=(self.lineheight/216) printer.write(self.LINE_FEED) self.strokes = 0 @@ -70,47 +75,101 @@ class Printer(): strokesinline = 0 with open(self.target, 'wb') as printer: if self.debug: + if formating == "compr": + self.CHARWIDTH = 120 + else: + self.CHARWIDTH = 70 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: for word in re.split(r'(\s+)', string): + if "&&ref" in word and "&&endref" not in word: + subwords = word.split("&&ref") + word = subwords[1] + printer.write(b"\x1B"+b"\x5B"+b"\x34"+b"\x6D") + if "&&endref" in word: + subwords = word.split("&&endref") + word = subwords[1] + printer.write(b"\x1B"+b"\x5B"+b"\x30"+b"\x6D") + strokesinline += len(word) if "\n" in word: strokesinline = 0 if strokesinline > self.CHARWIDTH: printer.write(self.LINE_FEED) strokesinline = len(word) - if not (strokesinline == 1 and word == " "): + if strokesinline > self.CHARWIDTH: + firstpart = word[:self.CHARWIDTH] + secondpart = word[self.CHARWIDTH:] + printer.write(bytes(str(firstpart), 'utf-8')) + printer.write(self.LINE_FEED) + printer.write(bytes(str(secondpart), 'utf-8')) + + elif not (strokesinline == 1 and word == " "): printer.write(bytes(str(word), 'utf-8')) + else: printer.write(self.ESC+b"\x7B"+b"\x41") - printer.write(self.ESC + b"\x33" + bytes([44])); + printer.write(self.ESC + b"\x33" + bytes([self.lineheight])); + #printer.write(self.NLQ) + #printer.write(self.NLQ2) + self.CHARWIDTH = 70 if formating == "u": printer.write(self.BOLDON) + if formating == "p": + printer.write(self.CPITWELF) if formating == "i": printer.write(self.ITALICON) if formating == "dh": printer.write(self.DHON) if formating == "compr": printer.write(self.COMPRON) - if self.printedheight > 11.69: - printer.write(bytes(str("NEW PAGE YESY"), 'utf-8')); - self.printedheight=0 + self.CHARWIDTH = 120 + if formating == "compru": + printer.write(self.UNDERLINEDON) + printer.write(self.COMPRON) + self.CHARWIDTH = 120 + for word in re.split(r'(\s+)', string): + if "&&ref" in word: + subwords = word.split("&&ref") + word = subwords[1] + printer.write(self.COMPRON) + if "&&endref" in word: + subwords = word.split("&&endref") + word = subwords[1] + printer.write(self.COMPROFF) + if "&&uline" in word: + subwords = word.split("&&uline") + word = subwords[1] + printer.write(self.UNDERLINEDON) + if "&&enduline" in word: + subwords = word.split("&&enduline") + word = subwords[1] + printer.write(self.UNDERLINEDOFF) strokesinline += len(word) if "\n" in word: - strokesinline = 0 - self.printedheight+=(44/216) + for _ in range(word.count("\n")): + strokesinline = 0 + self.checkpagebreak(printer) + self.printedheight+=(self.lineheight/216) if strokesinline > self.CHARWIDTH: self.checkpagebreak(printer) - self.printedheight+=(44/216) + self.printedheight+=(self.lineheight/216) printer.write(self.LINE_FEED) strokesinline = len(word) - if not (strokesinline == 1 and word == " "): - printer.write(bytes(str(word), 'utf-8')) + if strokesinline > self.CHARWIDTH: + firstpart = word[:self.CHARWIDTH] + secondpart = word[self.CHARWIDTH:] + printer.write(bytes(str(firstpart), 'utf-8')) + self.checkpagebreak(printer) + self.printedheight+=(self.lineheight/216) + printer.write(self.LINE_FEED) + printer.write(bytes(str(secondpart), 'utf-8')) + elif not (strokesinline == 1 and word == " "): + printer.write(str(word).encode("ascii","ignore")) if formating == "u": printer.write(self.BOLDOFF) if formating == "i": @@ -119,7 +178,10 @@ class Printer(): printer.write(self.DHOFF) if formating == "compr": printer.write(self.COMPROFF) - printer.write(self.ESC+b"\x25"+b"\x46"+b"\x0F"+b"\x00"+b"\x04"+b"\x08"+b"\x00") + if formating == "compru": + printer.write(self.COMPROFF) + printer.write(self.UNDERLINEDOFF) + #printer.write(self.ESC+b"\x25"+b"\x46"+b"\x0F"+b"\x00"+b"\x04"+b"\x08"+b"\x00") try: self.newline() except: @@ -131,26 +193,31 @@ class Printer(): with open(self.target, 'wb') as printer: if not self.debug: self.checkpagebreak(printer) - printer.write(self.ESC + b"\x33" + bytes([44])); - self.printedheight+=(44/216) + printer.write(self.ESC + b"\x33" + bytes([self.lineheight])); + self.printedheight+=(self.lineheight/216) printer.write(self.LINE_FEED) self.strokes = 0 - def checkpagebreak(self, printer): - if self.printedheight+(44/216)*4 > 11.69: + def checkpagebreak(self, printer, exit=False): + print(self.printedheight) + if self.printedheight+(self.lineheight/216)*4 > 11.69: printer.write(self.LINE_FEED) printer.write(self.LINE_FEED) printer.write(bytes(str("PAGE "+str(self.pages)), 'utf-8')); - printer.write(self.ESC + b"\x33" + bytes([44])); - printer.write(self.LINE_FEED) + printer.write(self.ESC + b"\x33" + bytes([self.lineheight])); printer.write(self.LINE_FEED) printer.write(self.LINE_FEED) - printer.write(self.COMPRON) - printer.write(bytes(str("------------------------------------------------------ POETIC SOFTWARE PUBLICATION -----------------------------------------------------"), 'utf-8')); - printer.write(self.COMPROFF) printer.write(self.LINE_FEED) - self.printedheight=(44/216) - self.pages+=1 + if not exit: + printer.write(self.COMPRON) + printer.write(bytes(str("------------------------------------------------------ POETIC SOFTWARE PUBLICATION -----------------------------------------------------"), 'utf-8')); + printer.write(self.COMPROFF) + printer.write(self.LINE_FEED) + self.printedheight=(self.lineheight/216) + self.pages+=1 + else: + self.printedheight=0 + self.pages=1 return True else: return False @@ -163,26 +230,28 @@ class Printer(): f.write(page.content) if self.debug: - rows, columns = os.popen('stty size', 'r').read().split() + #rows, columns = os.popen('stty size', 'r').read().split() #subprocess.call(["catimg","-w",columns,f_name]) subprocess.call(["feh",f_name]) else: imagelines = imageprinter.print(f_name,True) - isodd = False - if imagelines % 2 == 1: - isodd = True - imagelines+=1 - if self.printedheight + (22/216)*imagelines +(44/216)*4 > 11.69: + #((imagelines*22)%self.lineheight)/11 + + if self.printedheight + (22/216)*imagelines +(self.lineheight/216)*4 > 11.69: self.formfeed() self.printedheight += (22/216)*imagelines imageprinter.print(f_name) - if isodd: - with open('/dev/usb/lp0', 'wb') as printer: - printer.write(ESC + b"\x33" + bytes([22])); + with open('/dev/usb/lp0', 'wb') as printer: + printer.write(self.ESC + b"\x33" + bytes([11])); + for _ in range(int(((imagelines*22)%self.lineheight)/11)): printer.write(self.LINE_FEED) - printer.write(ESC + b"\x33" + bytes([44])); - + self.printedheight += (11/216) + print(imagelines) + print(((imagelines*22)%self.lineheight)/11) + printer.write(self.ESC + b"\x33" + bytes([self.lineheight])); + self.newline() + # 10 lines 220 class Terminal(): @@ -251,16 +320,16 @@ class Terminal(): self.printer.printstring(out.decode("utf-8")) def list(self): - printer.printstring("theses on POETIC SOFTWARE", "u") + 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") + self.printer.newline() + self.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() + self.printer.newline() def command(self, command): #print("received command: "+str(command)) @@ -278,7 +347,7 @@ class Terminal(): main() elif "ff" == str(command): - printer.formfeed() + self.printer.formfeed() elif str(command).split(" ")[0] == "exercise" or str(command).split(" ")[0] == "thesis": part = str(command).split(" ")[0] @@ -293,17 +362,26 @@ class Terminal(): if number > len(apirequest.getcategory(part)): self.printer.printstring("Number must be inbetween 1 and "+ str(len(apirequest.getcategory(part)))) else: - 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.getimages(part, number) + for img in result: + self.printer.printimagefromurl(img) + #get and print content of thesis or exercise result = apirequest.getcontent(part, number) for line in result: self.printer.printstring(line) + #check for specific things like the wifi if apirequest.gettitle(part, number)[0] == "Wifi Poem": self.scanwifi() + result = apirequest.getlinks(part, number) + self.printer.newline() + for i, line in enumerate(result): + if i%2 == 0: + self.printer.printstring(line, "compru") + else: + self.printer.printstring(line, "compr") self.printer.newline() else: self.printer.printstring("not a number") @@ -324,12 +402,11 @@ class Terminal(): 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() + self.printer.formfeed(True) main() else: - self.printer.printstring("~ command not found. try help for a list of available commands") - + self.printer.printstring("~ command not found. type help for a list of available commands") self.printer.newline() #if the command is valid we want to execute the command and continue the story @@ -338,34 +415,58 @@ class Terminal(): persons = { "Kittler":"Friedrich A. Kittler (June 12, 1943 – October 18, 2011) was a literary scholar and a media theorist. His works relate to media, technology, and the military. ", "Alex":"Alexander Roidl created Poetic Software as part of his Master's thesis.", +"Michael":"Michael Murtaugh is an independent computer programmer (automatist.org) and a member of Constant Art & Media (constantvzw.org) in Brussels where he lives.", +"Aymeric":"Aymeric Mansoux (FR) is an artist, musician and media researcher, with a background in economics, fine art, graphic design, and computer programming. ", "Jule":"Jule Ulrych is an evironmental activist and passionate vegan food lover living in Den Haag." } printer = Printer() term = Terminal(printer, persons) now = datetime.datetime.now() +ascii = '''::::::::: :::::::: :::::::::: ::::::::::: ::::::::::: :::::::: +:+: :+: :+: :+: :+: :+: :+: :+: :+: ++:+ +:+ +:+ +:+ +:+ +:+ +:+ +:+ ++#++:++#+ +#+ +:+ +#++:++# +#+ +#+ +#+ ++#+ +#+ +#+ +#+ +#+ +#+ +#+ +#+# #+# #+# #+# #+# #+# #+# #+# +### ######## ########## ### ########### ######## + + :::::::: :::::::: :::::::::: ::::::::::: ::: ::: ::: ::::::::: :::::::::: +:+: :+: :+: :+: :+: :+: :+: :+: :+: :+: :+: :+: :+: ++:+ +:+ +:+ +:+ +:+ +:+ +:+ +:+ +:+ +:+ +:+ +:+ ++#++:++#++ +#+ +:+ :#::+::# +#+ +#+ +:+ +#+ +#++:++#++: +#++:++#: +#++:++# + +#+ +#+ +#+ +#+ +#+ +#+ +#+#+ +#+ +#+ +#+ +#+ +#+ +#+ +#+# #+# #+# #+# #+# #+# #+#+# #+#+# #+# #+# #+# #+# #+# + ######## ######## ### ### ### ### ### ### ### ### ########## + + SOFTWARE & ART''' + def main(): term.waittostart() + printer.printstring(ascii, "compr") + printer.formfeed(); + printer.newline() printer.printstring("W E L C O M E !", "dh") printer.newline() printer.printstring(now.strftime("%Y-%m-%d %H:%M"), "compr") printer.newline() -# printer.formfeed() - printer.printimagefromurl("https://www.sanfranciscobaycoffee.com/wp-content/uploads/2017/03/52279468.jpg") - -# printer.printstring("---------------") -# printer.printstring("POETIC SOFTWARE") -# printer.printstring("---------------") -# printer.printstring("type help for help") -# printer.newline() -# 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.formfeed() + + printer.printstring("---------------") + printer.printstring("POETIC SOFTWARE") + printer.printstring("---------------") + printer.printstring("type help for help") + printer.newline() + 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() -# term.list() + term.list() printer.printstring("SELECT which one to see, for exercise type: exercise and for thesis type: thesis ") printer.newline() term.waitforinput()