This commit is contained in:
Elias 2025-12-16 19:56:09 +03:00 committed by GitHub
commit bd09ec0a59
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
5 changed files with 48 additions and 1 deletions

View file

@ -244,7 +244,6 @@ memchr <memchr@proton.me>
Max Romanowski <maxr777@proton.me> Max Romanowski <maxr777@proton.me>
Aldlss <ayaldlss@gmail.com> Aldlss <ayaldlss@gmail.com>
Hanna Nilsén <hanni614@student.liu.se> Hanna Nilsén <hanni614@student.liu.se>
Elias Johansson Lara <elias.johanssonlara@gmail.com>
Toby Penner <tobypenner01@gmail.com> Toby Penner <tobypenner01@gmail.com>
Danilo Spillebeen <spillebeendanilo@gmail.com> Danilo Spillebeen <spillebeendanilo@gmail.com>
Matbe766 <matildabergstrom01@gmail.com> Matbe766 <matildabergstrom01@gmail.com>
@ -255,6 +254,7 @@ Ranjit Odedra <ranjitodedra.dev@gmail.com>
Eltaurus <https://github.com/Eltaurus-Lt> Eltaurus <https://github.com/Eltaurus-Lt>
jariji jariji
Francisco Esteva <fr.esteva@duocuc.cl> Francisco Esteva <fr.esteva@duocuc.cl>
Elias Johansson Lara <elias.johanssonlara@gmail.com>
******************** ********************

View file

@ -16,6 +16,7 @@ qt-accel-go = &Go
qt-accel-guide = &Guide qt-accel-guide = &Guide
qt-accel-help = &Help qt-accel-help = &Help
qt-accel-import = &Import... qt-accel-import = &Import...
qt-accel-import-clipboard = Import from &Clipboard...
qt-accel-info = &Info... qt-accel-info = &Info...
qt-accel-invert-selection = &Invert Selection qt-accel-invert-selection = &Invert Selection
qt-accel-next-card = &Next Card qt-accel-next-card = &Next Card

View file

@ -72,6 +72,7 @@
<addaction name="actionSwitchProfile"/> <addaction name="actionSwitchProfile"/>
<addaction name="separator"/> <addaction name="separator"/>
<addaction name="actionImport"/> <addaction name="actionImport"/>
<addaction name="actionImportClipboard"/>
<addaction name="actionExport"/> <addaction name="actionExport"/>
<addaction name="separator"/> <addaction name="separator"/>
<addaction name="action_create_backup"/> <addaction name="action_create_backup"/>
@ -203,6 +204,14 @@
<string notr="true">Ctrl+Shift+I</string> <string notr="true">Ctrl+Shift+I</string>
</property> </property>
</action> </action>
<action name="actionImportClipboard">
<property name="text">
<string>qt_accel_import_clipboard</string>
</property>
<property name="shortcut">
<string notr="true">Ctrl+Alt+Shift+I</string>
</property>
</action>
<action name="actionStudyDeck"> <action name="actionStudyDeck">
<property name="text"> <property name="text">
<string>qt_misc_study_deck</string> <string>qt_misc_study_deck</string>

View file

@ -5,6 +5,7 @@ from __future__ import annotations
import os import os
import re import re
import tempfile
from abc import ABC, abstractmethod from abc import ABC, abstractmethod
from collections.abc import Callable from collections.abc import Callable
from itertools import chain from itertools import chain
@ -167,6 +168,36 @@ def prompt_for_file_then_import(mw: aqt.main.AnkiQt) -> None:
import_file(mw, path) import_file(mw, path)
def import_from_clipboard(mw: aqt.main.AnkiQt) -> None:
clipboard = QApplication.clipboard()
if clipboard is None:
showWarning("Clipboard not available.")
return
text = clipboard.text()
if not text:
showWarning("Clipboard is empty.")
return
try:
with tempfile.NamedTemporaryFile(
mode="w",
prefix="clipboard_",
suffix=".txt",
delete=False,
encoding="utf-8",
) as f:
f.write(text)
temp_path = f.name
import_file(mw, temp_path)
except Exception as e:
showWarning(f"Failed to import from clipboard: {e}")
def get_file_path(mw: aqt.main.AnkiQt) -> str | None: def get_file_path(mw: aqt.main.AnkiQt) -> str | None:
filter = without_unicode_isolation( filter = without_unicode_isolation(
tr.importing_all_supported_formats( tr.importing_all_supported_formats(

View file

@ -57,6 +57,7 @@ from aqt.import_export.exporting import ExportDialog
from aqt.import_export.importing import ( from aqt.import_export.importing import (
import_collection_package_op, import_collection_package_op,
import_file, import_file,
import_from_clipboard,
prompt_for_file_then_import, prompt_for_file_then_import,
) )
from aqt.legacy import install_pylib_legacy from aqt.legacy import install_pylib_legacy
@ -1360,6 +1361,10 @@ title="{}" {}>{}</button>""".format(
else: else:
aqt.importing.onImport(self) aqt.importing.onImport(self)
def onImportFromClipboard(self) -> None:
"""Import from clipboard text."""
import_from_clipboard(self)
def onExport(self, did: DeckId | None = None) -> None: def onExport(self, did: DeckId | None = None) -> None:
import aqt.exporting import aqt.exporting
@ -1403,6 +1408,7 @@ title="{}" {}>{}</button>""".format(
m.actionSwitchProfile.triggered, self.unloadProfileAndShowProfileManager m.actionSwitchProfile.triggered, self.unloadProfileAndShowProfileManager
) )
qconnect(m.actionImport.triggered, self.onImport) qconnect(m.actionImport.triggered, self.onImport)
qconnect(m.actionImportClipboard.triggered, self.onImportFromClipboard)
qconnect(m.actionExport.triggered, self.onExport) qconnect(m.actionExport.triggered, self.onExport)
qconnect(m.action_create_backup.triggered, self.on_create_backup_now) qconnect(m.action_create_backup.triggered, self.on_create_backup_now)
qconnect(m.action_open_backup.triggered, self.onOpenBackup) qconnect(m.action_open_backup.triggered, self.onOpenBackup)