Commit graph

6878 commits

Author SHA1 Message Date
Damien Elmes
82f4e65d0f Merge pull request #1090 from glutanimate/filtered-deck-dialog-hooks
Add hooks to the filtered deck dialog
2021-03-26 10:28:23 +10:00
Damien Elmes
834a7217d6 embed strings.json into write_json.rs
It appears that including the build script as a dependency is not
enough to make the file available at runtime, so the build breaks
if ts/ is built first.
2021-03-26 09:55:21 +10:00
Damien Elmes
0c63a7c8c4 rework translation handling
Instead of generating a fluent.proto file with a giant enum, create
a .json file representing the translations that downstream consumers
can use for code generation.

This enables the generation of a separate method for each translation,
with a docstring that shows the actual text, and any required arguments
listed in the function signature.

The codebase is still using the old enum for now; updating it will need
to come in future commits, and the old enum will need to be kept
around, as add-ons are referencing it.

Other changes:

- move translation code into a separate crate
- store the translations on a per-file/module basis, which will allow
us to avoid sending 1000+ strings on each JS page load in the future
- drop the undocumented support for external .ftl files, that we weren't
using
- duplicate strings in translation files are now checked for at build
time
- fix i18n test failing when run outside Bazel
- drop slog dependency in i18n module
2021-03-26 09:41:32 +10:00
Glutanimate
63120e3461 Run isort 2021-03-25 04:46:22 +01:00
Glutanimate
5be90e1a61 Supply deck ID in hook, so that add-ons may update deck config dict
(for newly created filtered decks where the deck ID is not yet set
in the FilteredDeckForUpdate object)
2021-03-25 02:33:15 +01:00
Glutanimate
9548b2c3f1 Fix (?) operation output type hint 2021-03-25 02:28:58 +01:00
Glutanimate
92a8b9c1c0 Add three filtered deck dialog hooks
Similar to deckconf hooks
2021-03-25 02:28:01 +01:00
Damien Elmes
46dc212207 move markdown dep into pylib 2021-03-24 22:19:14 +10:00
Damien Elmes
be9e46a9ea rework filtered deck screen & search errors
- Filtered deck creation now happens as an atomic operation, and is
undoable.
- The logic for initial search text, normalizing searches and so on
has been pushed into the backend.
- Use protobuf to pass the filtered deck to the updated dialog, so
we don't need to deal with untyped JSON.
- Change the "revise your search?" prompt to be a simple info box -
user has access to cancel and build buttons, and doesn't need a separate
prompt. Tweak the wording so the 'show excluded' button should be more
obvious.
- Filtered decks have a time appended to them instead of a number,
primarily because it's easier to implement. No objections going back to
the old behaviour if someone wants to contribute a clean patch.
The standard de-duplication will happen if two decks are created in the
same minute with the same name.
- Tweak the default sort order, and start with two searches. The UI
will still hide the second search by default, but by starting with two,
the frontend doesn't need logic for creating the starting text.
- Search errors now have their own error type, instead of using
InvalidInput, as that was intended mainly for bad API calls. The markdown
conversion is done when the error is converted from the backend, allowing
errors to printed as a string without any special handling by the calling
code.

TODO: when building a new filtered deck, update_active() is clobbering
the undo log when the overview is refreshed
2021-03-24 22:04:35 +10:00
Damien Elmes
53f8e06172 rename&simplify the deck/config type aliases
- QueueConfig is only used by the scheduler
- DeckConfig was being used in places that Config should have been used
- Add "Dict" to the name so that the bare name is free for use with a
stronger type.
2021-03-24 16:29:02 +10:00
Damien Elmes
6dc98b8010 dyndeckconf -> filtered_deck 2021-03-24 13:17:12 +10:00
Damien Elmes
d80ed5ff3b support undo of filtered deck build/empty 2021-03-24 12:56:06 +10:00
Damien Elmes
14026f2811 move filter code into scheduler/ 2021-03-23 23:55:28 +10:00
Damien Elmes
1d1f18bd59 nest search term message/order enum 2021-03-23 23:28:50 +10:00
Damien Elmes
5bbfdd56d1 Merge pull request #1088 from RumovZ/overwrite-saved-search
Add context action 'Update with Current Search'
2021-03-23 20:56:18 +10:00
RumovZ
d8bfbd8a82 Add context action 'Update with Current Search' 2021-03-23 11:20:46 +01:00
Damien Elmes
53d4a42d22 tweak AbortAddonImport docstring 2021-03-23 19:31:24 +10:00
Damien Elmes
7ef09375a6 Merge pull request #1086 from glutanimate/abort-addon-import-exception
Add an exception that allows add-ons to abort early
2021-03-23 19:28:13 +10:00
Damien Elmes
81467a436d Merge pull request #1084 from hgiesel/svelte-hooks
Svelte "hooks" - Streamline method of getting async data
2021-03-23 19:22:46 +10:00
Damien Elmes
c90ab022c9 add hook to modify browser row content 2021-03-23 19:13:52 +10:00
Damien Elmes
3f03b5f06a only declare rows deleted if they're the result of a NotFound error
If it's some other error like the DB suddenly becoming accessible,
we don't want to scare the user into thinking their data was deleted,
and we want to know what the error was without popping up tens of
message boxes for each row.
2021-03-23 19:04:15 +10:00
Damien Elmes
d7a577e3af move browser_row method into search service
For want of a better place to put it. Also split the node conversion
into a separate file.
2021-03-23 18:55:05 +10:00
Damien Elmes
970543ee26 move activeCols into config/ 2021-03-23 18:40:50 +10:00
Damien Elmes
2bffcba345 Merge pull request #1082 from RumovZ/backend-rows
Backend rows
2021-03-23 18:31:42 +10:00
Henrik Giesel
730d75a6c4 Satisfy svelte_check 2021-03-22 15:41:43 +01:00
Henrik Giesel
0a882175e5 Add type signatures to asyncReactive 2021-03-22 15:30:35 +01:00
Henrik Giesel
8bf68ea7ca Satisfy formatter 2021-03-22 15:25:49 +01:00
Henrik Giesel
e973b555f3 Fix asyncReactive detection of loading
- Removed `success` store as it wouldn't work
- We should check for a value in error instead
2021-03-22 15:23:48 +01:00
Henrik Giesel
b52d05431d Partially revert "Make sure RangeBox does not trigger update on stores on creation"
This reverts commit 8232e2f5ed.
2021-03-22 15:11:36 +01:00
Glutanimate
1adc4ae908 Add an exception that allows add-ons to abort early 2021-03-22 14:53:04 +01:00
Damien Elmes
15c76c1a09 switch DeckID to a NewType
Not sure at this point whether this will buy us much in the Python
codebase over a simple int alias, but let's give it a go.
2021-03-22 23:43:54 +10:00
Damien Elmes
fafe30f4b4 use perform_op() for deck creation 2021-03-22 23:17:07 +10:00
RumovZ
8b21c1ad7c Use raw sort field text in note_field_str() ...
... instead of the preprocessed note.sort_field. That means we always
have to load the note with fields.
2021-03-22 12:12:52 +01:00
RumovZ
4c169106af Return input if decode_entities() encounters error 2021-03-22 12:08:22 +01:00
Damien Elmes
12e1ca0c2f deck rename with perform_op() 2021-03-22 20:38:51 +10:00
RumovZ
c5b8813b4e Show tooltip on browser cells
Oftentimes, a cell's text is too long to be fully displayed inside the
table, so show it as a tooltip.
2021-03-22 09:31:07 +01:00
Damien Elmes
42d007d94d use perform_op() for deck drag&drop 2021-03-22 18:23:56 +10:00
RumovZ
38f03650c9 Fix date_string using FixedOffset instead of Local 2021-03-22 08:50:54 +01:00
Henrik Giesel
12123fc68b Remove assignment to preferencesPromise: getPreferences will only be called once 2021-03-22 04:03:52 +01:00
Damien Elmes
13255ed096 remove the default question fade
Fading was primarily motivated by wanting to prevent ugly redraw,
but we wait for both MathJax and images now.
2021-03-22 12:11:00 +10:00
Henrik Giesel
0368bac9be Move async and asyncReactive to sveltelib
- sveltelib is a lib for component-agnostic svelte utils
2021-03-22 03:06:53 +01:00
Damien Elmes
815fd2df0b delay scrolling to answer until images load 2021-03-22 12:05:18 +10:00
Henrik Giesel
c44340e761 Avoid duplicate initial fetching with asyncReactive 2021-03-22 02:58:19 +01:00
Henrik Giesel
8232e2f5ed Make sure RangeBox does not trigger update on stores on creation 2021-03-22 02:50:16 +01:00
Henrik Giesel
8cb7d4a8ad Create search and days writable in GraphsPage to allow browserSearch to work 2021-03-22 02:44:08 +01:00
Damien Elmes
095d655a50 fix .csv import not using faster QPlainTextEdit 2021-03-22 11:26:49 +10:00
Damien Elmes
2c76e70b32 fix text not appearing after .apkg import 2021-03-22 11:24:53 +10:00
Damien Elmes
b9421ac38b fix note importing detecting changes due to unicode differences
https://forums.ankiweb.net/t/python-checksum-rust-checksum/8195/16
2021-03-22 10:56:24 +10:00
Henrik Giesel
c7a6665307 Fix syntax error introduced by rebase 2021-03-22 01:44:07 +01:00
Henrik Giesel
1e5bb2f226 Create BrowserSearch component, because we cannot read from stores within slotted content 2021-03-22 01:42:23 +01:00