Commit Graph

2620 Commits

Author SHA1 Message Date
Damien Elmes
0e931808c9 translations no longer require an open collection 2020-02-23 14:57:02 +10:00
Damien Elmes
4430c67069 rework Fluent handling
- all .ftl files for a language are concatenated into a single file
at build time
- all languages are included in the binary
- external ftl files placed in the ftl folder can override the
built-in definitions
- constants are automatically generated for each string key
- dropped the separate StringsGroup enum
2020-02-23 13:22:50 +10:00
Arthur Milchior
bb86c9dbd6 should(default)deckbedisplayed in snake case 2020-02-22 04:08:01 -08:00
Arthur Milchior
927749d7a6 Remove options for all/allNames
Instead, we always see default deck if it has a child
As indicated in https://github.com/ankitects/anki/pull/452
2020-02-22 04:03:42 -08:00
Arthur Milchior
1126ae293e forceDefault to force_default 2020-02-22 04:01:42 -08:00
Damien Elmes
42939fe0e4 remove unused import 2020-02-21 19:58:54 +10:00
Damien Elmes
49fe080636 add studied_today(), move to statistics.ftl 2020-02-21 18:01:15 +10:00
Damien Elmes
f4330cd213 simplify interval display in review log 2020-02-21 15:29:38 +10:00
Damien Elmes
2fc15d0d3a add non-abbreviated timespan translation; update existing short=True calls
- drop the '5m3s' special casing done in the card stats screen, and
just use decimals
- change alignment of the review log so that the non-abbreviated
spans are easier to read
2020-02-21 15:29:38 +10:00
Damien Elmes
598226a5c0 possible fix for race conditions in the sound code
https://anki.tenderapp.com/discussions/ankidesktop/39030-erro-ao-adicionar-arquivo-de-udio

the lock should at least ensure _process doesn't disappear in the
middle of our logic, and the longer wait should reduce the chances
of .stop() timing out and allowing multiple audio files to play

Not very happy with the current approach, as in the timeout case
you have multiple threads competing to access the same data
2020-02-21 15:14:09 +10:00
Damien Elmes
abe9f50c14 Revert "Merge pull request #452 from Arthur-Milchior/noDefaultDeckInBrowser"
This reverts commit b93d30795c, reversing
changes made to e16d6055c1.

More discussion required on https://github.com/ankitects/anki/pull/452
2020-02-21 12:27:39 +10:00
Damien Elmes
b3585502cd
Merge pull request #448 from glutanimate/top_toolbar_links_hook
Add a hook for adding links to the top toolbar
2020-02-21 12:18:25 +10:00
Damien Elmes
b93d30795c
Merge pull request #452 from Arthur-Milchior/noDefaultDeckInBrowser
No default deck in browser
2020-02-21 12:10:36 +10:00
Glutanimate
496548d886 Refactor ToolbarLink dataclass into create_link arguments
ToolbarLink was more of a vestigial left-over from an interim
implementation. This change simplifies link addition and brings
it closer in line with adding buttons in the editor screen
2020-02-20 18:22:31 +01:00
Glutanimate
075a2792f5 Restore gui_hooks changes 2020-02-20 17:05:27 +01:00
Glutanimate
de333cd503 Add ids to all link elements 2020-02-20 16:34:02 +01:00
Glutanimate
a7d56561ba Rename CenterLink to more generic ToolbarLink and add inline docs 2020-02-20 16:30:22 +01:00
Glutanimate
dfefd67508 Update 'top_toolbar_did_init_links' hook 2020-02-20 16:23:33 +01:00
Glutanimate
e13fee5aa3 Refactor center link creation and link handler registration
Uses a CenterLink dataclass to describe individual links, and transforms
them into HTML using create_link, which may also be used by add-ons.
2020-02-20 16:15:50 +01:00
Glutanimate
33f7d7ed50 Merge branch 'master' into top_toolbar_links_hook 2020-02-20 15:17:48 +01:00
Arthur Milchior
0f18e9ee4b no default in left-side browser 2020-02-19 02:42:04 -08:00
Arthur Milchior
bdcd111d72 Replace g[idx] by variable name 2020-02-19 02:41:57 -08:00
Arthur Milchior
a0bd232cfd remove default deck from filter list 2020-02-19 02:41:56 -08:00
Damien Elmes
d0ec26709b pin fcntl, which went missing on Linux in a recent update 2020-02-19 19:59:31 +10:00
Arthur Milchior
bdf10d9649 method shouldBeDisplayed 2020-02-19 01:56:33 -08:00
BlueGreenMagick
8318cb8e0c
fix typo
<font> tag was closed by </span>
2020-02-19 17:46:12 +09:00
Damien Elmes
e0951e4cfe add 'new #' prefix to new cards in the due column 2020-02-18 11:16:15 +10:00
Damien Elmes
8c80e46d80 fix card info screen 2020-02-18 10:59:24 +10:00
Damien Elmes
0309113b0a fix legacy filter return values being ignored 2020-02-18 09:12:16 +10:00
Damien Elmes
3ea272989b fix negative number in compat message 2020-02-18 08:27:47 +10:00
Damien Elmes
25ecb5d1f0
Merge pull request #450 from Arthur-Milchior/selectCardInBrowserFromReviewer
Current card get selected in browser
2020-02-18 08:27:34 +10:00
Damien Elmes
c5156a0f6b
Merge pull request #449 from glutanimate/html-content-section-hooks
Add hooks for modifying HTML body sections in the deck browser and overview screens
2020-02-18 08:20:01 +10:00
Glutanimate
775765ff4f Complete OverviewContent docs 2020-02-17 16:53:47 +01:00
Glutanimate
f7ae2fa1f7 Add overview_will_render_content hook 2020-02-17 16:49:21 +01:00
Glutanimate
8ff1a2e770 Bundle individual section hooks together into one
Uses new dataclass 'DeckBrowserContent'
2020-02-17 16:26:21 +01:00
Arthur Milchior
8ecd606ada Current card get selected in browser
I'm pretty sure it was the way it worked before. I'm surprised that
it's not the case anymore.

If you open the browser from the reviewer, the current card get
selected if it exists. The current note is still entirely displayed.

Personally, I want to know easily which is the current card. Opening
the browser is the easiest way to do it; assuming I can see the
current card selected
2020-02-17 04:10:47 -08:00
Damien Elmes
ca0df4929d add fallback for tr if collection not open
When syncing media on close, the collection may be closed before
media syncing completes.

A better solution in the future will be decouple translations from
the collection object.
2020-02-17 17:39:01 +10:00
Damien Elmes
1524e7dcac split "Due" into three different contexts for translators 2020-02-17 14:41:01 +10:00
Damien Elmes
d612aa0945 localize some error messages 2020-02-17 11:38:22 +10:00
Damien Elmes
67a741958c use new i18n infrastructure for more media check / media sync strings 2020-02-17 10:18:20 +10:00
Damien Elmes
f6a881f950 pass progress back as translated string(s) 2020-02-17 08:40:17 +10:00
Damien Elmes
6c9e9eb330 drop unused threadLocal and noHint i18n code 2020-02-17 08:40:17 +10:00
Damien Elmes
97b9b94fc7 use new file locations for translations
- translation files are now stored in a separate repo, and
use a layout compatible with Pontoon
- normalize the language code in aqt, so that old config settings
and command line arguments are correctly handled
- store Qt and gettext translations in separate subfolders
- remove Crowdin scripts
2020-02-17 08:40:17 +10:00
Damien Elmes
f6ddcd81df fix sync deauth 2020-02-17 08:40:17 +10:00
Damien Elmes
5c8e3df612 include report in MediaCheckOutput 2020-02-17 08:40:17 +10:00
Damien Elmes
4c0f216df2 use media.trash for unused media deletion as well 2020-02-17 08:40:17 +10:00
Damien Elmes
4fc898ec1e accept clicks on the progress dialog close button when updating 2020-02-17 08:40:17 +10:00
Damien Elmes
0c27126817 fix latex render progress; display more frequently 2020-02-17 08:40:17 +10:00
Damien Elmes
49cda5ffbb rename aqt/media.py to mediacheck.py 2020-02-17 08:40:17 +10:00
Damien Elmes
2d0499580f if latex fails to render in bulk, show the user the problem 2020-02-17 08:40:17 +10:00
Damien Elmes
9df2a08cb0 new render_all_latex() + gui button; remove some old code 2020-02-17 08:40:17 +10:00
Damien Elmes
c347c9aee8 sort media list 2020-02-17 08:40:17 +10:00
Damien Elmes
6f158c8555 plug new media check in 2020-02-17 08:40:17 +10:00
Damien Elmes
aa832e9117 backend stores media folder/db locations; don't need to pass them in 2020-02-17 08:40:17 +10:00
Damien Elmes
7ae6244f6a log media DB change registration progress, and allow aborting it 2020-02-17 08:40:17 +10:00
Damien Elmes
5fe1bfc5b4 simplify code by accumulating stats at the source 2020-02-17 08:40:17 +10:00
Damien Elmes
98279add15 defer errors on upload to media check 2020-02-17 08:40:17 +10:00
Damien Elmes
d38c2c12d5 autosync media every ~15 minutes 2020-02-17 08:40:17 +10:00
Damien Elmes
12d009e503 autosync media on close 2020-02-17 08:40:17 +10:00
Damien Elmes
59a7993011 autosync media on startup 2020-02-17 08:40:17 +10:00
Damien Elmes
fdd850c0f0 add extra hook for media sync start/stop 2020-02-17 08:40:17 +10:00
Damien Elmes
de27cf2a63 if toolbar refreshed, make sure not to clear syncing 2020-02-17 08:40:16 +10:00
Damien Elmes
6a64c8dfcc use enums for some common errors 2020-02-17 08:40:16 +10:00
Damien Elmes
c329759a88 catch DB errors in sync 2020-02-17 08:40:16 +10:00
Damien Elmes
ec9abf1ce5 pass in endpoint 2020-02-17 08:40:16 +10:00
Damien Elmes
0c124188cd catch network errors 2020-02-17 08:40:16 +10:00
Damien Elmes
93c768cab9 move more logic into mediasync.py, handle auth errors 2020-02-17 08:40:16 +10:00
Damien Elmes
347ac80086 remove unused code 2020-02-17 08:40:16 +10:00
Damien Elmes
cb0ce4146f show spinner when media sync active, click to reveal dialog 2020-02-17 08:40:16 +10:00
Damien Elmes
ea4de9a6de connect media sync progress to Python, add a progress dialog 2020-02-17 08:40:16 +10:00
Damien Elmes
4096d21c07 add add_file() and write_data() 2020-02-17 08:40:16 +10:00
Damien Elmes
57b678a939 put head text after css/js imports so it can override them
as discussed in PR #438
2020-02-17 08:38:59 +10:00
Glutanimate
d02de28f21 Add deck_browser_will_render_section hook
Allows add-on authors to specifcally target and modify individual
sections of the deck browser HTML body at string composition time.
2020-02-16 19:29:01 +01:00
Damien Elmes
0ec3bbe1af
Merge pull request #447 from glutanimate/browser-sidebar-tree-hooks
Add browser_will_build_tree filter
2020-02-16 08:36:28 +10:00
Damien Elmes
990a6c394b
Merge pull request #445 from glutanimate/new-html-view-hooks-2
Allow add-on authors to easily inject their own content into Anki's web views – take 3
2020-02-16 08:32:34 +10:00
Glutanimate
621e634bb2 Add a convenience function for creating toolbar links
Similar to aqt.editor.Editor.addButton
2020-02-15 23:22:41 +01:00
Glutanimate
18ae9e612e Add top_toolbar_did_init_links hook
Allows extending the links in the top toolbar, in a similar
fashion to editor_did_init_shortcuts
2020-02-15 23:21:23 +01:00
Glutanimate
a8aac761f1 Add browser_will_build_tree filter
Allows add-ons to populate the browser sidebar tree with their own
items, and/or take over specific construction stages in their
entirety
2020-02-15 21:03:15 +01:00
Glutanimate
3637f466b4 Update documentation for webview_will_set_content and WebContent 2020-02-15 15:03:58 +01:00
Glutanimate
0e5dea4c9f Assume that web assets without a specified subpath are under /_anki
Maintains compatibility with existing add-ons
2020-02-15 15:03:43 +01:00
Damien Elmes
f7ebb8c28f
Merge pull request #433 from Arthur-Milchior/ints
Constants
2020-02-14 08:37:31 +10:00
ijgnd
d0ea2ad749
small fix: store return value for hook in preview 2020-02-13 18:51:11 +01:00
Glutanimate
c86e55d451 Fix "js" parameter type 2020-02-12 22:20:30 +01:00
Glutanimate
c839cda19f Fix missing "Optional" import and lint 2020-02-12 22:15:44 +01:00
Glutanimate
5bd38ce0a5 Pass CardInfoDialog context to stdHtml 2020-02-12 22:12:45 +01:00
Glutanimate
bbd667b0ff Add webview_will_set_content hook & update supporting code accordingly 2020-02-12 22:00:13 +01:00
Glutanimate
df2a7b06ef Refactor web view title setting and add titles to all web views
Simplifies debugging web views
2020-02-12 21:03:11 +01:00
Damien Elmes
1c677bb9d4 night mode fix for find dupes screen 2020-02-12 08:28:33 +10:00
Damien Elmes
3425bee968 provide easy access to browser from preview/dupes handlers 2020-02-12 08:28:21 +10:00
Damien Elmes
2c4c8d4ab0 tweak wording 2020-02-12 08:14:16 +10:00
Arthur Milchior
a087d0e4c4 Adding export option in Browser 2020-02-11 10:50:59 -08:00
Arthur Milchior
617043f632 browser._exporting 2020-02-11 10:50:59 -08:00
Arthur Milchior
272db65f0a Replace list of deck by "Browser Selection" 2020-02-11 10:50:59 -08:00
Arthur Milchior
a6567da259 if cards are selected, default is apkg 2020-02-11 10:50:59 -08:00
Arthur Milchior
d8669835d8 aqt.exporter takes extra argument cid 2020-02-11 10:49:13 -08:00
Damien Elmes
af26922493 fix error when double-clicking open profile button
https://anki.tenderapp.com/discussions/ankidesktop/38670-bug-when-auto-sync-is-enabled-and-open-profile-button-is-double-clicked
2020-02-10 09:32:56 +10:00
Damien Elmes
072b64c819 work around HTML editor race condition on macOS
https://anki.tenderapp.com/discussions/beta-testing/1785-cant-see-html-boxes
2020-02-10 09:25:11 +10:00
Damien Elmes
7fcb6b5672 pass instance to webview_did_receive_js_message instead of string 2020-02-09 08:59:29 +10:00
Damien Elmes
5bd67509ae
Merge pull request #441 from Arthur-Milchior/hookRefreshOverview
Allow to change main window when overview/deckbrowser is shown
2020-02-09 08:02:41 +10:00
Arthur Milchior
75a8ef832b Allow to change main window when overview/deckbrowser is shown 2020-02-08 08:09:12 -08:00
Damien Elmes
c8b794e6cc formatting 2020-02-07 17:55:26 +10:00
Damien Elmes
5b01f0dad1 more legible graph colours in night mode 2020-02-07 13:21:46 +10:00
Arthur Milchior
fc5c1fd16a correct missing french translation 2020-02-05 20:48:30 -08:00
Arthur Milchior
35c8f21eb6 Reformatting through black 2020-02-04 08:47:36 -08:00
Arthur Milchior
957f0c8e8b QUEUE and TYPE day learn, relearn 2020-02-04 08:47:36 -08:00
Arthur Milchior
45bf763238 QUEUE_TYPE_REV and CARD_TYPE_REV 2020-02-04 08:47:36 -08:00
Arthur Milchior
69436643fe CARD_TYPE_LRN and QUEUE_TYPE_LRN 2020-02-04 08:47:35 -08:00
Damien Elmes
3f3c1255bf clearer variable names 2020-02-04 17:10:20 +10:00
Damien Elmes
2ccece86a7 minor wording tweak 2020-02-04 17:06:41 +10:00
Damien Elmes
8dd75edaa9 default human_version to None 2020-02-04 17:03:21 +10:00
Damien Elmes
d200d33aa5
Merge pull request #435 from ijgnd/debug2
Extend Copy Debug Info and add human_version to manifest.json
2020-02-04 17:01:50 +10:00
ijgnd
62527f0b54 about.py - some type hints 2020-02-04 04:16:51 +01:00
ijgnd
6e1996f701 Extend Copy Debug Info 2020-02-04 04:16:51 +01:00
ijgnd
de9331a03e add human_version to manifest.json
edit 7586c67 add human_version to manifest.json
2020-02-04 04:16:12 +01:00
Arthur Milchior
a1cc0787d2 QUEUE_TYPE_NEW and CARD_TYPE_NEW 2020-02-03 02:24:37 -08:00
Arthur Milchior
25c579926b radioCram 2020-02-03 02:24:37 -08:00
Arthur Milchior
fc7636c194 radioPreview 2020-02-03 02:24:37 -08:00
Arthur Milchior
7e0b4522fb radioAhead 2020-02-03 02:24:37 -08:00
Arthur Milchior
20bb24a641 radioForgot 2020-02-03 02:24:37 -08:00
Arthur Milchior
c3bd167958 radiorRev 2020-02-03 02:24:37 -08:00
Arthur Milchior
da39ef378c radioNew 2020-02-03 02:24:37 -08:00
Damien Elmes
5d91580ce2 add option to disable audio interrupting 2020-02-03 08:55:14 +10:00
Damien Elmes
ab1f2429a7 formatting 2020-02-02 13:09:02 +10:00
Damien Elmes
91326ec6d9 only apply padding fix to stats screen
It was breaking the display of dialogs like the filtered deck screen
2020-02-02 13:07:24 +10:00
Damien Elmes
3c48cbff6f more contrast on buttons and scrollbars 2020-02-02 12:53:35 +10:00
Damien Elmes
dd9812c7ed match fusion bars to webview bars, bump size again 2020-02-02 12:25:07 +10:00
Damien Elmes
92888345fb fix gridline color in macOS dark mode
https://anki.tenderapp.com/discussions/beta-testing/1752-beta7-nightmode-issues-on-mac
2020-02-02 12:01:27 +10:00
Damien Elmes
05be20f834 make pylint happy 2020-01-31 14:30:41 +10:00
Damien Elmes
c70badcd5a only import darkdetect on a Mac 2020-01-31 14:14:54 +10:00
Damien Elmes
8b68512e0e when dark mode not active, match fusion buttons 2020-01-31 13:39:52 +10:00
Damien Elmes
b8ad45c4e4 redraw top toolbar when deck list refreshed
Just a hack that allows users to click on Decks to adjust the colour
after a macOS theme change.
2020-01-31 13:31:31 +10:00
Damien Elmes
70d085f475 ignore dark mode when running from source, as it doesn't work 2020-01-31 13:30:35 +10:00
Damien Elmes
598ffbd340 maintain separate icon cache for light and dark themes 2020-01-31 13:30:12 +10:00
Damien Elmes
c42e118339 use night mode when dark mode active, using standard macOS theme 2020-01-31 13:15:08 +10:00
Damien Elmes
d48038cc29 ignore immediate=True in progress dialog
Instead, set the busy cursor immediately to give the user feedback,
but defer popup for at least 500ms. This will hopefully address the
white flash in night mode on Windows, and prevent progress dialogs
from rapidly appearing and disappearing for short operations.
2020-01-31 08:47:05 +10:00
Damien Elmes
083e4a0b66 drop the extraneous svg group 2020-01-31 07:23:35 +10:00
Damien Elmes
23c6cafb94 add compat soundLink selector back 2020-01-31 07:01:22 +10:00
Damien Elmes
2d5cab6758 add .night_mode as well
Please report if this causes any regressions.
2020-01-31 07:00:01 +10:00
Damien Elmes
fb696f3e3b use SVG for the play icon, and reduce the default size to 40px 2020-01-28 10:11:29 +10:00
Damien Elmes
7f2109cf04 tolerate branch idx out of range
Branches can't be deleted at the moment, but this may change in the
future.
2020-01-27 17:59:40 +10:00
Damien Elmes
b76f153ffd rework update checks to match latest AnkiWeb API 2020-01-27 17:01:09 +10:00
Damien Elmes
45e8a9a364 fix +ve max versions being marked as disabled 2020-01-27 16:58:12 +10:00
Damien Elmes
9933720994 don't do HTML filtering when pasting urls/text/images
fixes
https://anki.tenderapp.com/discussions/ankidesktop/37752-anki-21-wont-play-audio-files-with-a-blank-in-the-title
2020-01-26 19:13:31 +10:00
Damien Elmes
bfb1d5c5f5 fix pylint 2020-01-26 18:57:32 +10:00
Damien Elmes
09e59d7148 style tags area like fields 2020-01-26 18:47:28 +10:00
Damien Elmes
91c2825551 add a (perhaps temporary) tts-voices: filter to show all available engines 2020-01-26 17:35:07 +10:00
Damien Elmes
21cbb5a766 support speed control in tts tags 2020-01-26 14:31:07 +10:00
Damien Elmes
e4bbba4ec1 fix webview button alignment on Linux
caused by the height: specification inside webview.py
2020-01-26 10:18:24 +10:00
Damien Elmes
e2e7128385 fix tags area and stats buttons in night mode 2020-01-26 09:13:38 +10:00
Damien Elmes
3b8f851854 fix autoplaying of audio in preview screen, and drop extend_and_play() 2020-01-25 16:02:34 +10:00
Damien Elmes
218c033104 respond to play button clicks in preview screen + card layout screen 2020-01-25 16:02:21 +10:00
Glutanimate
68c5fd50f9 Equip Reviewer._showAnswer with hooks covering common add-on usages 2020-01-24 15:36:05 +01:00
Damien Elmes
f260cfa07e
Merge pull request #428 from Arthur-Milchior/unusedOptional
"unused" variable become optional.
2020-01-24 17:28:47 +10:00
Damien Elmes
b4c8eaf4bb support min/max add-on versions in download and ankiaddon manifest 2020-01-24 17:25:52 +10:00
Damien Elmes
f6ef553ba5 move strip_av_refs() into anki.sound 2020-01-24 15:48:40 +10:00
Arthur Milchior
66e1f876d7 "unused" variable become optional.
Adding this parameter broke one of my add-on, see
https://github.com/Arthur-Milchior/anki-keep-model-in-add-cards/issues/1

Since those parameters are not used, setting them to None by default,
as was done in some other method, seems acceptable
2020-01-23 21:46:42 -08:00
Damien Elmes
17ebdfc099 extract and flag AV tags as part of the render process
We can now show replay buttons for the audio contained in {{FrontSide}}
without having to play it again when the answer is shown.

The template code now always defers FrontSide rendering, as it wasn't
a big saving, and meant the logic had to be implemented twice.
2020-01-24 11:06:11 +10:00
Damien Elmes
e3fb184a84 fix night mode tooltips 2020-01-24 07:55:14 +10:00
Damien Elmes
03a8f0e73b fix mpv failing to load 2020-01-24 07:06:59 +10:00
Damien Elmes
9804105928 fix white background in day mode 2020-01-23 18:36:42 +10:00
Damien Elmes
406c58a109 inject legacy funcs referencing aqt in GUI load 2020-01-23 18:20:19 +10:00
Damien Elmes
4a25853c57 fix inconsistently sized buttons and add platform classes 2020-01-23 18:05:55 +10:00
Damien Elmes
b9ee7f49d8 don't wait as long for player to stop 2020-01-23 17:27:07 +10:00
Damien Elmes
d2336f3829 iconFromRef() compat 2020-01-23 17:27:07 +10:00
Damien Elmes
5a79bc69b8 fix audio displaying console window on Windows 2020-01-23 17:27:07 +10:00
Damien Elmes
982aca0c99 fix white flash on webview load 2020-01-23 17:27:07 +10:00
Damien Elmes
7dcbc7efec basic night mode support
Forces the Fusion theme when running night mode, so we don't need
to work around platform themes that don't respond to the defined
palette.

Feedback/suggestions on the chosen colours welcome - _vars.scss is the
file to change if you want to experiment with adjustments.
2020-01-23 17:27:07 +10:00
Damien Elmes
95b497ccf0 handle spaces in voices, add platform prefix 2020-01-22 17:50:08 +10:00
Damien Elmes
3f3a8fc4ab move ignore statements for python 3.7
sigh :-(

https://github.com/python/mypy/issues/3251#issuecomment-490298556
2020-01-22 16:54:18 +10:00
Damien Elmes
0ad6e8b58e make pylint happy 2020-01-22 15:37:58 +10:00
Damien Elmes
cfa0f65311 add a hook for when playback begins 2020-01-22 14:41:32 +10:00
Damien Elmes
6af7933084 make .command() behave the same way for mplayer and mpv 2020-01-22 14:11:25 +10:00
Damien Elmes
be3393fcb4 simplify taskman, and add .run_on_main() 2020-01-22 14:09:51 +10:00
Damien Elmes
8236f800ae add pause and seek forward/back shortcuts to review screen 2020-01-22 12:50:33 +10:00
Damien Elmes
d54f719558 add a webview_did_receive_js_message hook 2020-01-22 11:06:12 +10:00
Damien Elmes
b870abd2d4 include card ordinal in clayout 2020-01-22 10:28:10 +10:00
Damien Elmes
f92bb55c25 add option in prefs to hide replay audio buttons 2020-01-21 21:00:17 +10:00
Damien Elmes
fd95336933 mypy fixes 2020-01-21 20:42:06 +10:00
Damien Elmes
19b3a15146 formatting fixes 2020-01-21 20:39:25 +10:00
Damien Elmes
37d2a4d43c add a helper for caching generated files 2020-01-21 20:35:23 +10:00
Damien Elmes
b00a9010be when matching voices, need to check language matches too 2020-01-21 20:35:00 +10:00
Damien Elmes
ccd7150136 fix mpv args
https://anki.tenderapp.com/discussions/ankidesktop/38186-mpvprocesserror-unable-to-start-process
2020-01-21 19:29:50 +10:00
Damien Elmes
5351a5f396 compare only on rank, as voices may be subclassed 2020-01-21 18:33:14 +10:00
Damien Elmes
84711f8fe2 add Windows TTS support 2020-01-21 17:34:47 +10:00
Damien Elmes
7b3d701ad5 add replay buttons to reviewing screen 2020-01-21 14:47:03 +10:00
Damien Elmes
7504ef6857 make sure we don't mutate list passed to play_from_tags() 2020-01-21 14:43:33 +10:00
Damien Elmes
98802c9c9a deal with spaces in macOS voices like "Bad News" 2020-01-21 13:38:37 +10:00
Damien Elmes
2ac86ac400 add file-based TTS say implementation as well 2020-01-21 13:21:43 +10:00
Damien Elmes
c713683f63 add rank handling to TTS; parse TTS args in get_av_tags() 2020-01-21 12:41:37 +10:00
Damien Elmes
66e277e44b more TTS and sound work
- use provided language and voices when playing on Mac
- fix hang in waiting for termination
- allow players to return a rank for a given tag,
which will allow for the best matching player to be chosen
depending on the context (eg, prioritize one player for videos,
one tts player for certain voices, etc)
2020-01-21 11:34:25 +10:00
Damien Elmes
d4d16d35a8 spawn a new slave mode mplayer for each file
This solves a few problems:

- We no longer need to write temporary files to disk, as files
passed on the command line with non-Latin text can be read by mplayer.
- We no longer need to deal with mplayer processes left around in
the background that have failed to terminate.
- We don't need to deal with the added complexity that comes with
polling mplayer's status output to determine when the file has finished
playing.

Also add seek_relative(), toggle_pause() and shutdown() as optional
methods on AVPlayer.
2020-01-21 08:55:15 +10:00
Damien Elmes
01f3fd06d6 support interrupting say; fix race in simple player 2020-01-21 07:28:19 +10:00
Damien Elmes
1beae4f858 pass task manager in instead of creating a new one 2020-01-21 06:49:09 +10:00
Damien Elmes
0b5e22253b add .stop() to mpv 2020-01-21 06:45:32 +10:00
Damien Elmes
a6e6ffae06 get mpv slave mode working with new API
Also move the mpv-specific hooks into AVPlayer
2020-01-20 22:01:38 +10:00
Damien Elmes
d9c240afa2 minor tidyup to sound.py 2020-01-20 21:03:22 +10:00
Damien Elmes
7900f68051 don't need allSounds/stripSounds in qt's sound.py 2020-01-20 20:13:01 +10:00
Damien Elmes
02ec3f149c update qt/ to use the new API 2020-01-20 20:10:38 +10:00
Damien Elmes
caac4527e9 add a proof of concept TTS implementation on Mac 2020-01-20 20:08:19 +10:00
Damien Elmes
707ac587ec rework the audio player API and add a simpler player implementation
- the new API operates on AVTags so it can support TTS as well as
audio files
- added a simple "run for each file" implementation for mpv and mplayer.
- will need to test handling of unicode filenames on Windows
- the old mpv and mplayer code is currently not active
2020-01-20 20:07:11 +10:00
Damien Elmes
5084438a0b we can depend on pyaudio being available now that the code is in qt/ 2020-01-20 19:21:24 +10:00
Damien Elmes
b6ed84998d fix download log newlines 2020-01-19 16:46:24 +10:00
Damien Elmes
02145c7078 fix <br> remaining when image attached to empty field 2020-01-19 16:41:39 +10:00
Damien Elmes
5260e10f8f leave percent-escaped text from the editor alone
Originally added in d7339d9a27b8abd65fbcf85f809fb0089046986f;
unfortunately the change message does not describe why. Images
are handled separately, so it should theoretically not be required,
and keeping it in leads to garbled text when people include %
on their cards.

Latest report at https://anki.tenderapp.com/discussions/ankidesktop/38138-errors-in-conversion-of-latex-and-ea
2020-01-19 16:29:46 +10:00
Damien Elmes
766321d746 avoid setting provided_name if not in the json 2020-01-19 14:10:48 +10:00
Damien Elmes
5d9661cee5 update add-ons even if they're disabled
If a user enables an old add-on and restarts immediately, it won't have
had a chance to update, and may raise errors that could have been
prevented if the user was running the latest version.
2020-01-19 14:04:57 +10:00
Damien Elmes
6fe6a9e597 send point version when downloading
AnkiWeb will return a 404 if add-on does not support that version
2020-01-19 13:43:16 +10:00
Damien Elmes
66714260a3 automatically disable add-ons that have been marked as incompatible 2020-01-19 13:37:55 +10:00
Damien Elmes
a619130e5e add write_addon_meta(); use methods for derived values 2020-01-19 13:06:53 +10:00
Damien Elmes
54ca4efb8e use an object for add-on metadata instead of reading the dict directly
also, sort disabled add-ons to the end
2020-01-19 12:44:53 +10:00
Damien Elmes
ef8bb61fc3 AnkiRequestsClient -> HttpClient 2020-01-19 11:33:27 +10:00
Damien Elmes
09e47fbc36 check for add-on updates once a day 2020-01-19 11:31:09 +10:00
Damien Elmes
6134ae9ec6 refactor add-on downloading/installing/updating
- web requests done on a background thread
- easier to use outside of the addon dialog
- gets max point version info from AnkiWeb, which we can use in
the future
2020-01-19 10:37:15 +10:00
Damien Elmes
49bba16f24 fix display errors on macOS after updating add-ons 2020-01-19 10:33:51 +10:00
Damien Elmes
a47db0d609 add helper for background execution 2020-01-19 10:06:01 +10:00
Damien Elmes
3287e8c057 pass in a progress callback instead of http_data_did_[send|receive]
If a request is happening on a background thread, the GUI code
receiving requests on that thread can lead to a crash

Add-on downloading still to do.
2020-01-18 17:49:59 +10:00
Damien Elmes
0d1a25eb5b move AnkiRequestsClient into its own file
It should still be accessible via anki.sync as well.
2020-01-18 15:45:14 +10:00
Damien Elmes
d3cc63efb0 move types.py into the files responsible for each type 2020-01-17 10:17:33 +10:00
Damien Elmes
af5e60dffa fix formatting 2020-01-16 12:45:48 +10:00
Damien Elmes
4c0b7d37c9 option to invert paste handling in prefs 2020-01-16 12:36:04 +10:00
Damien Elmes
6906b366c0 fix preview button shortcut
Qt 'helpfully' erases any existing shortcuts when .setText() is called,
and as PyQt's generated forms set the text after the shortcut is set,
it gets lost.

https://anki.tenderapp.com/discussions/ankidesktop/38038-does-ctrlshiftp-doesnt-trigger-preview-in-browse
2020-01-16 12:31:02 +10:00
Damien Elmes
d5707a6388 don't change current deck if custom study fails to create
just a quick fix for now

https://anki.tenderapp.com/discussions/ankidesktop/37834-bug-custom-study-session-created-even-when-there-are-no-cards-that-match-selected-criteria
2020-01-16 11:26:22 +10:00
Damien Elmes
bf93731e49 revert to the old wrap() behaviour
wrap2() was introduced recently to try and resolve an issue where
styling outside of the wrapped section was getting lost. eg,

<b>some [text] etc</b>

When the user created a cloze deletion or added math tags to the [text]
part, the text ended up not being bold - the inner portion is displayed
without styling.

wrap2() used setFormat("inserttext", ...), which did fix that issue
- but it also introduced multiple new issues:

- any HTML inside the selected area, including newlines and images,
was lost
- the unicode entities inserted when creating a cloze deletion in
RTL mode end up inserted as plain text

For now, I'm just going to revert to the old behaviour. If anyone
has a suggestion for an approach that is able to preserve both the
inner formatting and the surrounding formatting, a pull request
or post on the forums would be appreciated!
2020-01-16 10:33:36 +10:00
Damien Elmes
391d849e51 fix invalid func name in unfocus hook
Don't know why mypy and pylint both failed to catch this :-(
2020-01-16 08:53:28 +10:00
Damien Elmes
886536d78f fix cases where we used the wrong type sig to connect to gui hook 2020-01-16 07:53:12 +10:00
Damien Elmes
8310cb7a0e add qconnect helper and some type hints
The type hints allow mypy to check the gui_hook calls, revealing a
bunch of places that are broken as they expect no arguments like the
legacy hooks.

To make mypy happy about PyQt's signal.connect(func), a qconnect()
helper has been added.
2020-01-16 07:41:23 +10:00
Damien Elmes
967b8a038d
Merge pull request #421 from ErezVolk/tag-changed-grooming
Tag modified grooming
2020-01-15 20:25:51 +10:00
Erez Volk
bd9aaa9296 Small fixes and tweaks to "Tag Modified":
- No need for the checkbox, as an unchecked box is equal to an empty
`QLineEdit`.
- The value was saved to the profile but not loaded.
- And the real pièce de résistance: I've figured out how to "Promote"
the `QLineEdit` to a `TagEdit`.

Hope you like it! :)
2020-01-15 10:46:05 +02:00
Damien Elmes
b09e7e8247 more tweaks for readability/consistency 2020-01-15 17:45:35 +10:00
Damien Elmes
237c0791f8 more hook tweaks, and merge the pre-render field and template hooks 2020-01-15 17:18:11 +10:00
Damien Elmes
cab572b63c remove _hook/_filter suffix 2020-01-15 16:53:24 +10:00
Damien Elmes
b2f756f1b7 tweak the hook names in anki/
still a work in progress
2020-01-15 16:43:22 +10:00
Damien Elmes
c3775e572d fix file path in comment 2020-01-15 15:29:23 +10:00
Damien Elmes
89fce1f6b7 migrate addHook/remHook calls 2020-01-15 13:49:26 +10:00
Damien Elmes
26cb9851b4 idempotent hook removal
This matches remHook()'s behaviour
2020-01-15 13:16:43 +10:00
Damien Elmes
97bd86e0ad tidy hooks, add reviewCleanup 2020-01-15 13:03:11 +10:00
Damien Elmes
660685375f migrate most of the remaining runHook() calls 2020-01-15 12:46:53 +10:00
Damien Elmes
67a3223623 remove unused function 2020-01-15 12:17:29 +10:00
Damien Elmes
84c17e1f02 add more hooks, tweak wording for consistency 2020-01-15 12:16:54 +10:00
Damien Elmes
cb14963066 add _ prefix to generated classes to improve code completion 2020-01-15 08:58:27 +10:00
Damien Elmes
2fa662f7ae add some more hooks; stringify fully qualified types
To avoid circular imports, types that contain a '.' are automatically
converted to strings.
2020-01-15 08:56:56 +10:00
Damien Elmes
d962c0d8cb if profile is corrupt and is reset, need to set default lang again
Fixes https://anki.tenderapp.com/discussions/ankidesktop/37994-traceback-error-with-windows-64bit-standard-installation
2020-01-14 15:18:07 +10:00
Damien Elmes
1824ca1b5d fix startup when prefs.db not readable
If we fail to open the Anki 2.0 prefs.db file, on the second try
we need to revert to a new file instead of trying the same broken
file again.
2020-01-14 14:59:46 +10:00
Damien Elmes
ba670c4be1 if pm.meta() fails, need to unset pm
This prevents a startup failure caused by trying to set
the UI scale when .meta() is not working. Startup still
fails, but the correct message is displayed now.
2020-01-14 14:57:24 +10:00
Damien Elmes
662eb53e6a switch to classes for hooks
This allows us to add a docstring to .append() so users can see
the names of the arguments that are being passed, and means we
don't have to remember to prepend run_ when calling a hook.
2020-01-14 08:54:07 +10:00
Damien Elmes
d266dcd076 add a flag to handle the legacy hook missing args case
And update a few more hooks.
2020-01-13 18:37:08 +10:00
Damien Elmes
4bb3d7a958 add separate file for gui hooks 2020-01-13 14:38:05 +10:00
Damien Elmes
dd61389319 New type-safe approach to hooks/filters
Still todo:
- Add separate module for GUI hooks
- Update the remaining runHook/runFilter() calls
- Document the changes, including defensive registration
2020-01-13 13:57:51 +10:00
Damien Elmes
b42912e639 mark anki and aqt modules as having typing info
This means once they're installed via develop or a wheel, add-ons
will be able to more easily typecheck their code against the Anki
code.
2020-01-13 13:03:37 +10:00
Glutanimate
cda296748d Add hook for AddCards.addNote 2020-01-08 21:29:28 +01:00
Damien Elmes
8b94d69abc bump minimum python version from 3.6 to 3.7 2020-01-07 18:34:36 +10:00
Damien Elmes
26d581adf9 remove dupe line 2020-01-06 20:59:18 +10:00
Erez Volk
b4facdf650 BUGFIX: QLineEdit doesn't have .toPlainText() 2020-01-05 07:54:45 +02:00
Glutanimate
a2124e2ee8 Use add-on name rather than package name when reporting on conflicts
Brings _installationSuccessReport more in line with messaging in
AddonManager.toggleEnabled
2020-01-04 04:49:36 +01:00
Glutanimate
7348e9c69e Further tweak messaging depending on Anki's state at installation time 2020-01-04 04:45:43 +01:00
Glutanimate
6a7f11b172 When possible, install add-on before add-ons are loaded
Removes the need to restart Anki if it is not running when
user launches .ankiaddon file
2020-01-04 04:34:16 +01:00
Glutanimate
d9e56e22f9 Fix type hints and remove obsolete argument 2020-01-04 04:31:33 +01:00
Glutanimate
54253e2108 Make sure to pass pending imports on to installAddon
also: refactor add-on check
2020-01-04 04:30:33 +01:00
Glutanimate
a46e9b6035 Merge branch 'ankiaddon-filetype-handling' of https://github.com/Glutanimate/anki into ankiaddon-filetype-handling 2020-01-04 02:36:28 +01:00
Glutanimate
392938f20c Adjust type annotations, format string, and remove tooltip on cancel
Other areas of Anki don't confirm cancelling actions with tooltips,
so after further consideration, the tooltip felt out of the place and
might have actually confused users into thinking some action was
being performed.
2020-01-04 01:30:20 +01:00
Aristotelis
09e238876b
Merge pull request #1 from amboss-mededu/add-amboss-contrib
Add AMBOSS as a contributor
2020-01-03 18:45:20 +01:00
Yann Salimi
14e3c24e73 Add AMBOSS as a contributor 2020-01-03 18:37:50 +01:00
Glutanimate
1b236acb3d Fix mypy and black checks 2020-01-03 18:23:28 +01:00
Glutanimate
e3b7096db5 Extend CLI with the ability to install .ankiaddon packages
Allows Anki to register a mime-type handler for .ankiaddon files

Other small collateral changes:

+ fix positioning issues with some prompts and progress dialog
+ add prompt titles where they were missing
+ add type annotations for AddonManager installation methods
+ explicitly import os in main (used to be imported via aqt.qt)
2020-01-03 17:57:33 +01:00
Glutanimate
00991e8e8e Extend showInfo with the ability to add custom buttons
Grants more flexibility in user prompt design
2020-01-03 17:48:17 +01:00
Glutanimate
ce1853167b Refactor add-on installation error handling
Allows extending the installation pathways more easily.
In preparation of .ankiaddon file type handling.
2020-01-03 16:32:20 +01:00
Erez Volk
46a24812ce Enable Tag Modified iff importMode is Update 2020-01-03 08:32:44 +02:00
Erez Volk
e481cce816 Merge remote-tracking branch 'upstream/master' into add-tags-on-update 2020-01-03 08:13:04 +02:00
Damien Elmes
0aa01605d7 add buildhash to rspy and aqt, and check all three modules match 2020-01-03 15:15:18 +10:00
Damien Elmes
5876866565 tweaking the folder names again
hopefully that's the last of it
2020-01-03 07:48:38 +10:00