Damien Elmes
311fb524a4
don't filter out invalid filenames when we're sending them as a deletion
2020-02-17 08:40:17 +10:00
Damien Elmes
56931467a9
fix the wrong named being returned when renaming in sync
2020-02-17 08:40:17 +10:00
Damien Elmes
0d1549c5bd
pt->pb for consistency with rsbackend.py
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
d32e2fe6eb
add extract_latex to backend; use it for latex build
2020-02-17 08:40:17 +10:00
Damien Elmes
d557312f73
include LaTeX png/svg files when checking for unused media
2020-02-17 08:40:17 +10:00
Damien Elmes
e3bd06ec85
files with leading underscore are ignored
2020-02-17 08:40:17 +10:00
Damien Elmes
9700acbf18
include normalized filenames in the rename list
...
Since they'll need to be uploaded on the next sync, better not to
hide them from the list
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
3d5f6a40b2
when adding hash suffix, need length in hex, not bytes
2020-02-17 08:40:17 +10:00
Damien Elmes
92b76a5ba7
gather field references in Rust; media check now mostly complete
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
46bb6f1b92
catch trailing space/period as well
2020-02-17 08:40:17 +10:00
Damien Elmes
09aecc12e8
check [ instead of con in unit test, so test works on Windows as well
2020-02-17 08:40:17 +10:00
Damien Elmes
64e017da9a
run the TZ test only on Macs
2020-02-17 08:40:17 +10:00
Damien Elmes
e1f817a258
test shouldn't depend on dentry order
2020-02-17 08:40:17 +10:00
Damien Elmes
0da393da81
expire media trash after a week
2020-02-17 08:40:17 +10:00
Damien Elmes
a0680553ea
use our own trash folder instead of using the system trash
...
the trash crate was invoking external commands on Macs and Linux
which is slow and likely to fall over if a large number of files need
to be deleted at once.
2020-02-17 08:40:17 +10:00
Damien Elmes
27b783ac72
tidying
2020-02-17 08:40:17 +10:00
Damien Elmes
76a61b8adf
hold the DB open for the duration of the check
2020-02-17 08:40:17 +10:00
Damien Elmes
f1b0431cbd
DB check
...
Working, but should be refactored so media DB not re-opened
each time a file is renamed.
2020-02-17 08:40:17 +10:00
Damien Elmes
5ec977c74b
factor entry code out for later
2020-02-17 08:40:17 +10:00
Damien Elmes
1ca15c10d6
mgr didn't need to be mutable
2020-02-17 08:40:17 +10:00
Damien Elmes
2d859df88f
nfc helper
2020-02-17 08:40:17 +10:00
Damien Elmes
7079063855
ignore 0 byte files when picking up changes
2020-02-17 08:40:17 +10:00
Damien Elmes
62924237d3
don't add non-normalized files to media DB
2020-02-17 08:40:17 +10:00
Damien Elmes
88ac38fc55
media table doesn't need rowid
2020-02-17 08:40:17 +10:00
Damien Elmes
51e5d4b792
dirty index doesn't need to cover false case
2020-02-17 08:40:17 +10:00
Damien Elmes
742ab59edb
handle read errors during zip build
2020-02-17 08:40:17 +10:00
Damien Elmes
ef522b235a
clean up invalid media DB entries on the fly, instead of requiring DB check
2020-02-17 08:40:17 +10:00
Damien Elmes
9c60f2c77e
log media DB change registration progress, and allow aborting it
2020-02-17 08:40:17 +10:00
Damien Elmes
8e31068f0a
move change tracking into separate file
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
b21d24f6e8
move sync_media() into MediaManager
2020-02-17 08:40:17 +10:00
Damien Elmes
a769fb6172
update rslib version automatically
2020-02-17 08:40:17 +10:00
Damien Elmes
b62819092a
remove duplicate method
2020-02-17 08:40:17 +10:00
Damien Elmes
e352a6b95c
tidy up sync.rs
2020-02-17 08:40:17 +10:00
Damien Elmes
08eb9d70c8
handle concurrent modifications and ankiweb terminating early
2020-02-17 08:40:17 +10:00
Damien Elmes
3ee1d3f0da
update dirmod as files added during sync
2020-02-17 08:40:17 +10:00
Damien Elmes
775c83e89a
add debug line
2020-02-17 08:40:17 +10:00
Damien Elmes
00cd3be1a0
fix force_resync()
2020-02-17 08:40:17 +10:00
Damien Elmes
c0e7975fe7
rename non-normalized filenames when downloading
2020-02-17 08:40:17 +10:00
Damien Elmes
2c27c11584
comply with manylinux wheel requirements, and vendor sqlite on Windows
2020-02-17 08:40:17 +10:00
Damien Elmes
1f931a5b78
defer errors on upload to media check
2020-02-17 08:40:17 +10:00
Damien Elmes
2cecae4ca7
add proper version
2020-02-17 08:40:16 +10:00
Damien Elmes
77158760ff
use enums for some common errors
2020-02-17 08:40:16 +10:00
Damien Elmes
81262ffd95
defer media DB load until media action performed
...
This means a corrupt media DB will not prevent collection load.
2020-02-17 08:40:16 +10:00
Damien Elmes
b883b09414
pass in endpoint
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
50d8a40e23
add progress hook to media sync
2020-02-17 08:40:16 +10:00
Damien Elmes
e26ab9073b
send removed files to the trash
...
The way the trash crate implements deletion on a Mac is ugly, and
we may need to look into alternatives.
2020-02-17 08:40:16 +10:00
Damien Elmes
e764e68324
store sync state in a struct, and reuse ctx across methods
2020-02-17 08:40:16 +10:00
Damien Elmes
78bfbef863
media sync working, but unpolished
2020-02-17 08:40:16 +10:00
Damien Elmes
b2b8370477
bump nightly for the unwrap source line fix
2020-02-17 08:40:16 +10:00
Damien Elmes
973d8c56d6
more refactoring
2020-02-17 08:40:16 +10:00
Damien Elmes
7430d3c64f
rearrange some methods to make structure clearer
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
6bf4b9e83e
port change tracking
2020-02-17 08:40:16 +10:00
Damien Elmes
4f08ae9e27
make sure results are checked
2020-02-17 08:40:16 +10:00
Damien Elmes
9bc38647e6
initial rs implementation of media database
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
Damien Elmes
9ec6d26db7
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
391a58077a
show which side the template error occurred on
2020-02-08 11:54:08 +10:00
Damien Elmes
fc3570c949
clearer error when closing tags transposed
2020-02-08 10:32:34 +10:00
Damien Elmes
86a580d820
reuse reveal_cloze_text() for LaTeX cloze expansion
2020-01-28 07:40:44 +10:00
Damien Elmes
d598ce45fe
move cloze-related code into a separate file
2020-01-27 20:41:23 +10:00
Damien Elmes
47bcb3845c
support speed control in tts tags
2020-01-26 14:31:07 +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
faaecdb2c7
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
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
a85ad8b257
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
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
97dc39d0e0
workflow fix
2020-01-19 15:02:08 +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
21098c43b5
save filters and field name separately
2020-01-16 18:47:21 +10:00
Damien Elmes
2e8bdb580a
show missing field errors in the same way as the other errors
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
ce77759177
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
c84c3bce72
fix overlapping clozes
2020-01-14 07:07:21 +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
c486a4bf6d
fix type:cloze handling
2020-01-11 19:38:41 +10:00
Damien Elmes
524a27dd08
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
9028018277
static->const
2020-01-11 13:06:48 +10:00
Damien Elmes
41d155a6ee
drop unnecessary capitalized cloze handling
2020-01-11 13:03:43 +10:00
Damien Elmes
e7c3218724
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
cf5457da25
cloze: support
...
MathJax still to do
2020-01-11 12:07:06 +10:00
Damien Elmes
d671f091ff
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
3510eb1861
add ruby filters
2020-01-10 21:04:52 +10:00
Damien Elmes
ab841d9ebe
add some text helpers
2020-01-10 21:01:23 +10:00
Damien Elmes
ca6793c940
add copyright headers to some files
2020-01-10 21:00:48 +10:00
Damien Elmes
f101c34df7
skip rslib doctests, we don't use them and they're slower
2020-01-10 18:06:21 +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
f3071df403
fix next_day_at being off by a day before the rollover
2020-01-10 08:21:52 +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
c0604c596b
ignore template closing characters outside of a tag
2020-01-08 20:29:04 +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
3a27b2481f
fix days_elapsed moving backwards
2020-01-07 09:29:43 +10:00
Damien Elmes
2c5ee82dcf
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
Damien Elmes
9057c8ec85
make sure rust tests rerun on source change; don't hide output
2020-01-07 09:29:43 +10:00
Damien Elmes
ddb304aad2
add some more protobuf messages
2020-01-06 12:18:20 +10:00
Damien Elmes
c88694333b
update readme, remove submodule readmes
2020-01-04 12:21:58 +10:00
Damien Elmes
c0438373dd
move license info into one place
2020-01-03 09:41:30 +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