mirror of
https://github.com/ankitects/anki.git
synced 2025-09-24 16:56:36 -04:00
fix issues with media server not going away
- use a non-daemonized python thread - shut the server down on exit, including from profile manager - use a timeout on requests, or the connection that webengine holds open will block the thread and prevent it from exiting when anki closes
This commit is contained in:
parent
cfb50fa03c
commit
bee6931dc9
2 changed files with 14 additions and 4 deletions
|
@ -111,7 +111,7 @@ class AnkiQt(QMainWindow):
|
||||||
f.setupUi(d)
|
f.setupUi(d)
|
||||||
f.login.clicked.connect(self.onOpenProfile)
|
f.login.clicked.connect(self.onOpenProfile)
|
||||||
f.profiles.itemDoubleClicked.connect(self.onOpenProfile)
|
f.profiles.itemDoubleClicked.connect(self.onOpenProfile)
|
||||||
f.quit.clicked.connect(lambda: sys.exit(0))
|
f.quit.clicked.connect(self.cleanupAndExit)
|
||||||
f.add.clicked.connect(self.onAddProfile)
|
f.add.clicked.connect(self.onAddProfile)
|
||||||
f.rename.clicked.connect(self.onRenameProfile)
|
f.rename.clicked.connect(self.onRenameProfile)
|
||||||
f.delete_2.clicked.connect(self.onRemProfile)
|
f.delete_2.clicked.connect(self.onRemProfile)
|
||||||
|
@ -249,8 +249,12 @@ To import into a password protected profile, please open the profile before atte
|
||||||
if browser:
|
if browser:
|
||||||
self.showProfileManager()
|
self.showProfileManager()
|
||||||
else:
|
else:
|
||||||
|
self.cleanupAndExit()
|
||||||
|
|
||||||
|
def cleanupAndExit(self):
|
||||||
self.errorHandler.unload()
|
self.errorHandler.unload()
|
||||||
sys.exit(0)
|
self.mediaServer.shutdown()
|
||||||
|
self.app.exit(0)
|
||||||
|
|
||||||
# Collection load/unload
|
# Collection load/unload
|
||||||
##########################################################################
|
##########################################################################
|
||||||
|
|
|
@ -8,6 +8,7 @@ import http.server
|
||||||
import socketserver
|
import socketserver
|
||||||
import errno
|
import errno
|
||||||
from anki.utils import devMode
|
from anki.utils import devMode
|
||||||
|
import threading
|
||||||
|
|
||||||
# locate web folder in source/binary distribution
|
# locate web folder in source/binary distribution
|
||||||
def _getExportFolder():
|
def _getExportFolder():
|
||||||
|
@ -29,7 +30,7 @@ _exportFolder = _getExportFolder()
|
||||||
class ThreadedHTTPServer(socketserver.ThreadingMixIn, http.server.HTTPServer):
|
class ThreadedHTTPServer(socketserver.ThreadingMixIn, http.server.HTTPServer):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
class MediaServer(QThread):
|
class MediaServer(threading.Thread):
|
||||||
|
|
||||||
def run(self):
|
def run(self):
|
||||||
self.port = 10000
|
self.port = 10000
|
||||||
|
@ -46,8 +47,13 @@ class MediaServer(QThread):
|
||||||
break
|
break
|
||||||
self.server.serve_forever()
|
self.server.serve_forever()
|
||||||
|
|
||||||
|
def shutdown(self):
|
||||||
|
self.server.shutdown()
|
||||||
|
|
||||||
class RequestHandler(http.server.SimpleHTTPRequestHandler):
|
class RequestHandler(http.server.SimpleHTTPRequestHandler):
|
||||||
|
|
||||||
|
timeout = 1
|
||||||
|
|
||||||
def do_GET(self):
|
def do_GET(self):
|
||||||
f = self.send_head()
|
f = self.send_head()
|
||||||
if f:
|
if f:
|
||||||
|
|
Loading…
Reference in a new issue