diff --git a/app/file-receiver/buffer.py b/app/file-receiver/buffer.py index 5612664..d5b8a06 100644 --- a/app/file-receiver/buffer.py +++ b/app/file-receiver/buffer.py @@ -23,6 +23,7 @@ from PyQt5 import QtGui, QtCore from PyQt5.QtCore import Qt from PyQt5.QtGui import QColor, QFont from PyQt5.QtWidgets import QWidget, QLabel, QVBoxLayout +from core.utils import get_local_ip from io import BytesIO import html import http.server @@ -204,7 +205,10 @@ class SimpleHTTPRequestHandler(http.server.BaseHTTPRequestHandler): f = BytesIO() displaypath = html.escape(urllib.parse.unquote(self.path)) f.write(b'') - f.write(("\nDirectory listing for %s\n" % displaypath).encode()) + f.write(("\n{0} {1}Directory listing for {2}\n\n".format( + '''''', + '''\n''', + displaypath)).encode()) f.write(("\n

Directory listing for %s

\n" % displaypath).encode()) f.write(b"
\n") f.write(b"
") @@ -368,7 +372,7 @@ class FileUploaderWidget(QWidget): layout.addStretch() 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.qrcode_label.setPixmap(qrcode.make(self.address, image_factory=Image).pixmap()) @@ -376,28 +380,12 @@ class FileUploaderWidget(QWidget): global upload_dir upload_dir = url - t = threading.Thread(target=self.run_http_server, name='LoopThread') - t.start() + self.sender_thread = threading.Thread(target=self.run_http_server, name='LoopThread') + self.sender_thread.start() def run_http_server(self): http.server.test(SimpleHTTPRequestHandler, http.server.HTTPServer) - 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() - -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_()) + def before_destroy_buffer(self): + self.message_to_emacs.emit("Stop file receiver server: http://{0}:{1}".format(self.local_ip, self.port)) + self.sender_thread.stop() diff --git a/app/file-sender/buffer.py b/app/file-sender/buffer.py index 1d86ae3..0363817 100644 --- a/app/file-sender/buffer.py +++ b/app/file-sender/buffer.py @@ -24,7 +24,7 @@ from PyQt5.QtCore import Qt from PyQt5.QtGui import QColor, QFont from PyQt5.QtWidgets import QWidget, QLabel, QVBoxLayout 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 os import qrcode @@ -122,38 +122,24 @@ class FileTransferWidget(QWidget): def set_address(self, address): 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): global local_file_path local_file_path = filename 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)) - t = threading.Thread(target=self.run_http_server, name='LoopThread') - t.start() + self.sender_thread = threading.Thread(target=self.run_http_server, name='LoopThread') + self.sender_thread.start() def run_http_server(self): httpd = BaseHTTPServer.HTTPServer(('', self.port), SimpleHTTPRequestHandler) httpd.serve_forever() -if __name__ == "__main__": - from PyQt5.QtWidgets import QApplication - import signal - app = QApplication(sys.argv) - - test = FileTransferWidget("/home/andy/rms/1.jpg", QColor(0, 0, 0, 255)) - test.show() + def before_destroy_buffer(self): + global local_file_path - signal.signal(signal.SIGINT, signal.SIG_DFL) - sys.exit(app.exec_()) + self.message_to_emacs.emit("Stop file sender server: http://{0}:{1}/{2}".format(self.local_ip, self.port, local_file_path)) + self.sender_thread.stop() diff --git a/core/utils.py b/core/utils.py index 5d6fb23..a8df434 100644 --- a/core/utils.py +++ b/core/utils.py @@ -23,6 +23,7 @@ from PyQt5 import QtCore import functools import os import socket +import sys import base64 class PostGui(QtCore.QObject): @@ -81,3 +82,12 @@ def is_port_in_use(port): def string_to_base64(text): 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()