Commit graph

1198 commits

Author SHA1 Message Date
evandrocoan
bc5a9da396 Fixed anki website docs link on pylib/anki/consts.py 2020-02-28 22:18:19 -03:00
Alan Du
13a258184e Add some more types 2020-02-27 21:27:59 -05:00
Alan Du
ab96ac324e Monkeytype pylib/anki/importing/supermemo_xml.py 2020-02-27 19:27:32 -05:00
Alan Du
e132ef35ee Type pylib/anki/schedv2.py 2020-02-27 19:27:32 -05:00
Alan Du
793877ce77 Monkeytype anki/rsbackend.py 2020-02-27 19:27:32 -05:00
Alan Du
3c2822ba4c Monkeytype pylib/anki/sched.py 2020-02-27 19:27:32 -05:00
Alan Du
397afaf29b Monkeytype pylib/anki/find.py 2020-02-27 19:27:32 -05:00
Damien Elmes
2de865d7f0 migrate strings with trailing newlines to fluent 2020-02-27 20:36:40 +10:00
Alan Du
9a5eb6c704 Fix type warning 2020-02-27 00:07:19 -05:00
Alan Du
1523412a37 Monkeytype pylib/anki/latex.py 2020-02-27 00:07:19 -05:00
Alan Du
6076e0b21a Monkeytype pylib/anki/stdmodels.py 2020-02-27 00:07:19 -05:00
Alan Du
c74ccbe245 Monkeytype pylib/anki/stats.py 2020-02-27 00:07:19 -05:00
Alan Du
fe2d8cdea0 Monkeytype pylib/anki/template.py 2020-02-27 00:07:19 -05:00
Alan Du
4606447e4c Monkeytype anki/tags.py 2020-02-27 00:07:19 -05:00
Alan Du
7ce81f80db Monkeytype pylib/anki/errors.py 2020-02-27 00:07:19 -05:00
Alan Du
acf1b00cd2 Monkeytype pylib/anki/db.py 2020-02-27 00:07:19 -05:00
Alan Du
a96f1abb33 Monkeytype pylib/anki/decks.py 2020-02-27 00:07:19 -05:00
evandrocoan
59d45f309a Merge remote-tracking branch 'danielelmes/master' into fix_windows_build
# Conflicts:
#	CONTRIBUTORS
2020-02-27 00:54:16 -03:00
Alan Du
a095c44f40 Improve mypy config
- Make mypy stricter
- Warn for unnecessary workarounds
2020-02-26 22:22:40 -05:00
evandrocoan
4a2456f62f Merge remote-tracking branch 'danielelmes/master' into fix_windows_build
# Conflicts:
#	Makefile
2020-02-27 00:20:34 -03:00
Damien Elmes
5d09981667 add self.col.tr() shortcut 2020-02-27 12:33:15 +10:00
Damien Elmes
93c2e04267 FString -> TR 2020-02-27 12:25:19 +10:00
Damien Elmes
83d894ac87 return a localized error for all error kinds
some errors are not yet localized, but now the Python code
doesn't need to think about which property to use
2020-02-27 10:46:24 +10:00
Damien Elmes
59328d9ade tweak rounding
- avoid rounding minutes
- round the seconds taken in the card info screen
- provide different precise and imprecise modes, since we need
to display seconds to multiple decimals in some areas
2020-02-25 17:29:06 +10:00
evandrocoan
2d316748a7 Merge remote-tracking branch 'danielelmes/master' into fix_windows_build
# Conflicts:
#	Makefile
2020-02-25 03:16:57 -03:00
evandrocoan
9e690f80e7 Renamed FIND_EXEC to FIND, replaced IS_WINDOWS by specific commands
as PYTHON_BIN, ACTIVE_SCRIPT and INSTALL_PYAUDIO.
Fixed echo statements not using @ to suppress double message output.
Deprecated the usage of ECHOCMD := /bin/echo -e because it has no
effect: https://stackoverflow.com/questions/60387684/how-to-make-the-makefile-echos-to-use-bin-echo-e

# Conflicts:
#	Makefile
2020-02-25 03:15:11 -03:00
Damien Elmes
64851afa5e cap answer buttons to 1 decimal place
we can switch to NUMBER() instead in the future, but will need
to update all the translations at the same time
2020-02-25 13:24:29 +10:00
evandrocoan
6d16298254 Fixed development compilation with Windows 10
1. Documented on README.development how to setup the environment
   for Windows.
2. Fixed qt/ts/package.json not working due usage of ; instead
   of &&
3. Fixed copy-qt-files rsync using Windows paths instead of Unix
   ones
4. Fixed Makefile's using Windows Linux Subsystem bash instead of
    the Cygwin one.
5. Ensured running the correct pip module by using python -m pip
    instead of just pip.
6. Fixed Makefiles using Windows `find` command, instead of the
    Cygwin's one (POSIX find).
7. Fixed pyenv sourcing/activate using /pyevn/bin/ instead of
    /python/Scripts/ on Windows.
8. Fixed pyaudio not installing/linking with portaudio on Windows
    by installing for a patched fork at evandroforks/pyaudio
9. Forked and fixed portaudio not building with Visual Studio 2017
    or superior and added the reference for the patched fork on
    README.development at evandroforks/portaudio.
2020-02-24 14:59:11 -03:00
Damien Elmes
43dae5c90e Merge pull request #456 from Arthur-Milchior/noDefaultDeckInBrowser
No default deck in browser
2020-02-24 19:35:49 +10:00
Damien Elmes
db486dd25c enable v2 apkg export 2020-02-24 18:54:55 +10:00
Damien Elmes
ea22296d4c expand clozes before rendering LaTeX
https://anki.tenderapp.com/discussions/ankidesktop/39071-latex-media-windows-version-2121-0cd1ee92-fail-rendering-latex
2020-02-24 18:34:08 +10:00
Damien Elmes
70ae99778f remove old fmtTimeSpan() and associated strings 2020-02-23 18:47:16 +10:00
Damien Elmes
024126b3be support aqt-specific FTL files 2020-02-23 18:00:13 +10:00
Damien Elmes
c98247fa0f translations no longer require an open collection 2020-02-23 14:57:02 +10:00
Damien Elmes
0d1a30c6d8 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
adfbd0d70f should(default)deckbedisplayed in snake case 2020-02-22 04:08:01 -08:00
Arthur Milchior
be98614d41 defaultDeck to default_deck 2020-02-22 04:03:42 -08:00
Arthur Milchior
6a50730f0d 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
89b79d9800 forceDefault to force_default 2020-02-22 04:01:42 -08:00
Damien Elmes
7409deae34 es-ES -> es 2020-02-22 19:47:23 +10:00
Damien Elmes
e5fa1759b3 formatting fix 2020-02-21 21:21:36 +10:00
Damien Elmes
abc260b7c3 reviews 2020-02-21 20:36:22 +10:00
Damien Elmes
e84fa7dee3 add next learning due time + remaining count to congrats screen
https://anki.tenderapp.com/discussions/ankidesktop/38000-v2-scheduler-learning-cards
2020-02-21 19:54:50 +10:00
Damien Elmes
3a83d9844a add studied_today(), move to statistics.ftl 2020-02-21 18:01:15 +10:00
Damien Elmes
e3e376036f add average-answer-time to Fluent
drop the 0.1 special case; we're using two decimals now
2020-02-21 17:42:55 +10:00
Damien Elmes
74bff450e2 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
11647daec1 move answer_button_time to the backend, split sched into separate module 2020-02-21 15:29:38 +10:00
Damien Elmes
2633d6db4b move answer button labels into fluent 2020-02-21 15:29:38 +10:00
Damien Elmes
cf1824dac5 update to latest fluent-rs and add basic locale-aware decimals
- git version pinned at the moment until the concurrency fix
lands in 0.10.2
- currently float values are hard-coded at 2 decimal places;
we should switch to using NUMBER() in the future
2020-02-21 15:29:38 +10:00
Damien Elmes
e98e85a0b8 Revert "Merge pull request #452 from Arthur-Milchior/noDefaultDeckInBrowser"
This reverts commit 56d908cc28, reversing
changes made to c123b5bf95.

More discussion required on https://github.com/ankitects/anki/pull/452
2020-02-21 12:27:39 +10:00
Damien Elmes
56d908cc28 Merge pull request #452 from Arthur-Milchior/noDefaultDeckInBrowser
No default deck in browser
2020-02-21 12:10:36 +10:00
Damien Elmes
c123b5bf95 fix Deck field in card templates showing filtered deck
https://anki.tenderapp.com/discussions/ankidesktop/38984-deck-changed
2020-02-19 20:00:06 +10:00
Arthur Milchior
9860d5ba5e method shouldBeDisplayed 2020-02-19 01:56:33 -08:00
Damien Elmes
59b70d255b don't error when fuzz is 0
https://anki.tenderapp.com/discussions/ankidesktop/38956-bug-report-sched2-anki2120
2020-02-18 11:00:26 +10:00
Damien Elmes
0e7f433071 fix legacy filter return values being ignored 2020-02-18 09:12:16 +10:00
Damien Elmes
fd01cac4d7 split "Due" into three different contexts for translators 2020-02-17 14:41:01 +10:00
Damien Elmes
f40a00f0cb localize some error messages 2020-02-17 11:38:22 +10:00
Damien Elmes
644c1f4c26 Revert "test out the Python Fluent implementation"
This reverts commit 181c17a0988cf9e57b2604746000c6072cb96206.

Reverting this to keep as a record.
2020-02-17 08:40:17 +10:00
Damien Elmes
07318a20c6 test out the Python Fluent implementation
The parsing step is considerably slower in Python, but if parsing
is moved out of the test function, Python wins at 45ms to Rust's 67ms
on 10,000 rounds, presumably due to the overhead of serializing to
Protobuf. Not enough of a difference to justify the inclusion of extra
dependencies and duplicating the lookup code in any case.
2020-02-17 08:40:17 +10:00
Damien Elmes
4b63a07c99 expose translations to Python 2020-02-17 08:40:17 +10:00
Damien Elmes
1f736239cd pass progress back as translated string(s) 2020-02-17 08:40:17 +10:00
Damien Elmes
8450214cda add ftl to the build process, and a sync-git script
also
- ensure po files are checked when updated
- add start of sync.ftl
2020-02-17 08:40:17 +10:00
Damien Elmes
632041f14f drop unused threadLocal and noHint i18n code 2020-02-17 08:40:17 +10:00
Damien Elmes
ff9daa099b 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
7a0d1ffae0 fix sync deauth 2020-02-17 08:40:17 +10:00
Damien Elmes
a5558d5413 pass locale details to backend 2020-02-17 08:40:17 +10:00
Damien Elmes
47aa27f877 fix Lojban selection 2020-02-17 08:40:17 +10:00
Damien Elmes
ba0bc3086c move empty card check into template code 2020-02-17 08:40:17 +10:00
Damien Elmes
0738ff46b6 make template errors translatable 2020-02-17 08:40:17 +10:00
Damien Elmes
d23477b143 update media DB when adding LaTeX images 2020-02-17 08:40:17 +10:00
Damien Elmes
1383973753 shorten add_file_to_media_folder 2020-02-17 08:40:17 +10:00
Damien Elmes
89626c1a72 use media.trash for unused media deletion as well 2020-02-17 08:40:17 +10:00
Damien Elmes
7ce49cb1f8 fix latex render progress; display more frequently 2020-02-17 08:40:17 +10:00
Damien Elmes
c4d6d9480c if latex fails to render in bulk, show the user the problem 2020-02-17 08:40:17 +10:00
Damien Elmes
625b5728cc new render_all_latex() + gui button; remove some old code 2020-02-17 08:40:17 +10:00
Damien Elmes
d32e2fe6eb add extract_latex to backend; use it for latex build 2020-02-17 08:40:17 +10:00
Damien Elmes
2c634f5163 stripLatex() does not appear to be used anywhere 2020-02-17 08:40:17 +10:00
Damien Elmes
790f3c9f72 plug new media check in 2020-02-17 08:40:17 +10:00
Damien Elmes
edf60b10d4 backend stores media folder/db locations; don't need to pass them in 2020-02-17 08:40:17 +10:00
Damien Elmes
ef14b1a96b simplify code by accumulating stats at the source 2020-02-17 08:40:17 +10:00
Damien Elmes
77158760ff use enums for some common errors 2020-02-17 08:40:16 +10:00
Damien Elmes
ecab2da99e remove unused code 2020-02-17 08:40:16 +10:00
Damien Elmes
738e415463 connect media sync progress to Python, add a progress dialog 2020-02-17 08:40:16 +10:00
Damien Elmes
804432fb3e use separate fn to init backend, for future pyo3 0.9 release compat 2020-02-17 08:40:16 +10:00
Damien Elmes
1acb3b86b9 backend init can now fail, and update media db when file is added
- Adding files inside Anki now updates the media DB, so a full file
scan at sync time is no longer required if no other changes have been
made.
- Use a protobuf message for backend initialization, and return a
string error if initialization fails.
2020-02-17 08:40:16 +10:00
Damien Elmes
9a280897d3 drop support for vfat 2020-02-17 08:40:16 +10:00
Damien Elmes
c8ea895cae drop support for the early 2.0 release media db format 2020-02-17 08:40:16 +10:00
Damien Elmes
1102983a4e drop the clean* funcs 2020-02-17 08:40:16 +10:00
Damien Elmes
c9a5ed3cc6 add add_file() and write_data() 2020-02-17 08:40:16 +10:00
Arthur Milchior
16f40c9a01 Hook card_is_being_flushed
It often arrives that I want to know when a card is going to be
flushed and in this case change it.

This could be the case if I want to change the scheduler without
implementing a whole scheduler. It simply reads the card history and
change interval and due date.

It's also the case for the "'trigger -> action' rules", which apply
some coded actions when some event occurs. E.g. suspend/unsuspend a
sibling when card become mature/is forgotten.
2020-02-14 00:59:32 -08:00
Arthur Milchior
347523b442 Factorizing card's flush 2020-02-14 00:59:32 -08:00
Arthur Milchior
4b632b398e hook note_is_being_flushed
I created multiple add-ons which want to transform a note before it is
being saved. For example, one add-on trim it, and remove useless line
break which arrived by accident.

Another add-on want to compile LaTeX as soon as the note is done, and
warn the user if LaTeX can't be compiled.

Having a hook in pre-flush would be useful here
2020-02-14 00:57:27 -08:00
Damien Elmes
3d1e89f014 Merge pull request #433 from Arthur-Milchior/ints
Constants
2020-02-14 08:37:31 +10:00
Damien Elmes
5e44fb0304 remove redundant declaration 2020-02-12 08:06:35 +10:00
Arthur Milchior
48339784cc deckIds return deck of selected cards 2020-02-11 10:50:59 -08:00
Arthur Milchior
ad4b04bf81 ofCids: returns did of all cids 2020-02-11 10:50:59 -08:00
Arthur Milchior
0cace50f00 inverse if/else in deckIds 2020-02-11 10:50:59 -08:00
Arthur Milchior
ea0a509372 cardIds return cids if it is set 2020-02-11 10:50:59 -08:00
Arthur Milchior
17610d4c01 anki.exporter takes extra argument cids 2020-02-11 10:50:58 -08:00
Arthur Milchior
d1183df830 aqt.exporter takes extra argument cid 2020-02-11 10:49:13 -08:00
Damien Elmes
7bfcc8b079 pylint fix 2020-02-08 15:49:41 +10:00
Damien Elmes
4fb9e15201 formatting 2020-02-08 15:48:42 +10:00
Damien Elmes
391a58077a show which side the template error occurred on 2020-02-08 11:54:08 +10:00
Damien Elmes
43b7f28417 fix rendering of question/answer column in browse screen 2020-02-08 09:29:34 +10:00
Arthur Milchior
769c806c2d correct missing french translation 2020-02-05 20:48:30 -08:00
Arthur Milchior
538d5bd76a remove "typing.FOO" and import foo
According to grep, they were the only two instances
2020-02-04 08:49:53 -08:00
Arthur Milchior
607bcc55c2 Reformatting through black 2020-02-04 08:47:36 -08:00
Arthur Milchior
611ce618a8 QUEUE and TYPE day learn, relearn 2020-02-04 08:47:36 -08:00
Arthur Milchior
abea523ffa QUEUE_TYPE_PREVIEW 2020-02-04 08:47:36 -08:00
Arthur Milchior
41ffdbd504 QUEUE_TYPE_REV and CARD_TYPE_REV 2020-02-04 08:47:36 -08:00
Arthur Milchior
6d204a23ac QUEUE_TYPE_SUSPENDED 2020-02-04 08:47:36 -08:00
Arthur Milchior
49b091b3ae QUEUE_TYPE_SIBLING_BURIED 2020-02-04 08:47:36 -08:00
Arthur Milchior
dc4e48dee8 QUEUE_USER_BURIED 2020-02-04 08:47:36 -08:00
Arthur Milchior
44368caf55 CARD_TYPE_LRN and QUEUE_TYPE_LRN 2020-02-04 08:47:35 -08:00
Damien Elmes
7552b87357 Merge pull request #434 from Arthur-Milchior/didInExport
anki.exporting.AnkiExporter.deckIds
2020-02-04 16:59:39 +10:00
Arthur Milchior
e27b2ff554 QUEUE_TYPE_NEW and CARD_TYPE_NEW 2020-02-03 02:24:37 -08:00
Arthur Milchior
a0bbc3dc97 Card and queue type 2020-02-03 02:24:37 -08:00
Arthur Milchior
799ef6c90c PERIOD_LIFE 2020-02-03 02:24:37 -08:00
Arthur Milchior
886fbc0e28 PERIOD_YEAR 2020-02-03 02:24:37 -08:00
Arthur Milchior
21d2549b28 PERIOD_MONTH 2020-02-03 02:24:37 -08:00
Arthur Milchior
0ec7f82790 REVLOG_CRAM 2020-02-03 02:24:37 -08:00
Arthur Milchior
fdb8a8a966 REVLOG_RELRN 2020-02-03 02:24:37 -08:00
Arthur Milchior
381699cae4 REVLOG_REV 2020-02-03 02:24:37 -08:00
Arthur Milchior
8c3f73c423 REVLOG_LRN 2020-02-03 02:24:37 -08:00
Arthur Milchior
27af916078 Add revlog constants 2020-02-03 02:24:37 -08:00
Arthur Milchior
273629e255 BUTTON_FOUR 2020-02-03 02:24:37 -08:00
Arthur Milchior
4a1ec19b23 BUTTON_THREE 2020-02-03 02:24:37 -08:00
Arthur Milchior
d0b18a8fbc BUTTON_TWO 2020-02-03 02:24:37 -08:00
Arthur Milchior
ec00777d63 BUTTON_ONE 2020-02-03 02:24:37 -08:00
Arthur Milchior
e47af22e4a Adding constants for buttons
The point being that, when we read BUTTON_ONE, we know that the type
of the element is: a button
2020-02-03 02:24:37 -08:00
Arthur Milchior
a1255c32ba LEECH_TAGONLY 2020-02-03 02:24:37 -08:00
Arthur Milchior
2bf69ea0c1 LEECH_SUSPEND 2020-02-03 02:24:37 -08:00
Arthur Milchior
3c45190255 Add leech constants 2020-02-03 02:24:37 -08:00
Arthur Milchior
d284b01619 ADD_MODE 2020-02-03 02:24:37 -08:00
Arthur Milchior
224a38e931 IGNORE_MODE 2020-02-03 02:24:37 -08:00
Arthur Milchior
a29824e088 UPDATE_MODE 2020-02-03 02:24:37 -08:00
Arthur Milchior
409f512e55 DECK_DYN 2020-02-03 02:24:37 -08:00
Arthur Milchior
fa82692b87 use DECK_STD 2020-02-03 02:24:37 -08:00
Arthur Milchior
38e924db7f Adding constants for decks' type 2020-02-03 02:24:37 -08:00
Arthur Milchior
c2f09df68c anki.exporting.AnkiExporter.deckIds
This change would help me simplify the code of
https://ankiweb.net/shared/info/1983204951

It would allow my exporter to use the code of AnkiExporter while
selecting which decks I export, instead of exporting all decks as I
was doing until today. (I never realized I was exporting all deck
actually, until someone sent me a bug report)
2020-02-03 01:36:27 -08:00
Damien Elmes
a8c3c796e1 ugly fix for suspended cards being unsuspended when filtered deck emptied
https://anki.tenderapp.com/discussions/ankidesktop/38247-bug-suspended-cards-automatically-included-in-the-filtered-decks
2020-02-03 08:10:20 +10:00
Damien Elmes
dc565082cf add schedv2_did_answer_review_card hook 2020-01-31 07:30:13 +10:00
Damien Elmes
90e619dcae better help link for blank cards 2020-01-28 07:53:55 +10:00
Damien Elmes
86a580d820 reuse reveal_cloze_text() for LaTeX cloze expansion 2020-01-28 07:40:44 +10:00
Damien Elmes
47bcb3845c support speed control in tts tags 2020-01-26 14:31:07 +10:00
Damien Elmes
6bbab6e9f9 move strip_av_refs() into anki.sound 2020-01-24 15:48:40 +10:00
Damien Elmes
8cfb4d47ab more changes to the template code
- _renderQA() has moved to template.py:render_card()
- dropped QAData in favour of a properly typed dict
- render_card() returns a TemplateRenderOutput struct instead of a dict
- card_did_render now takes that output as the first arg, and can
mutate it
- TemplateRenderContext now stores the original card, so it can return
a card even in the add screen case

The old mungeFields and mungeQA hook have been removed as part of this
change. mungeQA can be replaced with the card_did_render hook.
In the mungeFields case, please switch to using field_filter instead.
2020-01-24 13:44:13 +10:00
Damien Elmes
766155665b renderQA() wasn't used in the codebase 2020-01-24 11:09:38 +10:00
Damien Elmes
46c6a7f7e4 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
58cbca9a8c inject legacy funcs referencing aqt in GUI load 2020-01-23 18:20:19 +10:00
Damien Elmes
00a0c539a3 fix lint 2020-01-23 18:12:57 +10:00
Damien Elmes
6c0e2ff57a update reqs test to reflect new behaviour 2020-01-23 17:32:17 +10:00
Damien Elmes
35435a130e 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
Yngve Høiseth
4f5537f358 Type hint RemoteServer._run 2020-01-22 23:33:37 +01:00
Damien Elmes
7fefe7ec43 fix pylib checks failing when aqt unavailable 2020-01-22 16:11:40 +10:00
Damien Elmes
2ee8902bd9 added flag_av_tags() for replay button support 2020-01-21 14:44:27 +10:00
Damien Elmes
b0d2958721 add rank handling to TTS; parse TTS args in get_av_tags() 2020-01-21 12:41:37 +10:00
Damien Elmes
b5758c2cff 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
548ed31ef7 add a simple TTS field filter
This simply wraps the field in extra text that the frontend will
deal with. Also added some helpers for extracting and stripping
audio and TTS tags from the rendered text.
2020-01-20 19:16:24 +10:00
Damien Elmes
4a19600465 hasSound not used by anki code or add-ons 2020-01-20 09:31:28 +10:00
Damien Elmes
99d596fa96 fix incorrectly logged repeat step
https://anki.tenderapp.com/discussions/ankidesktop/38130-anki-21-scheduler-misleads-on-hard-button-for-learning-cards
2020-01-19 15:41:58 +10:00
Damien Elmes
5646ee642a automatically disable add-ons that have been marked as incompatible 2020-01-19 13:37:55 +10:00
Damien Elmes
0a57969a44 AnkiRequestsClient -> HttpClient 2020-01-19 11:33:27 +10:00
Damien Elmes
369d38ff7c add type alias for httpclient callback 2020-01-19 10:06:54 +10:00
Damien Elmes
d86b231c2b 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
705ab55fef 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
c525a75fa3 drop plus_one test 2020-01-17 18:54:38 -07:00
Damien Elmes
a9378b1e99 _localOffsetForDate() was broken
It was including the elapsed time of day when calculating
the offset, leading to incorrect results
2020-01-17 18:52:36 -07:00
Damien Elmes
70061e6bfe comment out the unused legacy code 2020-01-17 10:51:36 +10:00
Damien Elmes
5d29ad51da move types.py into the files responsible for each type 2020-01-17 10:17:33 +10:00
Damien Elmes
8041ee5c52 remove unused legacy requirements code 2020-01-17 09:33:33 +10:00
Damien Elmes
55314d6d30 add context to card rendering, and rework related hooks
- the context exists for the lifecycle of one card's render,
and caches calls to things like .card() to avoid add-ons needing to
do their own cache management.
- add-ons can optionally add extra data to the context if they need
it across multiple filters
- removed card_will_render. the legacy hook is still available for
now
- card_did_render is now called only once, with both front and back
text
2020-01-17 09:30:42 +10:00
Damien Elmes
d778f9b0af i18n 2020-01-16 21:05:29 +10:00
Damien Elmes
d81d20855e need to strip sounds when FrontSide rendering deferred 2020-01-16 19:49:43 +10:00
Damien Elmes
a254b140a7 fix empty cloze message not appearing 2020-01-16 18:47:21 +10:00
Damien Elmes
52bd10063e more useful template error message 2020-01-16 18:47:21 +10:00
Damien Elmes
4ed6508e19 Merge pull request #423 from Arthur-Milchior/fixReorder
Order by creation of note
2020-01-16 18:47:12 +10:00
Arthur Milchior
c4fecd9260 Order by creation of note
This commit solve a problem I actually have for some strange
reason. Here is how to reproduce the problem

1. Create a note of type Basic (and reversed card) in a deck D with front "First"
and no back
2. Wait a day (or install an add-on which show hour and minutes of
creation time in browser)
3. create a second note, with front "Last" and no back
4. In first note, add in back field "First" and delete the front field
5. Use "Empty card".
6. In the setting of the deck D, set in random order, and then back in
the "order added"
7. Review deck D. You'll see card 1 of the second note. (Don't review
it)
8. Open the browser. Show the column "due" and created. You'll see
that the first card (first) have due value 2, while it was created
before according to the created date. The card "last" have due value
1.

This is due to the fact that the value "created" is linked to note
creation, while the order is linked to the card creation time, and
card may be created after other note
2020-01-15 23:42:54 -08:00
Damien Elmes
64fc9ff854 type hints 2020-01-16 09:19:53 +10:00
Damien Elmes
73fe9f12cb simplify previewCards() and use existing card ids where possible
The type arg is no longer used, as neither type 0 nor 1 appears to
have been used in the codebase.

By using the existing card ids, it allows add-ons that gather
information about a card to work properly in the card template screen
without extra hacks.
2020-01-16 09:19:41 +10:00
Damien Elmes
43a4a059b9 check_untyped_defs in mypy for pylib 2020-01-16 08:10:49 +10:00
Damien Elmes
133281e2cc fix checkLeech hint 2020-01-16 07:59:57 +10:00
Damien Elmes
b22dc71810 more tweaks for readability/consistency 2020-01-15 17:45:35 +10:00
Damien Elmes
dd780b2898 more hook tweaks, and merge the pre-render field and template hooks 2020-01-15 17:18:11 +10:00
Damien Elmes
8bad40152d remove _hook/_filter suffix 2020-01-15 16:53:24 +10:00
Damien Elmes
a38b5c1bb6 tweak the hook names in anki/
still a work in progress
2020-01-15 16:43:22 +10:00
Damien Elmes
a2038b6a90 fix stdmodels type hint 2020-01-15 15:30:40 +10:00
Damien Elmes
141c86acd9 idempotent hook removal
This matches remHook()'s behaviour
2020-01-15 13:16:43 +10:00
Damien Elmes
bf5fc1177a add optional docstring to hooks 2020-01-15 12:14:32 +10:00
Damien Elmes
2f2d376746 clean stale build folders before build
setuptools will bundle up files from that folder even if they're
no longer in the source tree.
2020-01-15 10:07:39 +10:00
Damien Elmes
ac9470dd5f move hook gen code out of anki/
It's not needed at runtime, and this allows hooks to be updated
even when the code is broken.
2020-01-15 09:11:20 +10:00
Damien Elmes
e250550ac0 add _ prefix to generated classes to improve code completion 2020-01-15 08:58:27 +10:00
Damien Elmes
80d7333c9d 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
ac07cf3920 remove some comments that are no longer relevant 2020-01-14 20:45:18 +10:00
Damien Elmes
66ffc1a432 fix broken answer displaying 2020-01-14 09:00:52 +10:00
Damien Elmes
7352e0f43b 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
6fe2d06b16 add hook to modify template prior to rendering 2020-01-13 21:57:15 +10:00
Damien Elmes
21feaf9a63 include py.typed for mypy
these builds are now available on
https://github.com/ankitects/anki-typecheck

The add-on docs will be updated shortly to provide info on
using the new hooks and type checking.
2020-01-13 21:18:03 +10:00
Damien Elmes
2834cdcc6a add license to wheels and option to skip bundling extra files 2020-01-13 20:04:23 +10:00
Damien Elmes
555d1f0e55 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
3d94af972e update the rest of the anki/ hooks/filters 2020-01-13 17:59:52 +10:00
Damien Elmes
ad59c96bdd run black on generated hooks 2020-01-13 17:55:58 +10:00
Damien Elmes
765c7a143c buildinfo required to generate hooks 2020-01-13 14:55:32 +10:00
Damien Elmes
aa8b1645a7 add separate file for gui hooks 2020-01-13 14:38:05 +10:00
Damien Elmes
ae4ea8db22 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
356962cb2c 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
Damien Elmes
8eceedd2e5 more template rendering tweaks
- The front and back are rendered in one call now. If the front
side contains no custom filters, we can bake {{FrontSide}} into the
rear side. If it did contain custom filters, we return the partially
complete rear template instead, and the calling code can inject
the FrontSide in after it has been fully rendered.

- Instead of modifying "cloze" into something like "cq-2", the card
ordinal and whether we're rendering the question or answer are now
passed in to the rendering filters as context.

- The Rust code doesn't need to support filter names split on '-'
anymore.

- Drop the "Show" part of hint descriptions so i18n support can be
deferred.

- Ignore blank filter names caused by user using two colons instead
of one.

- Fixed hint field and text transposition.
2020-01-12 21:34:07 +10:00
Damien Elmes
718bb3fae8 drop pystache and move legacy code into separate file 2020-01-11 19:38:30 +10:00
Damien Elmes
d6884dd792 drop pystache comparison 2020-01-11 18:15:13 +10:00
Damien Elmes
3a14c247c8 replace fields and apply standard filters in rslib
The filters still need to be implemented.
2020-01-10 18:02:26 +10:00
Damien Elmes
8f3df55da2 flatten->render; pass field content in
This is paving the way to move the standard filters into Rust.

Non-empty fields are now determined in Rust, using a single regex
instead of the overkill stripHTMLMedia(). The old implementation
has been moved into the Pystache code for now.
2020-01-10 14:59:29 +10:00
Damien Elmes
31ebf0473f rework new timezone code
We now store the UTC offset that was in effect at creation time,
and use that to determine the starting date.
2020-01-09 16:58:27 +10:00
Damien Elmes
3a7fc28aa3 fix type:cloze, and remove misleading comments 2020-01-09 08:05:49 +10:00
Damien Elmes
0c6dd8cb14 fix CI failing
unsure why this doesn't fail locally, using the same mypy version
2020-01-08 20:49:40 +10:00
Damien Elmes
ed7558b817 fix type answer filter 2020-01-08 20:29:15 +10:00
Damien Elmes
520275bea3 handle conditional replacement in Rust
This extends the existing Rust code to handle conditional
replacement. The replacement of field names and filters to text
remains in Python, so that add-ons can still define their own
field modifiers.

The code is currently running the old Pystache rendering and the
new implementation in parallel, and will print a message to the
console if they don't match. If you notice any problems, please
let me know.
2020-01-08 20:28:04 +10:00
Damien Elmes
29acb2dd32 move filter reversal into pystache 2020-01-08 18:59:05 +10:00
Damien Elmes
b1b81a3726 use hooks for the built in filters as well
To support cloze deletions, we add back support for 'extra', but
using a simpler one character split instead of parens.
2020-01-08 18:08:24 +10:00
Damien Elmes
4fe3d686a6 move the rest of Anki's code out of pystache
In the process of factoring out the field filtering, the "extra"
and "fullname" args are just passed in as a blank string now.
Extra was functionality that allowed a field modifier to be defined
as "filtername(arg1,arg2):field", and fullname was the name of the
field including any provided field modifiers. From grepping through
the add-ons on AnkiWeb, neither appears to have been used.
2020-01-08 17:15:46 +10:00
Damien Elmes
93e01850b6 remove cloze handling in conditionals
As far as I can tell, this was not functional, as "{{#cloze:Text}}"
becomes cq-1:Text, which doesn't match the regex
2020-01-08 16:10:19 +10:00
Damien Elmes
34ac272349 show stdout/stderr when running tests 2020-01-08 15:52:51 +10:00
Damien Elmes
a47dc8da8f no longer try fields with : in their names
it's not supported by the card generation code, and the card
layout screen will automatically fix note types
2020-01-08 14:42:54 +10:00
Damien Elmes
3d9c454997 move furigana/hint filters into template2 2020-01-08 12:30:08 +10:00
Damien Elmes
edc989f308 clean up _renderQA(), and split rendering part out 2020-01-08 12:07:44 +10:00
Damien Elmes
516924957e use 3.7 annotations 2020-01-07 18:43:20 +10:00
Damien Elmes
9232414095 bump minimum python version from 3.6 to 3.7 2020-01-07 18:34:36 +10:00
Damien Elmes
194697753d don't need to rerun checks each time buildhash changes 2020-01-06 19:30:54 +10:00
Damien Elmes
f710d558fd add tests and setup.py to checks; fix warnings 2020-01-06 15:27:59 +10:00
Damien Elmes
9d2e57fcbc fix import order 2020-01-06 13:15:02 +10:00
Damien Elmes
6afb8c5056 add a partial Python implementation of the backend 2020-01-06 12:24:47 +10:00
Damien Elmes
7334d7a687 wheel deps should be checked at install time, not build time 2020-01-05 07:34:36 +10:00
Damien Elmes
1fa01bca67 don't reference missing readme in setup.py 2020-01-04 12:21:58 +10:00
Damien Elmes
39f2ca54e8 quieten wheel build 2020-01-04 12:21:58 +10:00
Damien Elmes
c88694333b update readme, remove submodule readmes 2020-01-04 12:21:58 +10:00
Damien Elmes
351699268a move top level scripts into makefile 2020-01-04 12:21:58 +10:00
Damien Elmes
ad3769f3c2 add default value to ServerData 2020-01-04 07:53:20 +10:00
Erez Volk
bf6672d7e8 Merge remote-tracking branch 'upstream/master' into add-tags-on-update 2020-01-03 08:13:04 +02:00
Damien Elmes
515e081d8b formatting fix 2020-01-03 15:21:36 +10:00
Damien Elmes
a113887d56 add buildhash to rspy and aqt, and check all three modules match 2020-01-03 15:15:18 +10:00
Damien Elmes
5eee63ca6d use proper version number in build outputs 2020-01-03 14:36:14 +10:00
Damien Elmes
7efccd69f8 output into dist/ 2020-01-03 14:32:26 +10:00
Damien Elmes
5c91987218 drop 'extra' from default cloze note type
Too many users get confused about where they should be placing the
cloze deletions.
2020-01-03 13:40:50 +10:00
Damien Elmes
152637caae fix invalid escape warning 2020-01-03 13:38:23 +10:00
Damien Elmes
3dc53deece speed up two tests
the regular test run is now faster than the old parallel one was
2020-01-03 09:05:04 +10:00
Damien Elmes
b3b95713e6 report slowest test 2020-01-03 09:03:39 +10:00
Damien Elmes
df2cc2fb02 switch from nose2 to pytest
pytest will show what differs in simple assert statements

concurrent mode is supported with a plugin, but like nose2, concurrent
mode hides the cause of import errors, so I've left it off for now.
2020-01-03 08:52:10 +10:00
Damien Elmes
648e51b60d don't reformat buildhash 2020-01-03 08:25:12 +10:00
Damien Elmes
2a00e0a6b0 tweaking the folder names again
hopefully that's the last of it
2020-01-03 07:48:38 +10:00