diff --git a/kcc/KCC_gui.py b/kcc/KCC_gui.py index 86f89da..193435e 100644 --- a/kcc/KCC_gui.py +++ b/kcc/KCC_gui.py @@ -35,6 +35,7 @@ import socket import string from KCC_rc_web import WebContent from BaseHTTPServer import BaseHTTPRequestHandler, HTTPServer +from SocketServer import ThreadingMixIn from image import ProfileData from subprocess import call, Popen, STDOUT, PIPE from PyQt4 import QtGui, QtCore @@ -78,10 +79,6 @@ class HTMLStripper(HTMLParser): class WebServerHandler(BaseHTTPRequestHandler): - #noinspection PyShadowingBuiltins - def log_message(self, format, *args): - pass - #noinspection PyAttributeOutsideInit def do_GET(self): if self.path == '/': @@ -114,17 +111,11 @@ class WebServerHandler(BaseHTTPRequestHandler): 'alt="KCC Logo" src="' + GUIMain.webContent.logo + '" /> -

\n') if len(GUIMain.completedWork) > 0 and not GUIMain.conversionAlive: for key in sorted(GUIMain.completedWork.iterkeys()): - self.wfile.write('

Only one file is available at once.
' - 'Refresh page after successful download.

\n' - '


>>> ' + string.split(key, '.')[0] + - ' <<<

\n') - break + self.wfile.write('

' + string.split(key, '.')[0] + '

\n') else: self.wfile.write('

No downloads are available.
' 'Convert some files and refresh this page.

\n') - self.wfile.write('


- Refresh page -' - '

\n' - '\n' + self.wfile.write('\n' '\n' '\n') elif sendReply: @@ -135,17 +126,20 @@ class WebServerHandler(BaseHTTPRequestHandler): self.send_header('Content-Length', os.path.getsize(outputFile)) self.end_headers() while True: - chunk = fp.read(1024) + chunk = fp.read(8192) if not chunk: fp.close() break self.wfile.write(chunk) - GUIMain.completedWork.pop(urllib2.unquote(self.path[1:]), None) return except (IOError, LookupError): self.send_error(404, 'File Not Found: %s' % self.path) +class WebServerThreaded(ThreadingMixIn, HTTPServer): + """Handle requests in a separate thread.""" + + class WebServerThread(QtCore.QThread): def __init__(self): QtCore.QThread.__init__(self) @@ -163,7 +157,7 @@ class WebServerThread(QtCore.QThread): # Sadly it can fail on some Linux configurations lIP = None try: - self.server = HTTPServer(('', 4242), WebServerHandler) + self.server = WebServerThreaded(('', 4242), WebServerHandler) self.running = True if lIP: self.emit(QtCore.SIGNAL("addMessage"), '