Commit Graph

1391 Commits

Author SHA1 Message Date
Henrik Giesel
f1286a0ce3 Update signature of main_window_will_require_reset hook 2020-08-16 18:56:32 +02:00
Henrik Giesel
dd515e65e7 Add new use of requireReset 2020-08-16 18:56:32 +02:00
Henrik Giesel
31323719bc Insert gui_hook main_window_will_require_reset
* into AnkiQt.requireReset method
2020-08-16 18:56:32 +02:00
Henrik Giesel
bff42d55db Add main_window_will_require_reset hook 2020-08-16 18:56:32 +02:00
Thomas B
7be08919e2 Add hook for initializing answer buttons 2020-08-14 13:52:20 -04:00
Arthur Milchior
ae078d4fd0 Search_model has context
I have an add-on which allow to open multiple windows. So would like to know which browser has done the search. This
would allow me to have browser with various setting. In particular, I've an add-on which allow to show a single line by
note, and I would like for some browser to have this feature on and for some other to have this feature off.
2020-08-13 19:46:14 +02:00
Damien Elmes
c3f8f7dd94
Merge pull request #732 from Arthur-Milchior/typing
Typing
2020-08-13 20:19:30 +10:00
Damien Elmes
6a379add1a
Merge pull request #730 from ANH25/rtl-editing
fix Ctrl+right/left handling in RTL fields
2020-08-13 20:09:51 +10:00
Damien Elmes
4c052e8164 remove RTL special case in cloze deletion
https://forums.ankiweb.net/t/erroneous-characters-added-to-rtl-cloze-deletions/2164
2020-08-13 19:11:48 +10:00
Arthur Milchior
c4db4bd291 Any removed 2020-08-12 01:37:21 +02:00
Arthur Milchior
c3b2b8625e NF: childMapNode 2020-08-12 00:42:42 +02:00
ANH
2ef846b09f add modify to the Selection interface 2020-08-11 03:32:58 +03:00
ANH
46573df890 fix Ctrl+right/left handling in RTL fields 2020-08-11 03:09:03 +03:00
Damien Elmes
d079307536
Merge pull request #728 from hgiesel/mungehtml
Move "remove null bytes" and "reverse url formatting" functionality to editor_will_munge_html hook
2020-08-10 16:33:56 +10:00
Henrik Giesel
17f23221e4 Add newlines 2020-08-09 11:16:19 +02:00
Henrik Giesel
ee3d4f5ad8 Avoid extra assignment 2020-08-09 10:38:31 +02:00
Henrik Giesel
f5479edacc Move reverse url quoting functionality to editor_will_munge_html hook 2020-08-09 10:37:38 +02:00
Henrik Giesel
1b9bd70bb1 Move remove null bytes functionality to editor_will_munge_html hook 2020-08-09 10:35:52 +02:00
Damien Elmes
dd2edee3b3 accept alternate strings file 2020-08-09 14:44:23 +10:00
Damien Elmes
6a0faac407 deauth -> log out 2020-08-09 14:44:03 +10:00
Damien Elmes
b380f304bf bump version 2020-08-09 13:44:59 +10:00
Damien Elmes
fbdd72817e
Merge pull request #727 from hgiesel/mungehtml
Add editor_will_munge_html hook
2020-08-09 13:38:39 +10:00
Damien Elmes
44fd50facb make sure to reset after deleting empty cards
https://anki.tenderapp.com/discussions/private/5067-anki-was-unable-to-open-your-file
2020-08-09 12:42:58 +10:00
Damien Elmes
05e90bcd23 find/replace completer should be case sensitive
https://forums.ankiweb.net/t/bug-report-search-and-replace/2037
2020-08-09 12:10:34 +10:00
Henrik Giesel
4720645d1c Replace functionality of mungeHTML with call to new gui_hook 2020-08-08 23:59:01 +02:00
Henrik Giesel
7f9e560396 Add editor_will_munge_html hook 2020-08-08 23:27:58 +02:00
ANH
7dcd6abba9 add card layout save shortcut 2020-08-06 13:23:17 +03:00
Damien Elmes
2eee4cb04e avoid internal URLs in alert titlebar
https://forums.ankiweb.net/t/anki-stats-no-longer-displaying-invalid-data-found-please-use-check-database-to-fix-the-problem/1902
2020-08-06 09:50:12 +10:00
Damien Elmes
3019d0dfdf fix Windows packages failing to start 2020-08-06 09:05:26 +10:00
Damien Elmes
18c59c60a4 unnecessary f-string 2020-08-04 17:52:49 +10:00
Damien Elmes
8d6af167cc catch duplicate keys 2020-08-04 11:52:19 +10:00
Damien Elmes
97bf4da6e8 convert po string extraction to GUI app 2020-08-04 11:21:39 +10:00
Damien Elmes
440aa129d9 disable media get / posts when collection closed
https://forums.ankiweb.net/t/countdown-to-events-exams-addon-official-thread/1093/4?u=dae
2020-08-04 10:03:17 +10:00
Damien Elmes
afc375b10f fix preview options responding to enter key by default 2020-08-03 13:32:38 +10:00
Damien Elmes
d97f6d21b8 fix mobile class emulation
should be set on html element
2020-08-03 13:32:10 +10:00
Damien Elmes
5a73641b57 enable strict equality checks in mypy
Without it, the following code reports no problems:

def foo() -> int:
    return 5
print(foo == 5)
2020-08-03 10:26:40 +10:00
Damien Elmes
d9b6793616 fix automatic logout on auth failure not working 2020-08-03 10:24:49 +10:00
Damien Elmes
a991364bfb check_untyped_defs can now be enabled globally for aqt
A big thanks to Matt and phwoo who put in most of the work to get
to this point.
2020-08-02 10:29:25 +10:00
Damien Elmes
2a36455e88 fix untyped def issues in aqt/utils.py 2020-08-02 10:25:48 +10:00
Damien Elmes
c1ecb7b827 fix untyped def issues in aqt/mediasrv.py 2020-08-02 10:22:21 +10:00
Damien Elmes
5c176b23c4 fix untyped def issues in aqt/__init__.py 2020-08-02 10:22:08 +10:00
Damien Elmes
0787a5d1da
Merge pull request #723 from phwoo/typehints-for-qt-addons
Typehints for qt addons
2020-08-02 10:08:48 +10:00
Fabian Wood
d27e33a206 Fixed runtime error from changes in qt addons.py
Changes to meet returning of Iterable (rather than List), meant
returning a different variable, but that may not have been created.
Reverted, changing to return List.
2020-08-01 17:50:37 +10:00
Fabian Wood
3da0737a57 Updated qt addons with more extensive typehints 2020-08-01 15:50:27 +10:00
Matt Krump
f529124bbf Turn on check_untyped_defs for aqt.progress 2020-07-31 21:00:08 -06:00
Matt Krump
83449e35ad Turn on check_untyped_defs for aqt.main 2020-07-31 20:34:14 -06:00
Damien Elmes
a8139ebb40 force stdout/stderr encoding to utf8
As a GUI app, Anki only uses these for debugging info, and we've been
bitten numerous times in the past by bugs caused by printing Unicode
when the console only supported ASCII. An ens var might have been
a better approach, but Pyinstaller does not support defining them before
Python is initialized from what I can tell.

Latest issue:
https://forums.ankiweb.net/t/crashing-anki-version-2-1-29-bbff62bf/1650
2020-08-01 11:31:22 +10:00
Damien Elmes
06a0b1ee73 pass night mode into body_class() instead of changing globally 2020-07-31 14:47:17 +10:00
Damien Elmes
e2425d3b0d remove 'invert', as night mode is on when checkbox is on 2020-07-31 14:35:18 +10:00
Damien Elmes
efc19a32a0 fix button display on Macs 2020-07-31 14:23:56 +10:00
Damien Elmes
0ed50394e7
Merge branch 'master' into master 2020-07-31 14:14:10 +10:00
Damien Elmes
f497682e9b
Merge branch 'master' into help-wanted-4-add-type-hints-6 2020-07-31 14:07:59 +10:00
Damien Elmes
628d961ad6
Merge pull request #719 from ANH25/reviewer-hooks
Add reviewer_will_play_question_sounds and reviewer_will_play_answer_sounds hooks
2020-07-31 14:06:28 +10:00
Damien Elmes
e759e6ef83
Merge pull request #718 from phwoo/typehints-for-qt-profiles
Added typehints for qt profiles
2020-07-31 14:04:29 +10:00
Damien Elmes
0edb043f53 i18n some card template strings
https://forums.ankiweb.net/t/untranslated-strings/1623
2020-07-31 13:33:41 +10:00
Damien Elmes
cd72d6807a refresh tag list after clearing unused 2020-07-31 13:33:41 +10:00
ANH
9b0d509e74 just forgot to regenerate gui_hooks.py to fix typo 2020-07-31 04:47:31 +03:00
ANH
6df4cf765e fix typo 2020-07-31 04:41:49 +03:00
Matt Krump
10f2f9c037 Turn on check_untyped_defs for aqt.emptycards 2020-07-30 18:43:57 -06:00
Matt Krump
7d8f856060 Turn on check_untyped_defs for aqt.addons 2020-07-30 18:43:57 -06:00
Matt Krump
a56690bc08 Turn on check_untyped_defs for aqt.webview 2020-07-30 18:43:57 -06:00
ANH
b4604873c4 document hooks 2020-07-31 03:06:13 +03:00
ANH
b4b12f1642 add reviewer_will_play_question_sounds and reviewer_will_play_answer_sounds hooks 2020-07-30 22:20:19 +03:00
ANH
43620b0a30 use 'Preview Settings' as a label for the new options button 2020-07-30 18:04:50 +03:00
Fabian Wood
79e8076685 Added typehints for qt profiles
* `Any` used for pickle methods, this could probably be improved
with some kind of Callable
* str used for self.base, though this may be a problem for
different OSes. Some type of os.PathLike might be good.
* Line 75, type ignored: mypy was complaining about no. of args,
and kwargs there didn't seem to be needed. Separate issue to test,
though.
2020-07-31 00:56:48 +10:00
ANH
03a80e596a add night mode and mobile class toggles in card layout screen 2020-07-30 15:39:02 +03:00
Damien Elmes
215413ce25
Merge pull request #715 from phwoo/typehints-for-qt-modelchooser
Added typehints to qt/aqt/modelchooser.py, updated qt/mypy.ini
2020-07-30 17:00:58 +10:00
Damien Elmes
f52a25d80a
Merge branch 'master' into add-type-hints-for-qt-models 2020-07-30 16:05:55 +10:00
Fabian Wood
c4f9bf62fd added typehints to modelchooser, updated mypy.ini 2020-07-30 15:25:25 +10:00
Fabian Wood
e49a00fdeb added type hints to qt models 2020-07-30 13:28:52 +10:00
Adam Plaice
d6fb4acd38 Re-add previously supported file extensions for media
(They had been removed in 2ae342592c).
2020-07-29 15:08:33 +02:00
Damien Elmes
93ada5d374
Merge pull request #703 from ANH25/master
fix help-wanted#13
2020-07-29 14:14:57 +10:00
Damien Elmes
6d0d210130
Merge branch 'master' into help-wanted-4-add-type-hints-5 2020-07-29 13:56:57 +10:00
Damien Elmes
7e7f2d0be4 clearer message when template error is preventing save 2020-07-29 12:53:03 +10:00
Matt Krump
5e6f532f56 Turn on check_untyped_defs for aqt.exporting 2020-07-28 18:42:22 -06:00
Matt Krump
24e7156991 Turn on check_untyped_defs for aqt.editor
* Turn on check_untyped_defs for aqt.browser
* Add type hints
2020-07-28 18:42:22 -06:00
Damien Elmes
a239b9330d
Merge pull request #706 from mkrump/help-wanted-4-add-type-hints-4
Turn on check_untyped_defs for aqt.taglimit, aqt.update and aqt.browser
2020-07-28 13:16:49 +10:00
Damien Elmes
227703f9fa bump version 2020-07-28 12:59:56 +10:00
Damien Elmes
f45627dbd3 don't throw error on empty path
https://forums.ankiweb.net/t/anki-2-1-28-error-message-when-reviewing-cards/1439
2020-07-27 11:28:32 +10:00
Matt Krump
baa033bc78 Fix browser.py import sorting 2020-07-26 13:16:06 -06:00
Matt Krump
4239c2dfdc Cast set to list to fix mypy failure in browser.py 2020-07-26 13:00:06 -06:00
Damien Elmes
dbbdd16f0f apply AltGr workaround on qt 5.14 as well 2020-07-26 10:13:53 +10:00
Matt Krump
b5222f935d Turn on check_untyped_defs for aqt.browser
* Turn on check_untyped_defs for aqt.browser
* Add type hints to browser
2020-07-25 17:31:49 -06:00
Matt Krump
b2cbe10d7e Turn on check_untyped_defs for aqt.update
* Turn on check_untyped_defs for aqt.update
2020-07-25 17:31:44 -06:00
Matt Krump
7356756868 Turn on check_untyped_defs for aqt.taglimit
* Add type hints taglimit
* Turn on check_untyped_defs for aqt.taglimit
2020-07-25 15:45:31 -06:00
ANH
671b1c76cb
Merge branch 'master' into master 2020-07-25 05:24:45 +03:00
Damien Elmes
b3ec8046bf
Merge branch 'master' into help-wanted-4-add-type-hints-3 2020-07-25 11:43:46 +10:00
Matt Krump
a844a8b0c5 Add type hints to importing
* Add type hints to importing
* Turn on type checking for aqt.importing
2020-07-24 12:38:34 -06:00
Matt Krump
186f1c7720 Add type hints to errors
* Add type hints to errors
* Turn on type checking for aqt.errors
2020-07-24 11:20:54 -06:00
Matt Krump
b0dd85f87e Add type hints to aqt.models
* Add type hints to aqt.models
* Turn on type checking for aqt.models
2020-07-24 10:59:45 -06:00
ANH
fd0c3cf57e add missing string r flag 2020-07-24 09:18:05 +03:00
ANH
da3761341e formatting 2020-07-24 09:00:34 +03:00
ANH
e122534ba4 avoid string concatenation 2020-07-24 08:12:46 +03:00
Matt Krump
b3b4d23f9d Add type hints for apt.deckconf
* Add type hints for apt.deckconf
* Turn on check_untyped_defs for apt.deckconf
2020-07-23 21:53:12 -06:00
ANH
eaf935c3ff fix ankitects/help-wanted#13 2020-07-24 06:00:55 +03:00
Damien Elmes
61e8611b7b fix lint issue in previewer, and drop unused code
No add-ons appear to be using the removed code, and Anki wasn't
using it either.
2020-07-24 12:18:37 +10:00
Damien Elmes
2cba721702 formatting and debug statement tweak 2020-07-24 11:57:37 +10:00
Damien Elmes
26426cb11e fix preview not updating on edit
https://forums.ankiweb.net/t/modification-and-preview/1331
2020-07-24 11:57:22 +10:00
Damien Elmes
c3266ea060 enable AltGr workaround by default
5.15.1 may still be another month away
2020-07-24 10:32:50 +10:00
Damien Elmes
80a2bfa642 ask user to check db when graphs fail to load 2020-07-24 09:56:28 +10:00
Damien Elmes
ad628d0f36
Merge pull request #702 from mkrump/help-wanted-4-add-type-hints
Add type hints for apt.dyndeckconf
2020-07-24 09:01:07 +10:00
Matt Krump
4bc98cd0ca Add type hints for apt.dyndeckconf
* Add type hints for apt.dyndeckconf
* Turn on check_untyped_defs for apt.dyndeckconf
2020-07-23 16:04:46 -06:00
kelciour
f2027cca96 Add --no-autoload-files option to mpv 2020-07-23 14:28:47 +03:00
Damien Elmes
2ff1a27b04 fix misaligned deck heading in RTL languages
https://forums.ankiweb.net/t/anki-2-1-29-beta/1220/2?u=dae
2020-07-22 11:00:39 +10:00
Damien Elmes
1b441f5050 fix pylint failing in CI 2020-07-21 16:16:34 +10:00
Damien Elmes
86fc7446b0 protect against exception on initial recording wait 2020-07-21 16:07:58 +10:00
Damien Elmes
412f1777bd bump version 2020-07-21 15:54:14 +10:00
Damien Elmes
3337c96fdb trigger recording permission on newer macOS SDKs 2020-07-21 15:54:04 +10:00
Damien Elmes
1e6a37e0e6 formatting 2020-07-21 14:17:56 +10:00
Damien Elmes
01ff6ab55d apply rtl dir to webviews
https://forums.ankiweb.net/t/gui-problems-with-right-to-left-languages/1205
2020-07-21 11:52:25 +10:00
Damien Elmes
b5cbfe3bbb full sync terminates media sync; start it again afterwards
https://forums.ankiweb.net/t/media-files-not-downloaded-in-first-full-sync-v2-1-28/1198/3
2020-07-21 11:26:41 +10:00
Damien Elmes
67abb98993
Merge pull request #692 from Arthur-Milchior/remove_useles_variables
Remove useless variables
2020-07-20 11:35:40 +10:00
Damien Elmes
c203410307 split add-ons window title from menu bar action
https://anki.tenderapp.com/discussions/private/4781-print-mistake
2020-07-19 09:49:36 +10:00
Damien Elmes
f22aa4c199 catch SIGTERM, and respond more quickly 2020-07-18 11:26:04 +10:00
Arthur Milchior
452daf8d80 Remove useless variables 2020-07-17 08:38:48 +02:00
Damien Elmes
bfbab8b498 i18n downgrade&quit button 2020-07-17 15:06:14 +10:00
Damien Elmes
f741b05f56
Merge pull request #690 from glutanimate/stats-will-show-hooks
Add a couple of hooks to trigger add-on actions before showing stats
2020-07-17 14:38:41 +10:00
Glutanimate
0fedf5c825 Fix type annotation for old stats dialog class 2020-07-17 03:08:09 +02:00
Glutanimate
b89811bfba Add a couple of hooks to trigger add-on actions before showing stats 2020-07-16 21:48:46 +02:00
Glutanimate
fe81da9b8a Make sure to set domDone to False before loading URLs
Fixes an issue where JS would be evaluated prematurely in views
directly loaded from URLs.
2020-07-16 19:56:57 +02:00
Damien Elmes
2824be25f0 formatting 2020-07-16 13:55:53 +10:00
Damien Elmes
fa239be124 add platform version back into sync metadata 2020-07-16 10:12:41 +10:00
Damien Elmes
320b56ae43 can't rely on stdout to handle unicode 2020-07-15 09:36:29 +10:00
Damien Elmes
eb91ff7421
Revert "Added parameter/return types, fixed possible logic error and typo" 2020-07-13 21:25:44 +10:00
Damien Elmes
5c6ca55e42
Merge pull request #686 from zerrs/master
Added parameter/return types, fixed possible logic error and typo
2020-07-13 21:25:16 +10:00
Damien Elmes
2af1d68b05
Update customstudy.py 2020-07-13 21:24:18 +10:00
Damien Elmes
c3800b6f9a
Merge pull request #684 from flagist0/select-note-type-with-ctrl-plus-digit-key
Allow to choose note type from list by pressing ctrl + row number
2020-07-13 21:23:35 +10:00
Alexander Presnyakov
364725a528 Don't call setCurrentRow if row didn't change 2020-07-13 12:33:36 +03:00
zzzz
d6d952d0fd Added some return and parameter types in customstudy.py, also fixed a possible logic error in plus function and a small typo 2020-07-13 01:32:08 -04:00
kelciour
ef1d61e35c Scroll media sync log to the last line 2020-07-13 03:06:44 +03:00
Alexander Presnyakov
e092dadc9a Allow to choose note type from list by pressing ctrl + row number 2020-07-12 22:15:58 +03:00
Damien Elmes
bc5b6dfb63 mediasrv symlink fix
https://forums.ankiweb.net/t/anki-2-1-28-beta/629/39
2020-07-11 10:53:41 +10:00
Glutanimate
15fd3a4856 Add top_toolbar_did_redraw hook
Notifies add-ons of the top toolbar being redrawn
2020-07-10 17:38:40 +02:00
Damien Elmes
93425be839 formatting 2020-07-07 13:28:30 +10:00
Damien Elmes
85cbd263da tidy up logging 2020-07-07 10:50:12 +10:00
Damien Elmes
4ab9d04c95 if webexports does not match, return 403 2020-07-07 10:50:03 +10:00
evandrocoan
121725390d Fix _addons/ URL prefix not being removed on Windows systems
Anki 2.1.28 Beta
https://forums.ankiweb.net/t/anki-2-1-28-beta/629/26

> Did the requirements on how to expose resources on the internal server change? Because scripts, css files and the like, registered with setWebExports, do not work anymore with beta2.
> A look at the console shows the following for all resources:
> Failed to load resource: the server responded with a status of 500 (INTERNAL SERVER ERROR)

**\Anki2\addons21\someaddon\__init__.py**
```py
from aqt import mw
import aqt

# assuming add-on folder is named "test"
# and assuming a 'test.js' is in the same folder
addon_id = "someaddon"
port = mw.mediaServer.getPort()
mw.addonManager.setWebExports(addon_id, ".*\\.js$")

print("Hello")

aqt.editor._html += f"""
<script>
    var script = document.createElement('script');
    script.type = 'text/javascript';
    script.src = 'http://127.0.0.1:{port}/_addons/{addon_id}/test.js';
    document.body.appendChild(script);
</script>"""
```
2020-07-06 13:51:37 -03:00
Andreas Reis
e8ddd17fec Always use standard QT color dialog on Linux
On Linux only Gnome uses its own color dialog, and it's inferior to QT's own: See the same issue @ https://github.com/OpenShot/openshot-qt/pull/2425

(This is/was visible only on some distributions' packaged versions of Anki, not via ./run.)

isLin check since QT on Windows already uses the default, whereas Mac's own picker seems superior (from what I can judge by screenshots).
2020-07-05 13:21:38 +02:00
Damien Elmes
4033f00988 don't stuff mw into function objects
Using the global is preferable to fighting against mypy to insert mw
into a function object.
2020-07-03 10:55:29 +10:00
Damien Elmes
14602be0ca port previous css workaround to flask 2020-07-03 10:40:23 +10:00
Damien Elmes
e45c939649
Merge pull request #554 from evandroforks/fix_html5_media_support
Fixed HTML5 media tags
2020-07-03 10:25:43 +10:00
evandrocoan
476b881987 Replaced flask.Response by flask.make_response to simplify the
implementation and because make_response is preferred over Response
as it respects the server defined Response type.
2020-07-02 20:39:03 -03:00
evandrocoan
a99e455414 Removed duplicated mediasrv.py security check and fixed invalid
command/path error message.
2020-07-02 20:39:03 -03:00
evandrocoan
1218d109e8 Fix jest unit tests after merge
# Conflicts:
#	qt/aqt/mediasrv.py
#	qt/ts/src/ankimedia.ts
#	qt/ts/src/reviewer-exceptions.test.ts
#	qt/ts/src/reviewer.test.ts
#	ts/package.json
2020-07-02 14:30:43 -03:00
evandrocoan
0142ac3ca2 Replaced send_from_directory by send_file to simplify the code 2020-07-02 13:52:07 -03:00
evandrocoan
1e6fa5f8eb Ensure protection against directory transversal
https://security.openstack.org/guidelines/dg_using-file-paths.html
2020-07-02 13:52:03 -03:00
evandrocoan
be10da58d9 Fixed aqt/mediasrv.py:14: error: unused 'type: ignore' comment
from waitress.server import create_server  # type: ignore
https://github.com/evandroforks/anki/runs/743801391#step:25:1129
2020-07-02 13:51:59 -03:00
evandrocoan
020415efb9 Replaced the mediasrv.py SimpleHttp server by flask and waitress,
fixing HTML5 media support.
https://stackoverflow.com/questions/37044064/html-audio-cant-set-currenttime
https://stackoverflow.com/questions/21956683/enable-access-control-on-simple-http-server
https://stackoverflow.com/questions/5052635/what-is-relation-between-content-length-and-byte-ranges-in-http-1-1
https://stackoverflow.com/questions/16725907/google-app-engine-serving-mp3-for-audio-element-needs-content-range-header

I was trying to use HTML5 audio tag to display audios like:
```html
<audio id="elem_audio" src="myfile.mp3" controls></audio>
```
![image](https://user-images.githubusercontent.com/5332158/79063321-565b5500-7c77-11ea-9f8d-6e1df6f07892.png)

But the progress bar seek was not working. After researching, I found the problem was the HTML server not properly responding to the HTML5 header requests. The HTML server should respond to quite complicated things as 206 partial, properly handle keep-alive, provide media ranges and other HTTP headers: https://stackoverflow.com/questions/37044064/html-audio-cant-set-currenttime

To implement all these on the Simple HTTP server would be quite complicated. Then, instead, I imported the `flask` web server, which is quite simple and straight forward to use. Now, the back-end is using a secure complaint HTTP back-end:
1. https://palletsprojects.com/p/flask/
    > Flask is a lightweight WSGI web application framework. It is designed to make getting started quick and easy, with the ability to scale up to complex applications. It began as a simple wrapper around Werkzeug and Jinja and has become one of the most popular Python web application frameworks.
    >
    > Flask offers suggestions, but doesn't enforce any dependencies or project layout. It is up to the developer to choose the tools and libraries they want to use. There are many extensions provided by the community that make adding new functionality easy.

1. https://docs.pylonsproject.org/projects/waitress/en/latest/
    > Waitress is meant to be a production-quality pure-Python WSGI server with very acceptable performance. It has no dependencies except ones which live in the Python standard library. It runs on CPython on Unix and Windows under Python 2.7+ and Python 3.5+. It is also known to run on PyPy 1.6.0 on UNIX. It supports HTTP/1.0 and HTTP/1.1.

Right now, anki does not support fields passing file names directly to HTML audio tags, but this can be easily done with (https://github.com/ankitects/anki/pull 540 - Added arguments to the sound tag) plus the commit 826a97df61, the HTML5 audio tag can be used like this:
```html
// Audio = [sound:myfile.mp3|onlyfilename]
<audio id="elem_audio" src="{{Audio}}" controls controlsList="nodownload"></audio>
```
![image](https://user-images.githubusercontent.com/5332158/79063736-c539ad80-7c79-11ea-8420-40b72185f4e7.png)

# Conflicts:
#	qt/aqt/mediasrv.py
2020-07-02 13:51:49 -03:00
Damien Elmes
48b6510aef dump error on profile load fail
may help diagnose
https://forums.ankiweb.net/t/i-couldnt-open-anki-resetting-corrupt-global/190
2020-07-02 10:35:01 +10:00
Damien Elmes
04b1ca7559 defer top toolbar drawing until after add-ons loaded
https://forums.ankiweb.net/t/anki-2-1-28-beta/629/13
2020-07-02 10:23:14 +10:00
Damien Elmes
dfda5750a1 add new strings to .po files as part of template update
Pontoon appears to only update existing gettext translations; it
won't add new ones on its own. Fixes
https://forums.ankiweb.net/t/anki-2-1-28-beta/629/6
2020-07-02 10:03:39 +10:00
Damien Elmes
97869d0f57 fix scrollbars on fields on Windows/Linux 2020-07-02 09:51:50 +10:00
Damien Elmes
4d23a69e9a formatting 2020-07-01 14:01:24 +10:00
Damien Elmes
6db954fbbe don't allow table inside field to extend outside of field
https://anki.tenderapp.com/discussions/private/4498-adjust-textbox-geometry-in-add-note-window
2020-07-01 12:13:04 +10:00
Damien Elmes
bedd9dadb1 add option to disable media syncing
https://forums.ankiweb.net/t/error-when-adding-audio-file/495/2
2020-07-01 11:35:24 +10:00
Damien Elmes
05fb67d409 show clearer error when media db locked
should not happen frequently during a sync, but may happen during
the initial change checking stage

https://forums.ankiweb.net/t/error-when-adding-audio-file/495/2
2020-07-01 11:19:06 +10:00
Damien Elmes
40f270c386 shift+click on the graphs button to access old graphs for now 2020-06-30 20:07:46 +10:00
Damien Elmes
101deb002b graphs now work in night mode 2020-06-30 16:23:46 +10:00
Damien Elmes
f3febea4b0 update edited/changed column labels
https://github.com/ankitects/anki/pull/674/files
2020-06-29 18:34:03 +10:00
Damien Elmes
52cd9fc4b8 plug new graphs code into GUI
Still some work to do. Feedback welcome!
2020-06-29 15:53:56 +10:00
Damien Elmes
d4cd4535e6 lint fixes 2020-06-29 15:53:56 +10:00
Damien Elmes
72609bee18 add option to webview to skip external browser open 2020-06-29 15:48:01 +10:00
Damien Elmes
1f4f5b8c45 include generated js in aqt_data 2020-06-29 15:48:01 +10:00
Damien Elmes
41d77b0255 get i18n working in typescript 2020-06-29 15:48:01 +10:00
Damien Elmes
329186f140 qt's js code now shares ts/node_modules; more graph work 2020-06-29 15:48:01 +10:00
Damien Elmes
2a3ef80c90 update qt ts to prettier 2.0 2020-06-29 15:48:01 +10:00
Damien Elmes
dcff5e28fa add top level component and pass search/day limit back from frontend 2020-06-29 15:48:00 +10:00
Damien Elmes
82568a1f3e experiment with exposing raw card/revlog data to frontend 2020-06-29 15:48:00 +10:00
Damien Elmes
35975b142b
Merge pull request #675 from kelciour/mpv-changes-2
A few mpv changes 2
2020-06-29 15:47:09 +10:00
kelciour
696f7e4373 Fix "make check" by defining dummy _register_callbacks method in MPVBase 2020-06-27 13:07:46 +03:00
kelciour
d1b74dfcb6 Fix no sound after mpv restart 2020-06-27 03:46:40 +03:00
kelciour
422e313c16 Replace mpv "idle" property with "end-file" event 2020-06-27 03:46:40 +03:00
kelciour
610f9eb236 Replace default mpv quit keybindings if mpv version is >= 0.30
4614d432a8
2020-06-27 03:46:40 +03:00
neitrinoweb
69f73b57e7 add type hints 2020-06-25 17:27:52 +03:00
neitrinoweb
c7db6331cf fix missing typing import 2020-06-25 16:53:24 +03:00
Damien Elmes
5e5dc517ca work around yet another qt bug
https://anki.tenderapp.com/discussions/beta-testing/2017-httpsforumsankiwebnettrestore-defaults-config-not-visually-updated420
2020-06-24 11:12:45 +10:00
Damien Elmes
ef55c0a2ee remove the script-message commands that older mpv version don't support
https://github.com/ankitects/anki/pull/671#issuecomment-647798343
2020-06-23 14:30:42 +10:00
Damien Elmes
c3e007f069 remove mpv keybindings on init
On a machine here, they cause the following error:

    raise MPVCommandError("%r: %s" % (message["command"], e))
aqt.mpv.MPVCommandError: ['keybind', 'q', 'stop']: invalid parameter
2020-06-22 13:22:57 +10:00
Damien Elmes
f24321dc65
Merge pull request #671 from kelciour/mpv-changes
A few mpv changes
2020-06-22 12:12:58 +10:00
Damien Elmes
2cd86f38f4
Merge pull request #670 from evandroforks/print_version
Create the command line argument -v/--version to print version
2020-06-22 12:06:18 +10:00
kelciour
678b751010 Reset pause mode when switching to the next file 2020-06-20 02:04:35 +03:00
kelciour
d64c26f20a Replace deprecated "idle" event with "idle-active" property 2020-06-20 02:04:35 +03:00
kelciour
9aee8085e0 Disable OSC idle message 2020-06-20 02:04:34 +03:00
kelciour
ae533fce71 Replace default mpv "quit" keybindings with "stop"
https://github.com/mpv-player/mpv/blob/master/etc/input.conf
2020-06-20 02:04:34 +03:00
evandrocoan
9867e5e1f7 Create the command line argument -v/--version to print version
https://forums.ankiweb.net/t/i-couldnt-open-anki-resetting-corrupt-global/190
2020-06-19 13:13:10 -03:00
Arthur Milchior
3eabe4c3f7 Strip name of added deck
There is currently what I believe to be a bug: create a deck "   ".
The creation is accepted and the name is renamed to "blank". Instead,
I believe you'd want to strip the deck name before testing its
emptiness.
2020-06-17 11:58:33 +02:00
Damien Elmes
b51f03085e migrate card stats to backend
Currently this renders the HTML directly like the previous Python
implementation - doing it in JS would probably make more sense in the
future.
2020-06-15 17:22:16 +10:00
Damien Elmes
2845941a28
Merge pull request #667 from BlueGreenMagick/refresh-deck-list
refresh deck list when adding deck via deckchooser
2020-06-12 09:12:51 +10:00
Damien Elmes
9e0494047e
Merge pull request #666 from BlueGreenMagick/studydeck-name
get deck name after adding deck
2020-06-12 09:12:21 +10:00
Damien Elmes
8f36a0fbb0
Merge pull request #665 from BlueGreenMagick/remove-a-var
Add type hints to deckchooser
2020-06-12 09:11:54 +10:00
Damien Elmes
37bf56c56e
remove ellipsis 2020-06-12 09:04:19 +10:00
BlueGreenMagick
e3889d49c9 add typehint to deckchooser.py
every occurunce of self.widget is type ignored
because QHBoxLayout has a method named widget
renaming this property will allow type hints
2020-06-11 14:19:36 +09:00
BlueGreenMagick
20da11f57e refresh deck list when adding deck via deckchooser 2020-06-11 13:00:10 +09:00
BlueGreenMagick
4e6ba4df78 get deck name after adding deck 2020-06-11 12:50:17 +09:00
BlueGreenMagick
552db2b94d remove self.deck set to mw.col as it isn't used 2020-06-11 11:59:27 +09:00
Quentin Nerden
86713d110e
Update message to match gui
The Change Note Type... command is under the Notes menu, not the Edit menu
2020-06-09 11:49:47 +02:00
Damien Elmes
f44597bb3a
Merge pull request #650 from evandroforks/remember_last_inputs
Remember last inputs for Find and Replace and Duplicates Find
2020-06-09 14:43:58 +10:00
Damien Elmes
3275aff335
Merge pull request #662 from gaul/screen/none
Handle None from QApplication.desktop().screen()
2020-06-09 14:42:59 +10:00
Damien Elmes
30a8d3260b
Merge pull request #655 from Arthur-Milchior/history_line
History line
2020-06-09 14:42:45 +10:00
Damien Elmes
62ab2ed36d remove unused import 2020-06-09 14:14:12 +10:00
Damien Elmes
1aaf1059b4 formatting 2020-06-09 14:07:39 +10:00
Damien Elmes
c77d017135 catch invalid regex in search
https://github.com/ankitects/anki/pull/652
2020-06-09 11:46:07 +10:00
Damien Elmes
43da12a445 (un)escape image references in HTML editor to fix ampersand handling
https://anki.tenderapp.com/discussions/ankidesktop/41479-image-names-with-are-breaking
2020-06-09 11:22:07 +10:00
Andrew Gaul
e366b86af2 Handle None from QApplication.desktop().screen()
This prevents a crash when Anki is open for multiple days.  Reference:
https://anki.tenderapp.com/discussions/ankidesktop/41879-qt-cannot-create-window-no-screens-available
2020-06-09 09:57:35 +09:00
Damien Elmes
5f2987d0f8 allow input.conf in Anki data folder
https://anki.tenderapp.com/discussions/beta-testing/1964-anki-2128-alpha#comment_48382756
2020-06-09 10:26:25 +10:00
Damien Elmes
4033f6d37e fix mistaken qconnect replacement 2020-06-09 10:20:16 +10:00
Damien Elmes
20ee0a8b1b fix 'NoneType' object has no attribute 'latest_progress'
https://anki.tenderapp.com/discussions/beta-testing/1964-anki-2128-alpha#comment_48382636
2020-06-09 09:07:41 +10:00
evandrocoan
947f58032f Moved the utils.py new save/restore functions together 2020-06-08 16:23:32 -03:00
evandrocoan
38fba41fb2 Renamed save_combo_index to save_combo_index_for_session 2020-06-08 16:23:28 -03:00
Arthur Milchior
c81a9b3d61 hook: history_line
I expect to use this hook to create an add-on which will simply remove
the ",,". By ignoring empty fields I expect to make this easier to
use.
2020-06-08 20:47:01 +02:00
Damien Elmes
7c444b4d35 add progress to db check 2020-06-08 21:07:36 +10:00
evandrocoan
1d32873869 Renamed new function on qt/aqt/utils.py to snake case 2020-06-08 01:35:31 -03:00
evandrocoan
b23b404f68 Created the profiles.py session attribute for things to forgot
each time Anki restarted and set to only fill the find and replace
dialogs when they were filled on the actual session.
2020-06-08 01:35:31 -03:00
evandrocoan
4bc895f7df Moved restoreComboHistory below saveComboHistory as others 2020-06-08 01:35:31 -03:00
evandrocoan
87d051fa71 Set to browser.py finddupes.ui remember the last selected field
https://anki.tenderapp.com/discussions/ankidesktop/39468-find-and-replace-does-not-remember-the-input-from-last-time
2020-06-08 01:35:31 -03:00
evandrocoan
bf55ebbd8a Added some type checking to utils.py QComboBox restore functions
# Conflicts:
#	qt/aqt/utils.py
2020-06-08 01:35:31 -03:00
evandrocoan
f27ad0c524 Moved restoreComboHistory closer to restoreComboIndex on utils.py 2020-06-08 01:35:31 -03:00
evandrocoan
6047c6ecc0 Renamed setupComboBoxHistory to restoreComboHisotory,
saveComboActiveIndex to saveComboIndex, saveComboBoxHistory to
saveComboHistory and restoreComboActiveIndex to restoreComboIndex.
2020-06-08 01:35:31 -03:00
evandrocoan
a78b3d522e Set to browser.py finddupes.ui remember the last search text
https://anki.tenderapp.com/discussions/ankidesktop/39468-find-and-replace-does-not-remember-the-input-from-last-time
2020-06-08 01:35:31 -03:00
evandrocoan
a74e43a515 Set to browser.py findreplace.ui remember the last selected field
by creating saveComboActiveIndex and restoreComboActiveIndex.

https://anki.tenderapp.com/discussions/ankidesktop/39468-find-and-replace-does-not-remember-the-input-from-last-time
2020-06-08 01:35:31 -03:00
evandrocoan
40f98a244f Set to browser.py findreplace.ui remember the last regex/case
by creating the saveIsChecked and restoreIsChecked.

https://anki.tenderapp.com/discussions/ankidesktop/39468-find-and-replace-does-not-remember-the-input-from-last-time
2020-06-08 01:35:31 -03:00
evandrocoan
54d7f136cb Created the setupComboBoxHistory and saveComboBoxHistory to remove
duplicated/common code.
https://anki.tenderapp.com/discussions/ankidesktop/39468-find-and-replace-does-not-remember-the-input-from-last-time
2020-06-08 01:35:31 -03:00
evandrocoan
3971ea5518 Set to remember the last replace input for findreplace.ui
https://anki.tenderapp.com/discussions/ankidesktop/39468-find-and-replace-does-not-remember-the-input-from-last-time
2020-06-08 01:35:31 -03:00
evandrocoan
ba99c5ecb5 Set to remember the last find input for findreplace.ui
https://anki.tenderapp.com/discussions/ankidesktop/39468-find-and-replace-does-not-remember-the-input-from-last-time
2020-06-08 01:35:31 -03:00
Damien Elmes
a0c1b68b86
Merge pull request #660 from brownbat/tooltip-positioning
Update tooltip() in utils.py
2020-06-08 11:40:43 +10:00
Damien Elmes
fd895c88ca
Merge pull request #659 from BlueGreenMagick/paste-typehint
add type hint to paste-related functions
2020-06-08 11:32:16 +10:00
Damien Elmes
26330da119
Merge pull request #657 from BlueGreenMagick/prof-name
don't allow addons21 as profile name
2020-06-08 11:30:27 +10:00
Damien Elmes
186ccc5f01 pin legacy modules
https://anki.tenderapp.com/discussions/ankidesktop/42248-potentially-serious-image-issue#comment_48388863
2020-06-08 11:12:51 +10:00
Thomas B
26b94e1948 Update tooltip() in utils.py
Allow x,y offsets to be specified for tooltip(), useful for accomodating longer tooltips.
2020-06-07 16:06:23 -04:00
BlueGreenMagick
6cf95d97e7 add type hint to paste-related functions 2020-06-07 12:06:11 +09:00
BlueGreenMagick
7df3c9f0b1 don't allow addons21 as profile name
because addons21 and profiles directory are stored in same directory
2020-06-05 22:44:59 +09:00
Damien Elmes
4a69b55a90 add note/card removal to backend 2020-06-04 18:21:04 +10:00
Damien Elmes
e1b0fe1832 add .count() to hooks, and list->sequence in note deletion 2020-06-04 18:20:03 +10:00
evandrocoan
d566045991 Add missing quotes to typecheck-setup.sh for paths with spaces on
the name.
2020-06-02 21:37:58 -03:00
Damien Elmes
36de3ff6fd more fixes for bundled Qt types 2020-06-03 09:55:30 +10:00
Damien Elmes
08ac2601ed update qt version pin 2020-06-03 09:55:04 +10:00
Damien Elmes
4c6bd7b037 lint fixes 2020-06-02 17:58:14 +10:00
Damien Elmes
59bbf02364 new stubs don't require as many ignores 2020-06-02 17:56:32 +10:00
Damien Elmes
2a52314d58 Switch to PyQt 5.15's (slightly broken) built-in stubs 2020-06-02 17:52:18 +10:00
Damien Elmes
b3752e8618 fix initial login 2020-06-02 15:10:58 +10:00
Damien Elmes
f0b6d13ead save browser columns when changed, not on each browser close 2020-06-02 13:39:15 +10:00
Damien Elmes
4d7e23111e change sync label to indicate sync state
- blue for normal sync, red for full sync required
- refactor status fetching code so we don't hold a collection lock
during the network request, which slows things down
- fix sync spinner restarting when returning to deck list
2020-06-02 13:23:01 +10:00
Damien Elmes
49971d0235 fix media sync progress not updating, and issues closing profile 2020-06-01 13:57:10 +10:00
Damien Elmes
00138c6ba0 make sure browser sidebar refreshes on reset()
if items are modified in a sync, the sidebar needs to reflect it
2020-06-01 13:57:10 +10:00
Damien Elmes
90e19daec2 handle aborting normal sync
- Use a separate abort handle, as the media sync is running
in the background and we need to be able to target them separately.
The current progress handling is going to need a rethink if we introduce
any other background tasks in the future.
- Roll back the transaction when interrupting.
2020-06-01 13:57:10 +10:00
Damien Elmes
c6f0710ce7 report normal sync progress
Also:
- provide a way for the progress handler to skip the throttling so that
we can ensure progress is updated at the end of a stage
- show 'checking' at the end of full sync
2020-06-01 13:57:10 +10:00
Damien Elmes
6bf9f5bc6c lint fixes 2020-06-01 13:57:10 +10:00
Damien Elmes
27a36482c0 unify sync error handling; handle interrupted 2020-06-01 13:57:10 +10:00
Damien Elmes
a8ad4abf37 add "immediate" progress back
on ops which we know are going to take time, it makes the interface
look more responsive to pop up the progress more quickly
2020-06-01 13:57:10 +10:00
Damien Elmes
7e221f0acf update auto-sync code 2020-06-01 13:57:10 +10:00
Damien Elmes
058ff1b71a show server message if present 2020-06-01 13:57:10 +10:00
Damien Elmes
87ca8e39a8 progress bar tweaks 2020-06-01 13:57:10 +10:00
Damien Elmes
0e5b7da62a login/full up/full down plugged in 2020-06-01 13:57:10 +10:00
Damien Elmes
ee6d7f82e7 rework progress handling
- client now polls status instead of backend pushing it
- supports multiple threads
- update throttling happens in one place
2020-06-01 13:57:10 +10:00
Damien Elmes
b254b1f722 another snapshot of sync work
progress handler is going to need to be reworked to function across
threads
2020-06-01 13:57:10 +10:00
Damien Elmes
8516ed8655 handle images served from directory + svg content type
https://anki.tenderapp.com/discussions/ankidesktop/41974-win-linux-when-pasting-some-html-i-get-error-in-_run_command-ankirsbackendioerror-ioerror
2020-06-01 13:40:17 +10:00
Damien Elmes
caf95742da handle unicode hostnames
https://anki.tenderapp.com/discussions/ankidesktop/41915-something-wrong-and-i-cant-start-anki
2020-06-01 13:40:17 +10:00
evandrocoan
5bec874a7b Set to also print the correct QT log message category 2020-05-31 19:38:02 -03:00
evandrocoan
25ff525cc9 Print qt context if it exists
https://stackoverflow.com/questions/42561295/qt-error-is-printed-on-the-console-how-to-see-where-it-originates-from
https://stackoverflow.com/questions/35894171/redirect-qdebug-output-to-file-with-pyqt5
https://anki.tenderapp.com/discussions/ankidesktop/42070-anki-closes-without-warning-when-importing-conflicting-shared-deck
https://doc.qt.io/qt-5/qtglobal.html#qInstallMessageHandler
2020-05-31 19:38:02 -03:00
Damien Elmes
9594a3ef9b add some more names to about.py
If you've contributed and are missing from the list, please send me
a PR!
2020-06-01 06:27:14 +10:00
Damien Elmes
268edc237a
Merge pull request #645 from evandroforks/resize_clayout_editor_and_preview
Allow to resize clayout.py horizontal space between the text editor and the card preview
2020-06-01 05:53:40 +10:00
evandrocoan
9257e75762 Save and restore the debug console window geometry and splitter 2020-05-30 20:58:55 -03:00
evandrocoan
6bd80fef67 Add saveSplitter and restoreSplitter to clayout.py
# Conflicts:
#	qt/aqt/clayout.py
2020-05-30 20:33:57 -03:00
evandrocoan
a5fd8398c4 Allow to resize clayout.py horizontal space between the text editor
and the card preview.

# Conflicts:
#	qt/aqt/clayout.py
2020-05-30 20:33:10 -03:00
Damien Elmes
cfc2a549f1
Merge pull request #641 from glutanimate/add-main-window-did-init-hook
Add main_window_did_init hook
2020-05-29 08:56:47 +10:00
Damien Elmes
36bc50d65f
Merge pull request #640 from evandroforks/fix_render_card_being_called_twice
Fixed previewer.py::render_card() being called twice in row
2020-05-29 08:48:35 +10:00
Damien Elmes
255ac3679b add maximize button to HTML editor
closes ankitects/help-wanted#1
2020-05-29 08:43:33 +10:00
Damien Elmes
f3a8bb28d5 fix progress window not disappearing when importing csv 2020-05-29 08:40:25 +10:00
Glutanimate
6147356330 Add main_window_did_init hook and clarify difference to profile_did_open 2020-05-28 13:30:22 +02:00
evandrocoan
f78166cda2 Fixed previewer.py::render_card() being called twice in row
Related to: https://github.com/ankitects/anki/pull 529
Ensuring "setNote" is called only once during changing of note type

After debugging the code, every time the cards changes, there are
two stacktraces generated and triggered when note cards change:

calling 1590591251.4621403
   File "qt/runanki", line 4, in <module>
  File "F:\anki\qt\aqt\__init__.py", line 365, in run
    _run()
  File "F:\anki\qt\aqt\__init__.py", line 515, in _run
    app.exec()
  File "F:\anki\qt\aqt\webview.py", line 467, in handler
    cb(val)
  File "F:\anki\qt\aqt\editor.py", line 477, in <lambda>
    self.web.evalWithCallback("saveNow(%d)" % keepFocus, lambda res: callback())
  File "F:\anki\qt\aqt\browser.py", line 858, in <lambda>
    self.editor.saveNow(lambda: self._onRowChanged(current, previous))
  File "F:\anki\qt\aqt\browser.py", line 880, in _onRowChanged
    self._renderPreview(True)
  File "F:\anki\qt\aqt\browser.py", line 1576, in _renderPreview
    self._previewer.render_card(cardChanged)
  File "F:\anki\qt\aqt\previewer.py", line 136, in render_card
    print('calling', time.time(), "\n", "".join( traceback.format_stack() ) )

calling 1590591251.4766161
   File "qt/runanki", line 4, in <module>
  File "F:\anki\qt\aqt\__init__.py", line 365, in run
    _run()
  File "F:\anki\qt\aqt\__init__.py", line 515, in _run
    app.exec()
  File "F:\anki\qt\aqt\webview.py", line 467, in handler
    cb(val)
  File "F:\anki\qt\aqt\editor.py", line 453, in oncallback
    gui_hooks.editor_did_load_note(self)
  File "F:\anki\qt\aqt\gui_hooks.py", line 1168, in __call__
    hook(editor)
  File "F:\anki\qt\aqt\browser.py", line 887, in onLoadNote
    self.refreshCurrentCard(editor.note)
  File "F:\anki\qt\aqt\browser.py", line 884, in refreshCurrentCard
    self._renderPreview(False)
  File "F:\anki\qt\aqt\browser.py", line 1576, in _renderPreview
    self._previewer.render_card(cardChanged)
  File "F:\anki\qt\aqt\previewer.py", line 136, in render_card
    print('calling', time.time(), "\n", "".join( traceback.format_stack() ) )
2020-05-27 14:41:07 -03:00
sandersantema
8f993c8e31 remove unused variable 'w' from '_onHtmlEdit' 2020-05-27 12:04:49 +02:00
sandersantema
3407fb7b2b add saveGeom and restoreGeom to htmlEditor 2020-05-27 12:04:00 +02:00
Damien Elmes
835d1eb994
Merge pull request #637 from BlueGreenMagick/field-drag-drop-fix
fix drag drop field repositioning
2020-05-27 10:24:07 +10:00
Damien Elmes
4c89d0cc5e
Merge pull request #636 from BlueGreenMagick/typing-contextmenuevent
add evt type for contextMenuEvent method
2020-05-27 10:23:44 +10:00
Damien Elmes
7ef884d3b9
Merge pull request #635 from BlueGreenMagick/typing
add typehint for eventFilter method
2020-05-27 10:23:28 +10:00
Damien Elmes
d04699ad06 try mpv on Windows again
https://github.com/ankitects/anki/pull/621
2020-05-27 09:21:41 +10:00
Damien Elmes
c37390ae14 apply mpv fix
c0d9544812
2020-05-27 09:19:20 +10:00
Damien Elmes
97618564f4 fix typechecking breaking with latest mypy_protobuf
the change that caused it:
https://github.com/dropbox/mypy-protobuf/issues/118

This is more awkward to handle now, as the types are only available
at type-checking time. Python's static typing is such a mess :-(
2020-05-27 09:14:02 +10:00
BlueGreenMagick
ce512014f2 do nothing if dropPos == idx
since such move won't change the field position
and when trying to move the field below itself
may lead to it being moved below the next field
2020-05-26 18:59:53 +09:00
BlueGreenMagick
6f3ebafc46 fix drag drop field repositioning 2020-05-26 18:27:38 +09:00
BlueGreenMagick
8f4469d5e9 add evt type for contextMenuEvent method 2020-05-26 17:12:39 +09:00
BlueGreenMagick
99663be358 add typehint for eventFilter method 2020-05-26 17:08:55 +09:00
Damien Elmes
f9f07a7d55 allow hook to modify search text 2020-05-25 16:54:57 +10:00
Damien Elmes
6b05272ed4
Merge pull request #633 from hgiesel/dconf_hooks
Add three deck config hooks
2020-05-24 09:53:22 +10:00
Damien Elmes
38508c3ad7 use keyword args for calls with more than one argument 2020-05-24 09:12:47 +10:00
Damien Elmes
89dde3aeb0 migrate the remaining methods 2020-05-24 08:36:50 +10:00
Henrik Giesel
788a3eeced Satisfy black reformatter 2020-05-23 11:14:52 +02:00
Damien Elmes
081a61a438 more methods 2020-05-23 14:01:36 +10:00
Henrik Giesel
2074ffcf51 Add three deck config hooks
- gui_hooks.deck_conf_did_add_config
- gui_hooks.deck_conf_will_remove_config
- gui_hooks.deck_conf_will_rename_config
2020-05-22 21:24:05 +02:00
Damien Elmes
175afa9fee migrate more methods to service 2020-05-22 22:09:33 +10:00
Damien Elmes
58a243aa6c EMPTY_CARDS should not be translatable 2020-05-22 11:45:14 +10:00
Damien Elmes
6144317736 hook expected an int, not a str 2020-05-22 11:27:40 +10:00
Damien Elmes
cecf363c38 fix custom study not saving 2020-05-22 11:25:11 +10:00
Damien Elmes
0bf4fe400a fix deletion of decks; allow deleting cards from default
https://anki.tenderapp.com/discussions/beta-testing/1967-2126-189-g7384df8f-crash-at-note-types-fields-save#comment_48353232
2020-05-22 11:24:56 +10:00
Damien Elmes
9baa8530d5 move deck/notetype update hooks to gui
We need to migrate away from firing hooks in libanki, since libanki
methods may be running on a background thread, and hook consumers
typically expect the code to run in the main thread. We could document
it, but it would frequently be forgotten about, and could lead to
crashes.

https://anki.tenderapp.com/discussions/ankidesktop/41748-qobject-cannot-create-children-for-a-parent-that-is-in-a-different-thread-when-hitting-the-save-button-on-clayoutpy-window
2020-05-22 10:47:14 +10:00
Damien Elmes
16eceb5260 show 'changes saved' in parent window 2020-05-22 10:43:41 +10:00
Damien Elmes
9358c78bad show message when search fails 2020-05-22 10:43:28 +10:00
Damien Elmes
a4efd9910e monospace font in clayout 2020-05-22 09:58:20 +10:00
Damien Elmes
a3ac96443b use context manager in retrieveURL 2020-05-21 10:58:42 +10:00
Damien Elmes
d5d5ca9c3d clearer variable names in retrieveURL 2020-05-21 09:22:34 +10:00
Damien Elmes
8300d8d85c
Merge pull request #630 from evandroforks/close_http_client_connections
Fixed HttpClient session not being closed
2020-05-21 09:17:07 +10:00
evandrocoan
14692fb345 Added missing Anki icon to debug window 2020-05-20 19:21:31 -03:00
evandrocoan
b388c43454 Fixed HttpClient session not being closed 2020-05-20 19:20:41 -03:00
Damien Elmes
300fba156e fix shortcut keys in clayout 2020-05-21 07:51:35 +10:00
Damien Elmes
12b9a7e368 left-align radio buttons in clayout 2020-05-20 19:56:53 +10:00
Damien Elmes
e2bb5cd14a update missed storage._Collection references 2020-05-20 19:45:46 +10:00
Damien Elmes
50fdf9b03d storage->collection 2020-05-20 17:58:28 +10:00
Damien Elmes
c49c378296 move storage logic into collection.py; fix export bug
https://anki.tenderapp.com/discussions/ankidesktop/41495-using-file-export-closes-the-collection-on-mwcoldb-if-the-browser-window-is-open
2020-05-20 17:43:34 +10:00
Damien Elmes
eb0c9f6e0a fix progress bar getting stuck on image paste 2020-05-20 16:12:41 +10:00
Damien Elmes
6ae55a7a77 deprecate removeTempNote() 2020-05-20 15:01:05 +10:00
Damien Elmes
8da69c5d39 fix HTML editor in add screen 2020-05-20 14:59:22 +10:00
Damien Elmes
8f207cc900 drop mw.weakref usage in models.py for now
https://anki.tenderapp.com/discussions/beta-testing/1967-2126-189-g7384df8f-crash-at-note-types-fields-save
2020-05-20 13:53:34 +10:00
Damien Elmes
4fd8a4cf2d update empty cards hook
Closes #515
2020-05-20 13:41:09 +10:00
Damien Elmes
9876c30d89 tidy up Qt import 2020-05-20 13:38:55 +10:00
Damien Elmes
e564a47504
Merge pull request #625 from evandroforks/fixed_check_box_called_twice
Fixed clayout.py rendering the contents twice when clicked
2020-05-20 12:48:48 +10:00
Damien Elmes
1d4fd50d8b
Merge pull request #626 from evandroforks/fix_previewer_button
Fixed previewer button not resetting the state when the preview
2020-05-20 12:48:17 +10:00
evandrocoan
64a90a457c Fixed clayout.py rendering the contents twice when clicked
https://stackoverflow.com/questions/36808257/pyqt-radiobutton-ischecked-is-executed-twice
2020-05-19 20:17:20 -03:00
evandrocoan
3ea6f685b2 Added missing Anki icon to qt/aqt/previewer.py 2020-05-19 19:43:18 -03:00
evandrocoan
3dcfd57b07 Fixed previewer button not resetting the state when the preview
window is closed by its X button
2020-05-19 19:24:54 -03:00
evandrocoan
200bad3714 Explicitly close the importer file descriptor
https://github.com/ankitects/anki/pull 613
2020-05-18 15:54:20 -03:00
evandrocoan
efb62b9528 Add missing close file descriptors using context managers 2020-05-18 15:54:20 -03:00
Damien Elmes
31ceb5d730 simplify the migration popup
Avoid presenting the user with a wall of text they may not understand,
default to proceeding, and quit if the user cancels.
2020-05-18 20:15:59 +10:00
Damien Elmes
a53aac40f8
Merge pull request #610 from evandroforks/ask_confirmation_before_moving_anki_collection
Ask user confirmation before moving the Anki directory
2020-05-18 19:44:27 +10:00
Damien Elmes
e323a8f902
Merge pull request #619 from evandroforks/fix_empty_sound_tags
Also fix legacy.py::anki.sound._soundReg accepting empty tags
2020-05-18 19:31:22 +10:00
Damien Elmes
fe196bc1df
Merge pull request #620 from evandroforks/remove_unused_var
Remove unused t = time.time() variable on qt/aqt/browser.py
2020-05-18 19:20:08 +10:00
Damien Elmes
1fc951471c fix python3.7 lint issue 2020-05-18 18:08:57 +10:00
Damien Elmes
8bd5d756e2 bump version 2020-05-18 12:50:20 +10:00
Damien Elmes
252eb3a444 fix shared deck conf warning 2020-05-17 14:37:59 +10:00
Damien Elmes
8b57a61746 use deck tree for new/review count calculation
- wins back the performance lost by the decks and dconf not being
in memory, and the overhead of serializing data for DB calls
- card counts are no longer capped to 1000
- learn counts are currently still calculated separately - can't merge
v1 counts without changing the existing behaviour
- partially rendering the tree may yield more savings
2020-05-16 20:28:03 +10:00
Damien Elmes
8eada2b57d add find_deck_in_tree() 2020-05-16 13:05:20 +10:00
Damien Elmes
578b60c104 save profile stats to file instead of generating report
Can use an external tool like snakeviz to query them after a run.
2020-05-16 12:53:01 +10:00
Damien Elmes
f6767d1cff fix lint issues 2020-05-16 12:20:20 +10:00
Damien Elmes
0c340eba64 fix+speed up deck list from Filters button
I don't think it makes much sense to keep these lists that largely
duplicate the sidebar functionality, but they remain for now.
2020-05-16 11:54:08 +10:00
Damien Elmes
f2086fc2e3 switch to new deck tree in deck browser
Saves us having to look up collapsed/filtered as we render, and gives
us type completion.
2020-05-16 10:52:14 +10:00
Damien Elmes
75d3eebafe drop usage of nameMap in deckbrowser
It was unnecessary, and being called multiple times as we recursed
downwards, slowing things down.
2020-05-16 10:02:08 +10:00
Damien Elmes
83adfb60cf avoid duplicate reset in overview 2020-05-15 21:54:56 +10:00
Damien Elmes
964a69e54e handle default deck and filtered deck suppression in the backend 2020-05-15 21:21:10 +10:00
Damien Elmes
2ac33500eb fetch stock notetypes from backend 2020-05-15 17:08:24 +10:00
Damien Elmes
f650e5557f add back card deletion count
cheaper to look up now that there's an index on notes.mid
2020-05-15 15:28:07 +10:00
Damien Elmes
00db72e365 show (Deck) when card hasn't been added 2020-05-15 15:01:28 +10:00
Damien Elmes
ed52a4dc3f when previewing cards, use the default deck for now
Replay code needs to be able to retrieve deck options. We should
probably use the current deck or pass it in in the future.
2020-05-15 14:50:57 +10:00
Damien Elmes
68e1303880 update replay suppression in clayout 2020-05-15 14:26:00 +10:00
Damien Elmes
46c363d4aa track changes in fields dialog as well
And avoid bumping schema until user actually saves, but warn at
start.
2020-05-15 13:59:44 +10:00
Damien Elmes
f1c5c88c10 no longer need to check addNote's return value 2020-05-14 21:59:42 +10:00
Damien Elmes
24ffb6ab76 check for empty cloze cards when rendering as well 2020-05-14 21:56:45 +10:00
Damien Elmes
782911471b add "fill empty" checkbox 2020-05-14 20:58:45 +10:00
Damien Elmes
9a222e620a update Add Field button 2020-05-14 18:01:15 +10:00
Damien Elmes
c5d574e9f4 use group box instead of tabs in card layout screen 2020-05-14 17:26:40 +10:00
Damien Elmes
5167bb57be start reworking card layout screen
- front/back/css shown in tabs
- front/back preview switchable; only one webview needs to be loaded
- dropdown to select cloze number in preview
- search box to search in front/back/css
2020-05-14 15:24:29 +10:00
Damien Elmes
f23eb350e4 drop availOrds(), and use backend for getting cloze numbers 2020-05-14 12:14:00 +10:00