From 14a8a84150647935ac3cf41e3f6fdd1c35454930 Mon Sep 17 00:00:00 2001 From: mikkkee Date: Fri, 7 Jul 2023 01:03:46 +0800 Subject: [PATCH 1/2] Fix previous commit with version check for Anki and Qt --- README.md | 2 +- plugin/__init__.py | 33 ++++++++++++++++++++++++--------- tests/test_graphical.py | 5 +++-- 3 files changed, 28 insertions(+), 12 deletions(-) diff --git a/README.md b/README.md index b6d97e0..1f63011 100644 --- a/README.md +++ b/README.md @@ -1619,7 +1619,7 @@ corresponding to when the API was available for use. #### `guiImportFile` -* Invokes the *Import... (Ctrl+Shift+I)* dialog with an optional file path. Brings up the dialog for user to review the import. Supports all file types that Anki supports. Brings open file dialog if no path is provided. Forward slashes must be used in the path on Windows. +* Invokes the *Import... (Ctrl+Shift+I)* dialog with an optional file path. Brings up the dialog for user to review the import. Supports all file types that Anki supports. Brings open file dialog if no path is provided. Forward slashes must be used in the path on Windows. Only supported for Anki 2.1.52+.
Sample request: diff --git a/plugin/__init__.py b/plugin/__init__.py index d225c3d..8f0141f 100644 --- a/plugin/__init__.py +++ b/plugin/__init__.py @@ -41,7 +41,6 @@ from anki.exporting import AnkiPackageExporter from anki.importing import AnkiPackageImporter from anki.notes import Note from anki.errors import NotFoundError -from aqt.import_export.importing import import_file, prompt_for_file_then_import from aqt.qt import Qt, QTimer, QMessageBox, QCheckBox from .web import format_exception_reply, format_success_reply @@ -1858,20 +1857,36 @@ class AnkiConnect: """ Open Import File (Ctrl+Shift+I) dialog with provided file path. If no path is given, the user will be prompted to select a file. + Only supported from Anki version >=2.1.52 path: string import file path, note on Windows you must use forward slashes. """ + if anki_version >= (2, 1, 52): + from aqt.import_export.importing import import_file, prompt_for_file_then_import + else: + raise Exception('guiImportFile is only supported from Anki version >=2.1.52') + + if hasattr(Qt, 'WindowStaysOnTopHint'): + # Qt5 + WindowOnTopFlag = Qt.WindowStaysOnTopHint + elif hasattr(Qt, 'WindowType') and hasattr(Qt.WindowType, 'WindowStaysOnTopHint'): + # Qt6 + WindowOnTopFlag = Qt.WindowType.WindowStaysOnTopHint + else: + # Unsupported, don't try to bring window to top + WindowOnTopFlag = None # Bring window to top for user to review import settings. - try: - # [Step 1/2] set always on top flag, show window (it stays on top for now) - self.window().setWindowFlags(self.window().windowFlags() | Qt.WindowStaysOnTopHint) - self.window().show() - finally: - # [Step 2/2] clear always on top flag, show window (it doesn't stay on top anymore) - self.window().setWindowFlags(self.window().windowFlags() & ~Qt.WindowStaysOnTopHint) - self.window().show() + if WindowOnTopFlag is not None: + try: + # [Step 1/2] set always on top flag, show window (it stays on top for now) + self.window().setWindowFlags(self.window().windowFlags() | WindowOnTopFlag) + self.window().show() + finally: + # [Step 2/2] clear always on top flag, show window (it doesn't stay on top anymore) + self.window().setWindowFlags(self.window().windowFlags() & ~WindowOnTopFlag) + self.window().show() if path is None: prompt_for_file_then_import(self.window()) diff --git a/tests/test_graphical.py b/tests/test_graphical.py index ebbedc1..7cbb1e9 100755 --- a/tests/test_graphical.py +++ b/tests/test_graphical.py @@ -1,6 +1,6 @@ import pytest -from conftest import ac, wait_until, \ +from conftest import ac, anki_version, wait_until, \ close_all_dialogs_and_wait_for_them_to_run_closing_callbacks, \ get_dialog_instance @@ -29,7 +29,8 @@ def test_guiDeckOverview(setup): def test_guiImportFile(setup): - ac.guiImportFile() + if anki_version >= (2, 1, 52): + ac.guiImportFile() class TestAddCards: From 5a153691fd580c3d2d4e851dbe6f5b5e0bc68bd0 Mon Sep 17 00:00:00 2001 From: mikkkee Date: Fri, 7 Jul 2023 20:08:33 +0800 Subject: [PATCH 2/2] Fix test timeout error --- tests/test_graphical.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/tests/test_graphical.py b/tests/test_graphical.py index 7cbb1e9..356fc85 100755 --- a/tests/test_graphical.py +++ b/tests/test_graphical.py @@ -1,4 +1,5 @@ import pytest +from unittest import mock from conftest import ac, anki_version, wait_until, \ close_all_dialogs_and_wait_for_them_to_run_closing_callbacks, \ @@ -30,7 +31,9 @@ def test_guiDeckOverview(setup): def test_guiImportFile(setup): if anki_version >= (2, 1, 52): - ac.guiImportFile() + with mock.patch('aqt.import_export.importing.prompt_for_file_then_import') as mock_prompt_for_file_then_import: + mock_prompt_for_file_then_import.return_value = True + ac.guiImportFile() class TestAddCards: