Skip to content

Commit

Permalink
Merge branch 'master' of github.com:dae/anki
Browse files Browse the repository at this point in the history
  • Loading branch information
dae committed Mar 4, 2019
2 parents 7ede978 + 7d65594 commit b8a5c24
Show file tree
Hide file tree
Showing 3 changed files with 51 additions and 2 deletions.
13 changes: 13 additions & 0 deletions aqt/addons.py
Original file line number Diff line number Diff line change
Expand Up @@ -410,6 +410,19 @@ def restoreUserFiles(self, sid):
if not os.path.exists(bp):
return
os.rename(bp, p)

# Web Exports
######################################################################

_webExports = {}

def setWebExports(self, module, pattern):
addon = self.addonFromModule(module)
self._webExports[addon] = pattern

def getWebExports(self, addon):
return self._webExports.get(addon)


# Add-ons Dialog
######################################################################
Expand Down
2 changes: 1 addition & 1 deletion aqt/main.py
Original file line number Diff line number Diff line change
Expand Up @@ -1349,7 +1349,7 @@ def setupCrashLog(self):
##########################################################################

def setupMediaServer(self):
self.mediaServer = aqt.mediasrv.MediaServer()
self.mediaServer = aqt.mediasrv.MediaServer(self)
self.mediaServer.start()

def baseHTML(self):
Expand Down
38 changes: 37 additions & 1 deletion aqt/mediasrv.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
import socket
from anki.utils import devMode
import threading
import re

# locate web folder in source/binary distribution
def _getExportFolder():
Expand Down Expand Up @@ -47,7 +48,12 @@ class MediaServer(threading.Thread):
_port = None
_ready = threading.Event()

def __init__(self, mw, *args, **kwargs):
super().__init__(*args, **kwargs)
self.mw = mw

def run(self):
RequestHandler.mw = self.mw
self.server = ThreadedHTTPServer(("127.0.0.1", 0), RequestHandler)
self._ready.set()
self.server.serve_forever()
Expand All @@ -62,6 +68,7 @@ def shutdown(self):
class RequestHandler(http.server.SimpleHTTPRequestHandler):

timeout = 1
mw = None

def do_GET(self):
f = self.send_head()
Expand Down Expand Up @@ -120,12 +127,41 @@ def log_message(self, format, *args):
self.log_date_time_string(),
format%args))

# catch /_anki references and rewrite them to web export folder

def _redirectWebExports(self, path):
# catch /_anki references and rewrite them to web export folder
targetPath = os.path.join(os.getcwd(), "_anki", "")
if path.startswith(targetPath):
newPath = os.path.join(_exportFolder, path[len(targetPath):])
return newPath

# catch /_addons references and rewrite them to addons folder
targetPath = os.path.join(os.getcwd(), "_addons", "")
if path.startswith(targetPath):
try:
addMgr = self.mw.addonManager
except AttributeError:
return path

addonPath = path[len(targetPath):]

try:
addon, subPath = addonPath.split(os.path.sep, 1)
except ValueError:
return path
if not addon:
return path

pattern = addMgr.getWebExports(addon)
if not pattern:
return path

if not re.fullmatch(pattern, subPath):
return path

newPath = os.path.join(addMgr.addonsFolder(), addonPath)
return newPath

return path

# work around Windows machines with incorrect mime type
Expand Down

0 comments on commit b8a5c24

Please sign in to comment.