From c700dbd5215a7028ad449ab96e13c672f3a00355 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EB=B0=95=ED=98=84=EC=9A=B0?= Date: Tue, 10 Jun 2025 19:48:09 +0900 Subject: [PATCH] Fix copied image not imported locally on 403 error. --- qt/aqt/editor.py | 45 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) diff --git a/qt/aqt/editor.py b/qt/aqt/editor.py index c1eb14b18..962eff979 100644 --- a/qt/aqt/editor.py +++ b/qt/aqt/editor.py @@ -1587,6 +1587,47 @@ class EditorWebView(AnkiWebView): self.editor.doDrop(html, internal, extended, cursor_pos) + def _processSingleImageHtml(self, mime: QMimeData, extended): + if not mime.hasHtml(): + return None + + html_content = mime.html() + + # Unwraps fragment data. + try: + html_content = html_content[ + html_content.index("") + + 20 : html_content.rindex("") + ] + if not html_content: + # maybe malformed html? + return None + except ValueError: + return None + + bs = BeautifulSoup(html_content, "html.parser") + tags = bs.find_all() + if len(tags) == 1 and tags[0].name.lower() == "img": + img_tag = tags[0] + + try: + src = img_tag["src"] + except KeyError: + return None + + if self.editor.isURL(src): + fname = self.editor._retrieveURL(src) + if fname: + img_tag["src"] = fname + return str(img_tag) + + else: + image_html = self._processImage(mime, extended) + if image_html: + return image_html + + return None + # returns (html, isInternal) def _processMime( self, mime: QMimeData, extended: bool = False, drop_event: bool = False @@ -1603,6 +1644,10 @@ class EditorWebView(AnkiWebView): mime, self, internal, extended, drop_event ) + image_html = self._processSingleImageHtml(mime, extended) + if image_html: + return image_html, True + # try various content types in turn if mime.hasHtml(): html_content = mime.html()[11:] if internal else mime.html()