Commit Graph

55 Commits

Author SHA1 Message Date
Damien Elmes
5e5906f183 store sync state in a struct, and reuse ctx across methods 2020-02-17 08:40:16 +10:00
Damien Elmes
f20b5b8db6 media sync working, but unpolished 2020-02-17 08:40:16 +10:00
Damien Elmes
1974981b94 bump nightly for the unwrap source line fix 2020-02-17 08:40:16 +10:00
Damien Elmes
ec8a91b493 more refactoring 2020-02-17 08:40:16 +10:00
Damien Elmes
10f64d54b8 rearrange some methods to make structure clearer 2020-02-17 08:40:16 +10:00
Damien Elmes
01470c4854 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
96f0a5cc3c port change tracking 2020-02-17 08:40:16 +10:00
Damien Elmes
7d42da67c6 make sure results are checked 2020-02-17 08:40:16 +10:00
Damien Elmes
056c2d3fd1 initial rs implementation of media database 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
41266f46f1 add another implementation of media.addFile() and cleanFilename() et al
Instead of adding an incrementing number in the conflict case,
the file hash is appended.
2020-02-17 08:40:16 +10:00
Damien Elmes
bd96c27096 show which side the template error occurred on 2020-02-08 11:54:08 +10:00
Damien Elmes
ed8c1ae9c5 clearer error when closing tags transposed 2020-02-08 10:32:34 +10:00
Damien Elmes
c075191697 reuse reveal_cloze_text() for LaTeX cloze expansion 2020-01-28 07:40:44 +10:00
Damien Elmes
9ad80f4d2c move cloze-related code into a separate file 2020-01-27 20:41:23 +10:00
Damien Elmes
21cbb5a766 support speed control in tts tags 2020-01-26 14:31:07 +10: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
de3fe320c0 look through negated conditionals instead of just ignoring them
https://anki.tenderapp.com/discussions/ankidesktop/38220-bug-in-2119-regarding-computation-of-req
2020-01-23 17:27:07 +10:00
Damien Elmes
4fb227ca4c added flag_av_tags() for replay button support 2020-01-21 14:44:27 +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
0942ffbff6 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
fbf0f94bcc workflow fix 2020-01-19 15:02:08 +10:00
Damien Elmes
bead03e858 drop plus_one test 2020-01-17 18:54:38 -07:00
Damien Elmes
12c60f20fe _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
cddfddf1c8 save filters and field name separately 2020-01-16 18:47:21 +10:00
Damien Elmes
bdac937802 show missing field errors in the same way as the other errors 2020-01-16 18:47:21 +10:00
Damien Elmes
b56c9591c0 more useful template error message 2020-01-16 18:47:21 +10:00
Damien Elmes
99c45c5fbc allow an empty field name if filters are provided
This is to make it easier for add-ons to provide extra content that
degrades nicely on platforms that don't have the add-on.
2020-01-15 18:48:23 +10:00
Damien Elmes
9d84f8fb70 fix overlapping clozes 2020-01-14 07:07:21 +10:00
Damien Elmes
9bb0348fdd 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
84d22046d4 fix type:cloze handling 2020-01-11 19:38:41 +10:00
Damien Elmes
7cde51e884 ignore extra { chars in replacement
This will still show a trailing } with {{{field}}}, but will at
least show the field content instead of 'unknown field'.
2020-01-11 18:02:24 +10:00
Damien Elmes
feb0a31bba static->const 2020-01-11 13:06:48 +10:00
Damien Elmes
0ccc9e98a8 drop unnecessary capitalized cloze handling 2020-01-11 13:03:43 +10:00
Damien Elmes
389bf07b52 handle mathjax+cloze case
instead of trying to selectively change clozes from c to C, just
strip HTML from inside the mathjax sections instead
2020-01-11 12:57:32 +10:00
Damien Elmes
cc09ca34d4 cloze: support
MathJax still to do
2020-01-11 12:07:06 +10:00
Damien Elmes
94a72f970a type: and hint: support
We may need to keep handling hints in the Python code for now until
i18n is sorted out.
2020-01-11 09:35:41 +10:00
Damien Elmes
7d7656d86f add ruby filters 2020-01-10 21:04:52 +10:00
Damien Elmes
d4553e9488 add some text helpers 2020-01-10 21:01:23 +10:00
Damien Elmes
96c8784024 add copyright headers to some files 2020-01-10 21:00:48 +10:00
Damien Elmes
deca82ca9d skip rslib doctests, we don't use them and they're slower 2020-01-10 18:06:21 +10:00
Damien Elmes
3f724e5c98 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
f7ff0d1c17 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
ff7ff5c2b9 fix next_day_at being off by a day before the rollover 2020-01-10 08:21:52 +10:00
Damien Elmes
a5613523ee 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
ad17c765e6 ignore template closing characters outside of a tag 2020-01-08 20:29:04 +10:00
Damien Elmes
0087eee6d9 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
46445638a8 fix days_elapsed moving backwards 2020-01-07 09:29:43 +10:00
Damien Elmes
86055bb564 add failing test for days_elapsed calculation
the current code was causing the day to move backwards:

at day 7 hour 23:59, elap is 1
at day 8 hour 0:59, elap is 0
at day 8 hour 1:59, elap is 0
at day 8 hour 2:59, elap is 1
at day 8 hour 3:59, elap is 1
at day 8 hour 4:59, elap is 2

as mentioned in https://github.com/ankitects/anki/pull/416
2020-01-07 09:29:43 +10:00