Added code for processing images, at the cost of adding dependencies

This commit is contained in:
sloumdrone 2018-10-25 20:30:07 -07:00
parent a6802e14c3
commit 395fd719ae
4 changed files with 39 additions and 13 deletions

View File

@ -12,7 +12,11 @@ class connect:
socket_conn.connect((host, port))
socket_conn.sendall((resource + '\r\n').encode('utf-8'))
response = socket_conn.makefile(mode = 'r', errors = 'ignore')
if itemtype in ['I','p','g']:
response = socket_conn.makefile(mode = 'rb', errors = 'ignore')
else:
response = socket_conn.makefile(mode = 'r', errors = 'ignore')
try:
self.raw_response = response.read()
self.filetype = itemtype

View File

@ -1 +1 @@
{"favorites": [], "last_viewed": "gopher://gopher.floodgap.com:70/1/"}
{"favorites": [], "last_viewed": "gopher://sdf.org:70/1/users/cat/"}

42
gui.py
View File

@ -7,6 +7,8 @@ import time
import sys
import json
import os.path
from io import BytesIO
from PIL import Image, ImageTk
class GUI:
def __init__(self):
@ -136,6 +138,7 @@ class GUI:
return True
parsed_url = self.parser.parse_url(url)
print(parsed_url)
if not parsed_url:
# To do: build errors class to handle displaying errors
@ -225,16 +228,17 @@ class GUI:
return False
types = {
'0': '( TEXT )',
'1': '( MENU )',
'3': '( ERROR)',
'7': '( INTR )',
'9': '( BIN )',
'g': '( GIF )',
'I': '( IMG )',
'h': '( HTML )',
'i': '( INFO )',
's': '( SOUND)'
'0': '( TXT )',
'1': '( MNU )',
'3': '( ERR )',
'7': '( INT )',
'9': '( BIN )',
'g': '( GIF )',
'I': '( IMG )',
'h': '( HTM )',
'i': '( INF )',
's': '( SND )',
'p': '( PNG )'
}
self.site_display.config(state=tk.NORMAL)
@ -282,12 +286,22 @@ class GUI:
self.site_display.config(state=tk.DISABLED)
def show_image(self, data):
self.current_image = self.build_image(data)
self.site_display.config(state=tk.NORMAL)
self.site_display.delete(1.0, tk.END)
self.site_display.image_create(tk.END, image = self.current_image)
self.site_display.config(state=tk.DISABLED)
def send_to_screen(self, data, itemtype='1', clear=True):
if itemtype == '0':
self.show_text(data)
elif itemtype in ['1','3']:
data = self.parser.parse_menu(data)
self.show_menu(data, clear)
elif itemtype in ['p','I','g']:
self.show_image(data)
def update_status(self, event, href=False):
@ -318,6 +332,14 @@ class GUI:
self.site_display.config(cursor="arrow")
e.update_idletasks()
def build_image(self, bytes_str):
stream = BytesIO(bytes_str)
print(type(stream))
pilimage = Image.open(stream)
tkimage = ImageTk.PhotoImage(pilimage)
return tkimage
#--------Start file handling methods------------

View File

@ -16,7 +16,7 @@ class parser:
def parse_url(self, url):
# Take in a URL and output a dict of the url parts
regex = r'^(?P<protocol>(?:gopher:\/\/)?)?(?P<host>[\w\.\d]+)(?P<port>(?::\d+)?)?(?P<type>(?:\/\d)?)?(?P<resource>(?:\/[\w\/\d\-?.]*)?)?$'
regex = r'^(?P<protocol>(?:gopher:\/\/)?)?(?P<host>[\w\.\d]+)(?P<port>(?::\d+)?)?(?P<type>(?:\/[\dgIp])?)?(?P<resource>(?:\/[\w\/\d\-?.]*)?)?$'
match = re.match(regex, url)
protocol = match.group('protocol')