1. Move get_local_ip to core.utils.py

2. Make receiver page scale to phone width.
3. Fix UTF-8 filename not correctly in page.
master
Andy Stewart 6 years ago
parent 613b99cd57
commit 1f42a992f8
  1. 34
      app/file-receiver/buffer.py
  2. 30
      app/file-sender/buffer.py
  3. 10
      core/utils.py

@ -23,6 +23,7 @@ from PyQt5 import QtGui, QtCore
from PyQt5.QtCore import Qt from PyQt5.QtCore import Qt
from PyQt5.QtGui import QColor, QFont from PyQt5.QtGui import QColor, QFont
from PyQt5.QtWidgets import QWidget, QLabel, QVBoxLayout from PyQt5.QtWidgets import QWidget, QLabel, QVBoxLayout
from core.utils import get_local_ip
from io import BytesIO from io import BytesIO
import html import html
import http.server import http.server
@ -204,7 +205,10 @@ class SimpleHTTPRequestHandler(http.server.BaseHTTPRequestHandler):
f = BytesIO() f = BytesIO()
displaypath = html.escape(urllib.parse.unquote(self.path)) displaypath = html.escape(urllib.parse.unquote(self.path))
f.write(b'<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">') f.write(b'<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">')
f.write(("<html>\n<title>Directory listing for %s</title>\n" % displaypath).encode()) f.write(("<html>\n<head>{0} {1}<title>Directory listing for {2}</title>\n</head>\n".format(
'''<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />''',
'''<meta name="viewport" content="width=device-width, initial-scale=1">\n''',
displaypath)).encode())
f.write(("<body>\n<h2>Directory listing for %s</h2>\n" % displaypath).encode()) f.write(("<body>\n<h2>Directory listing for %s</h2>\n" % displaypath).encode())
f.write(b"<hr>\n") f.write(b"<hr>\n")
f.write(b"<form ENCTYPE=\"multipart/form-data\" method=\"post\">") f.write(b"<form ENCTYPE=\"multipart/form-data\" method=\"post\">")
@ -368,7 +372,7 @@ class FileUploaderWidget(QWidget):
layout.addStretch() layout.addStretch()
self.port = "8000" self.port = "8000"
self.local_ip = self.get_local_ip() self.local_ip = get_local_ip()
self.address = "http://{0}:{1}".format(self.local_ip, self.port) self.address = "http://{0}:{1}".format(self.local_ip, self.port)
self.qrcode_label.setPixmap(qrcode.make(self.address, image_factory=Image).pixmap()) self.qrcode_label.setPixmap(qrcode.make(self.address, image_factory=Image).pixmap())
@ -376,28 +380,12 @@ class FileUploaderWidget(QWidget):
global upload_dir global upload_dir
upload_dir = url upload_dir = url
t = threading.Thread(target=self.run_http_server, name='LoopThread') self.sender_thread = threading.Thread(target=self.run_http_server, name='LoopThread')
t.start() self.sender_thread.start()
def run_http_server(self): def run_http_server(self):
http.server.test(SimpleHTTPRequestHandler, http.server.HTTPServer) http.server.test(SimpleHTTPRequestHandler, http.server.HTTPServer)
def get_local_ip(self): def before_destroy_buffer(self):
try: self.message_to_emacs.emit("Stop file receiver server: http://{0}:{1}".format(self.local_ip, self.port))
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) self.sender_thread.stop()
s.connect(("8.8.8.8", 80))
return s.getsockname()[0]
except OSError:
print("Network is unreachable")
sys.exit()
if __name__ == "__main__":
from PyQt5.QtWidgets import QApplication
import signal
app = QApplication(sys.argv)
test = FileUploaderWidget("/home/andy/", QColor(0, 0, 0, 255))
test.show()
signal.signal(signal.SIGINT, signal.SIG_DFL)
sys.exit(app.exec_())

@ -24,7 +24,7 @@ from PyQt5.QtCore import Qt
from PyQt5.QtGui import QColor, QFont from PyQt5.QtGui import QColor, QFont
from PyQt5.QtWidgets import QWidget, QLabel, QVBoxLayout from PyQt5.QtWidgets import QWidget, QLabel, QVBoxLayout
from core.buffer import Buffer from core.buffer import Buffer
from core.utils import get_free_port from core.utils import get_free_port, get_local_ip
import http.server as BaseHTTPServer import http.server as BaseHTTPServer
import os import os
import qrcode import qrcode
@ -122,38 +122,24 @@ class FileTransferWidget(QWidget):
def set_address(self, address): def set_address(self, address):
self.qrcode_label.setPixmap(qrcode.make(address, image_factory=Image).pixmap()) self.qrcode_label.setPixmap(qrcode.make(address, image_factory=Image).pixmap())
def get_local_ip(self):
try:
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.connect(("8.8.8.8", 80))
return s.getsockname()[0]
except OSError:
print("Network is unreachable")
sys.exit()
def start_server(self, filename): def start_server(self, filename):
global local_file_path global local_file_path
local_file_path = filename local_file_path = filename
self.port = get_free_port() self.port = get_free_port()
self.local_ip = self.get_local_ip() self.local_ip = get_local_ip()
self.set_address("http://{0}:{1}/{2}".format(self.local_ip, self.port, filename)) self.set_address("http://{0}:{1}/{2}".format(self.local_ip, self.port, filename))
t = threading.Thread(target=self.run_http_server, name='LoopThread') self.sender_thread = threading.Thread(target=self.run_http_server, name='LoopThread')
t.start() self.sender_thread.start()
def run_http_server(self): def run_http_server(self):
httpd = BaseHTTPServer.HTTPServer(('', self.port), SimpleHTTPRequestHandler) httpd = BaseHTTPServer.HTTPServer(('', self.port), SimpleHTTPRequestHandler)
httpd.serve_forever() httpd.serve_forever()
if __name__ == "__main__": def before_destroy_buffer(self):
from PyQt5.QtWidgets import QApplication global local_file_path
import signal
app = QApplication(sys.argv)
test = FileTransferWidget("/home/andy/rms/1.jpg", QColor(0, 0, 0, 255))
test.show()
signal.signal(signal.SIGINT, signal.SIG_DFL) self.message_to_emacs.emit("Stop file sender server: http://{0}:{1}/{2}".format(self.local_ip, self.port, local_file_path))
sys.exit(app.exec_()) self.sender_thread.stop()

@ -23,6 +23,7 @@ from PyQt5 import QtCore
import functools import functools
import os import os
import socket import socket
import sys
import base64 import base64
class PostGui(QtCore.QObject): class PostGui(QtCore.QObject):
@ -81,3 +82,12 @@ def is_port_in_use(port):
def string_to_base64(text): def string_to_base64(text):
return str(base64.b64encode(text.encode("utf-8")), "utf-8") return str(base64.b64encode(text.encode("utf-8")), "utf-8")
def get_local_ip():
try:
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.connect(("8.8.8.8", 80))
return s.getsockname()[0]
except OSError:
print("Network is unreachable")
sys.exit()

Loading…
Cancel
Save