Damien Elmes
57fada3be0
move action names out of undo.ftl into actions.ftl
2021-05-08 17:11:54 +10:00
Damien Elmes
2a6cd2ff72
default to the v2 scheduler in new collections
...
ported from 9e91785d98
2021-05-06 19:09:28 +10:00
Damien Elmes
7f7dd7b6c9
add support for custom undo steps, and merging multiple actions
...
Allows add-on authors to define their own label for a group of undoable
operations. For example:
def mark_and_bury(
*,
parent: QWidget,
card_id: CardId,
) -> CollectionOp[OpChanges]:
def op(col: Collection) -> OpChanges:
target = col.add_custom_undo_entry("Mark and Bury")
col.sched.bury_cards([card_id])
card = col.get_card(card_id)
col.tags.bulk_add(note_ids=[card.nid], tags="marked")
return col.merge_undo_entries(target)
return CollectionOp(parent, op)
The .add_custom_undo_entry() is for adding your own custom actions.
When extending a standard Anki action, instead store `target =
col.undo_status().last_step` after executing the standard operation.
This started out as a bigger refactor that required a separate
.commit_undoable() call to be run after each operation, instead of
having each operation return changes directly. But that proved to be
somewhat cumbersome in unit tests, and ran the risk of unexpected
behaviour if the caller invoked an operation without remembering to
finalize it.
2021-05-06 16:39:06 +10:00
Damien Elmes
1802066afe
support undo for (renamed) unbury_deck() action
2021-04-30 20:03:20 +10:00
Damien Elmes
994d26937f
remove some unneeded transactions from tests
2021-04-30 19:18:02 +10:00
Damien Elmes
65e2bfb16d
fix invalid outer transaction in clear_unused_tags()
2021-04-30 19:09:02 +10:00
Damien Elmes
09f3e1db07
empty/restore media trash shouldn't clear undo
2021-04-30 19:07:30 +10:00
Damien Elmes
e161b9049a
undoing of notetype fields
...
- fix stale cache issue
- update add cards screen in response to op changes
2021-04-30 17:15:59 +10:00
Damien Elmes
8a9796ee5a
update GUI to allow notetype addition undo
...
- backend now updates current notetype as part of addition
- frontend no longer implicitly adds, so we can assign a new name and
add in a single operation
2021-04-30 15:58:08 +10:00
Damien Elmes
df068c2a17
update backend to support undoing of notetype changes
2021-04-30 12:54:59 +10:00
Damien Elmes
03ca227fd4
make it more ergonomic to search directly via nodes in Rust
2021-04-30 11:37:55 +10:00
Damien Elmes
acac1ae1f2
move note/card removal for notetype out of storage layer
2021-04-29 19:44:09 +10:00
Damien Elmes
df42d466b9
make config prefix removal undoable
2021-04-29 19:16:02 +10:00
Damien Elmes
b3d3768baa
use aux var when retrieving last deck for notetype
...
The adding case was already covered by defaults_for_adding(), but we
the code was using the old variable when adding new cards to an existing
note.
2021-04-29 19:15:27 +10:00
Damien Elmes
9c3cf8b25b
move pub functions to top of notetype/mod.rs
2021-04-29 15:32:59 +10:00
Damien Elmes
adec449ad4
move pub functions to top of notes/mod.rs
2021-04-29 14:08:15 +10:00
Damien Elmes
4f128aa330
confirm deletion is requiring a full sync
2021-04-28 22:21:16 +10:00
Damien Elmes
4216dd6d7e
add some unit tests to deck config updating
2021-04-28 22:00:39 +10:00
Damien Elmes
77038ae554
DeckConfId -> DeckConfigId
2021-04-28 21:09:26 +10:00
Damien Elmes
985d256e7a
sort deck on config update; fix id not being updated after deletion
2021-04-28 21:08:09 +10:00
Damien Elmes
d76ef9cde5
update Rust deps
...
- tokio 1.0
- updated reqwest, thanks to Rumo
- other minor dep updates
the reqwest build file has been split into two, as it was awkward
to manually update the combined file, and the platform gate is now
on the target in rslib/
2021-04-27 22:18:12 +10:00
Damien Elmes
ddf7c5bb89
update translations
2021-04-25 22:06:05 +10:00
Damien Elmes
a7ef410615
hook new deck config screen up behind an env var
2021-04-22 10:59:16 +10:00
Damien Elmes
592e13e967
deckconf -> deckconfig
2021-04-20 21:54:24 +10:00
Damien Elmes
2fd7e8539d
change detection needs to ignore collection mtime bump
2021-04-20 19:52:47 +10:00
Damien Elmes
293cbfb024
check if deck changed before saving
2021-04-20 19:50:31 +10:00
Damien Elmes
05f75c6194
implement deck config updating
2021-04-20 14:57:44 +10:00
Damien Elmes
4eaddde127
remove some imports duplicated by prelude
2021-04-19 18:22:43 +10:00
Damien Elmes
e287ebe988
Merge pull request #1138 from RumovZ/introduced
...
Add search keyword for "first review in x days"
2021-04-19 18:22:15 +10:00
RumovZ
d4d48676ad
Use arg name instead of repeating it in format!()
2021-04-19 08:58:33 +02:00
RumovZ
af1111a91e
Use timestamp adding for writing cutoff
2021-04-19 08:44:13 +02:00
RumovZ
e1e25d2b6a
Add sql condition for speedup in write_introduced
2021-04-19 08:43:32 +02:00
RumovZ
eb9fbb9c0f
Add sidebar filter "first review today"
2021-04-18 13:27:10 +02:00
RumovZ
f514697a90
Add sqlwriter test for introduced
2021-04-18 12:32:02 +02:00
RumovZ
6cfccf63bd
Add cutoff_in_secs_from_days() helper method
2021-04-18 12:25:44 +02:00
RumovZ
27b658fc02
Add search keyword introduced
...
Filters for cards that had their first review within the last x days.
2021-04-18 12:14:18 +02:00
Damien Elmes
363a843d07
tidy up Rust imports
...
rustfmt can do this automatically, but only when run with a nightly
toolchain, so it needs to be manually done for now - see rslib/rusfmt.toml
2021-04-18 18:38:54 +10:00
Damien Elmes
06dea7aa0a
start on making deck config and schema/mod changes undoable
...
+ move timestamps into a struct in a separate file for convenience
2021-04-18 17:33:12 +10:00
Damien Elmes
1f0ff0f22d
add schema change prompt to removal, tweak return struct
2021-04-18 17:33:12 +10:00
RumovZ
6b5a73d3e7
Maybe normalize name when preparing deck update
2021-04-18 09:16:43 +02:00
RumovZ
6864cdb62e
Remove redundant imports
2021-04-18 08:43:46 +02:00
Damien Elmes
6eb28909da
as_str() -> as_native_str()
2021-04-18 09:33:39 +10:00
Damien Elmes
eece6125d8
hide NativeName inner value, and require explicit accessors
2021-04-18 09:29:35 +10:00
Damien Elmes
e0cf897104
create_missing_parents() can take a native name directly
2021-04-18 09:20:23 +10:00
RumovZ
32edd2b554
Give deck.name the newtype NativeDeckName
...
The deck name must be constructed by calling associated functions of
NativeDeckName, unless the name is guaranteed to be valid machine
name (like "Default").
NativeDeckName exposes methods to mutate the deck name and return
the human name.
The storage routines take &strs, but those should be slices of
NativeDeckNames to ensure machine form and normalization.
2021-04-17 22:47:04 +02:00
Damien Elmes
cd1c4d0941
Merge pull request #1132 from RumovZ/refactor-decks
...
Refactor decks/mod.rs
2021-04-17 18:21:56 +10:00
Damien Elmes
0645cb29b7
fix parent limit handling
...
We can't calculate it on the backend, as adjusting a config may alter
the parent limit.
Also fix hidden deck name and missing separator.
2021-04-17 12:53:59 +10:00
RumovZ
bca111e6b5
Split Col impls in decks in pub and private blocks
2021-04-16 08:30:16 +02:00
RumovZ
6a974a49bb
Remove some imports in decks which are in prelude
2021-04-15 20:07:16 +02:00
RumovZ
7a159137cd
Create decks/stats.rs
2021-04-15 20:06:16 +02:00
RumovZ
982ac0f342
Move some methods into decks/counts.rs
2021-04-15 19:53:11 +02:00
RumovZ
3f80addab7
Tidy up blocks and imports in decks/mod.rs
2021-04-15 19:43:35 +02:00
RumovZ
c2a0a0cb08
Create decks/remove.rs
2021-04-15 19:35:54 +02:00
RumovZ
dcb398558e
Create decks/add.rs
2021-04-15 19:29:52 +02:00
RumovZ
6aeea5a829
Create decks/reparent.rs
2021-04-15 19:17:43 +02:00
RumovZ
e4bbb9eaa3
Create decks/name.rs
2021-04-15 18:46:01 +02:00
Damien Elmes
29d24bb2ca
don't let manual rescheduling affect card stats average
...
https://forums.ankiweb.net/t/set-due-date-has-a-weird-effect-on-cards-table/9289/2
2021-04-15 18:51:39 +10:00
Damien Elmes
57a1651113
deck config prototype work in progress
...
Still in the early stages, and not hooked up yet.
2021-04-14 22:33:10 +10:00
RumovZ
564aaafa58
Drop ANDs and optional quotes when normalising
2021-04-14 09:53:45 +02:00
Damien Elmes
9f218a5713
fix misnamed timer property in deck config
...
The old JSON stored it as an int, but it's used as a boolean
2021-04-13 14:04:33 +10:00
RumovZ
d58af0dd95
Merge branch 'master' into backend-columns
2021-04-11 11:18:15 +02:00
RumovZ
531e08a711
Remove from_config variant in pb SortOrder
...
Instead, fetch the config order on the frontend and pass a builtin
variant into the backend.
That makes the following unnecessary:
* Resolving the config sort in search/mod.rs
* Deserializing the Column enum
* Config accessors for the sort columns
2021-04-10 11:13:42 +02:00
RumovZ
1891ecf6e6
Rename SearchItems to ReturnItemtype
2021-04-10 10:14:41 +02:00
RumovZ
ee83528da2
Remove internal clones of pb BrowserRow structs
2021-04-10 09:49:29 +02:00
RumovZ
dd4f08a90f
Rename column label fields
2021-04-10 09:14:20 +02:00
RumovZ
e2b1c0da51
Remove unused Serialize
2021-04-10 09:13:48 +02:00
RumovZ
94d52de9da
Store active browser columns in col state
2021-04-09 22:53:02 +02:00
RumovZ
18b3938025
Remove superfluous muts
2021-04-09 22:51:18 +02:00
RumovZ
c81cf7ffaf
Move Column logic into main rslib
2021-04-09 19:09:48 +02:00
RumovZ
3b23248983
Remove pb SortKind enum and use pb Columns instead
2021-04-09 18:50:30 +02:00
RumovZ
93c6e258aa
Merge SortKind enum into Column enum
2021-04-09 18:03:29 +02:00
RumovZ
e28f2320b8
Unify state columns
...
* Remove duplicate backend columns
* Remove duplicate column routines
* Move columns on frontend from state to model
* Generate available columns from Colum enum
* Add second column label for notes mode
2021-04-08 23:48:24 +02:00
RumovZ
8c499ed5bf
Rename columns for future mode-independent use
2021-04-08 23:43:48 +02:00
RumovZ
dc9a7b024e
Merge browser row str methods
2021-04-08 20:45:47 +02:00
RumovZ
3845ccc846
Add card mod column for notes mode
2021-04-08 20:14:10 +02:00
RumovZ
f4081084a9
Add deck column for notes mode
2021-04-08 19:46:06 +02:00
RumovZ
0acab27b0a
Merge row contexts
2021-04-08 13:51:46 +02:00
RumovZ
0ff193cd5d
Add enum for column sorting
2021-04-08 11:40:24 +02:00
RumovZ
47eeb5da14
Add enum for column alignment
2021-04-08 11:28:29 +02:00
RumovZ
7ea1dbd4a4
Move BrowserColumn into BrowserColumns message
2021-04-08 10:16:06 +02:00
RumovZ
c316783517
Fix deck column serialization string
2021-04-06 23:03:30 +02:00
RumovZ
82b9c9f320
Add column logic on backend
2021-04-06 19:46:12 +02:00
RumovZ
d70a7eb9a4
Make Column a strum
2021-04-06 16:54:09 +02:00
Damien Elmes
ae7a327cae
current deck change is now undoable
...
- make sure we set flag in changes when config var changed
- move current deck get/set into backend
- set_config() now returns a bool indicating whether a change was
made, so other operations can be gated off it
- active decks generation is deferred until sched.reset()
2021-04-06 21:52:06 +10:00
Damien Elmes
1b81653e0e
update scheduling ops
...
- migrate to CollectionOp()
- return actual change count when suspending/burying
- add helper to convert vec to vec of newtype
2021-04-06 16:38:42 +10:00
Damien Elmes
783e0ec224
update note ops
...
remove_note() now returns the count of removed cards, allowing us
to unify the tooltip between browser and review screen
I've left the old translation in - we'll need to write a script at
one point that gathers all references to translations in the code,
and shows ones that are unused.
2021-04-06 14:56:36 +10:00
Damien Elmes
c3b0fb35b7
more perform_op() tweaks
...
- pass the handler directly
- reviewer special-cases for flags and notes are now applied at
call site
- drop the kind attribute on OpChanges which is not needed
2021-04-06 10:14:11 +10:00
Damien Elmes
085f63ac1b
cache scheduling info
...
Saves us having to recalculate it for each browser row
2021-04-05 17:09:53 +10:00
Damien Elmes
4b64339a8b
switch next_day_at to a newtype
2021-04-05 16:17:26 +10:00
Damien Elmes
786069e89e
avoid fetching decks for each row
...
Like notetypes, there is a col.get_deck() routine which caches
fetches, so that successive fetches are cheap. This makes it simpler
to just fetch the deck at the start.
We were also attempting to fetch a deck with id 0 for each row; I've
changed this so that we only fetch it if the id is non-zero.
I18n uses an Arc internally, so it is cheap to clone. This allow us
to drop the lifetime specifiers on the context structures.
2021-04-05 15:13:32 +10:00
Damien Elmes
3ab53c77c7
add booleans for various screens to OpChanges
...
The backend knows exactly which op has executed, and it saves us having
to re-implement this logic on each client.
Fixes the browser table refreshing when toggling decks.
2021-04-05 14:28:56 +10:00
Damien Elmes
bc0306032e
add a unit test for multiple mutations
2021-04-05 11:52:23 +10:00
Damien Elmes
18ba5554ca
undo support for tag collapse; expand->collapse for consistency w/ decks
2021-04-05 11:47:12 +10:00
Damien Elmes
dc5b900056
add routine to set deck collapse state
...
Updating a deck via protobuf is now exposed on the backend, but not
currently on the frontend - I suspect we'll be better off writing
separate routines for the actions we need instead, and we get a better
undo description for free.
This is currently causing an ugly redraw in the browse screen, which
will need fixing.
2021-04-05 11:19:04 +10:00
Damien Elmes
510f24bf93
embed deck config and expose to frontend
2021-04-04 22:52:53 +10:00
Damien Elmes
7be221aca2
embed notetype messages
2021-04-04 21:57:17 +10:00
Damien Elmes
3d1ddf9762
embed deck messages
2021-04-04 21:41:16 +10:00
Damien Elmes
b10e8dd347
expose read-only access to new notetype objects
2021-04-04 20:45:37 +10:00
Damien Elmes
282ae2285a
expose read-only access to new deck objects
2021-04-04 20:39:56 +10:00
Damien Elmes
b04ac71a2c
recognize select statements with a leading newline from old stats screen
2021-04-03 23:23:33 +10:00
Damien Elmes
e89c21d778
fix error after undoing default deck deletion
2021-04-03 16:54:02 +10:00
Damien Elmes
cb9d5b9f28
simplify errors
...
- use a flat enum instead of oneof messages, most of which were empty
- tidy up the Python side
2021-04-03 16:06:46 +10:00
Damien Elmes
87acb6800b
rename backend/err.rs -> error.rs
2021-04-03 14:47:52 +10:00
Damien Elmes
d7237be205
use perform_op() for undo()
...
Instead of manually updating the UI after undoing, we just rely
on the same change notification infrastructure regular operations
use.
2021-04-03 14:38:49 +10:00
Damien Elmes
a9fd3c90ef
make sure we don't invoke second search in v1 scheduler
2021-04-02 21:05:22 +10:00
Damien Elmes
b2bfd940e7
move filtered deck labels to backend
...
- use strum to generate an iterator for the protobuf enum so we don't
forget to add new labels if extending in the future
- no add-ons appear to be using dynOrderLabels(), so it has been removed
@RumovZ perhaps a similar approach might work for listing the available
browser columns as well?
2021-04-01 23:53:38 +10:00
Damien Elmes
85ea6b433c
i18n error shown when attempting to rebuild normal deck
2021-04-01 22:55:10 +10:00
Damien Elmes
c85811a104
merge the filtered deck errors into an enum
...
Fixes the wrong message being shown when trying to move cards to a
filtered deck
2021-04-01 22:30:00 +10:00
Damien Elmes
4462a533ff
fix a clippy lint
2021-04-01 18:01:31 +10:00
Damien Elmes
69d7c64d14
convert card template error to tuple, and report notetype name in error
...
Older translations will note have the $notetype variable, but that is
not an error in Fluent - it would only cause problems if we tried to
use the new string on older Anki versions.
2021-04-01 17:59:33 +10:00
Damien Elmes
32cc47b8cb
convert Json and Proto errors to tuple
2021-04-01 17:45:12 +10:00
Damien Elmes
7e285f5ec8
tuple type for IoError
2021-04-01 17:40:35 +10:00
Damien Elmes
f9cd39114b
tuple type for InvalidInput
2021-04-01 17:37:18 +10:00
Damien Elmes
cfe02d5df4
switch DbError to tuple type
2021-04-01 17:34:03 +10:00
Damien Elmes
2392c9b2b5
drop dependency on failure crate
2021-04-01 17:21:13 +10:00
Damien Elmes
8c635f9337
move sync/network errors into separate file
2021-04-01 17:02:54 +10:00
Damien Elmes
f0ecf8f3b9
move DB error into separate file; add InvalidRegex error
2021-04-01 16:28:23 +10:00
Damien Elmes
0e40d22f2c
split search errors into separate file
2021-04-01 16:18:28 +10:00
Damien Elmes
cc54a9251e
crate::err -> crate::error
2021-04-01 16:07:13 +10:00
RumovZ
d87f80c74a
Refactor get_row_color()
2021-03-31 08:56:54 +02:00
RumovZ
ad7563effb
Pass Column by value
2021-03-31 00:02:10 +02:00
RumovZ
6233a125fc
Add note interval column
2021-03-30 23:44:35 +02:00
RumovZ
fb4dd05dd4
Refactor note_ease_str()
2021-03-30 23:44:16 +02:00
RumovZ
af153f9c09
Fix comment typo
2021-03-30 21:40:35 +02:00
RumovZ
ca87a6fc45
Add note due column
2021-03-30 21:39:15 +02:00
RumovZ
44ae21c0b1
Refactor card_due_str()
2021-03-30 20:50:09 +02:00
RumovZ
9e34c0f80c
Rename browser_rows to browser_table
...
Reflects the addition of column handling.
2021-03-30 12:08:35 +02:00
RumovZ
880e6dc651
Add browser column enum for backend
2021-03-30 11:59:52 +02:00
RumovZ
34d3d24003
Add note lapses column
2021-03-29 16:06:15 +02:00
RumovZ
1eb1747365
Add note reps column
2021-03-29 15:52:02 +02:00
Damien Elmes
7323866a88
rename BrowserCardState
...
Use a more verbose name, and use 'note' rather than 'card', so we
can rely on the default of False
2021-03-29 17:12:45 +10:00
RumovZ
1f79a8766d
squash merge browser refactor
...
Closes #1100
2021-03-29 16:14:54 +10:00
Damien Elmes
d793c30526
switch NoteType to Notetype
...
When used as a variable, we were typically calling it a 'notetype', not
a 'note type'.
2021-03-27 22:03:19 +10:00
Damien Elmes
6b72aaf8c2
ID -> Id in protobuf and Python
...
follow-up to a90d5aa359
2021-03-27 21:38:20 +10:00
Damien Elmes
d52a34d414
update to latest Rust
2021-03-27 20:49:10 +10:00
Damien Elmes
cefa8d0e9d
fix some clippy lints in tests
2021-03-27 20:44:31 +10:00
Damien Elmes
e934bd8e9a
fix more issues uncovered by the latest clippy
2021-03-27 20:25:34 +10:00
Damien Elmes
a90d5aa359
use mixed case for abbreviations in Rust code
...
So, this is fun. Apparently "DeckId" is considered preferable to the
"DeckID" were were using until now, and the latest clippy will start
warning about it. We could of course disable the warning, but probably
better to bite the bullet and switch to the naming that's generally
considered best.
2021-03-27 19:53:33 +10:00
Damien Elmes
effb0e2ab8
address some new clippy lints
2021-03-27 19:28:19 +10:00
Damien Elmes
66d84336d7
update to latest Fluent
2021-03-27 13:24:11 +10:00
Damien Elmes
9a7f0f9f5d
i18n->tr in rslib/ to match Python/TS code
2021-03-27 12:09:51 +10:00
Damien Elmes
4676d2f3b1
drop the legacy enum from rslib, and pass separate module/message idx
2021-03-27 11:56:31 +10:00
Damien Elmes
cf32bb034a
update remaining TR references in rslib
2021-03-27 11:18:34 +10:00
Damien Elmes
27c35cf2c5
update multi-arg TR references, where some needed reordering
2021-03-27 10:49:40 +10:00
Damien Elmes
d7005803bc
update 1 arg tr strings in rslib
2021-03-27 10:39:53 +10:00
Damien Elmes
51f5df600f
update no-arg TR references in rslib/
2021-03-26 23:16:08 +10:00
Damien Elmes
26d265ce08
write methods into generated.rs
2021-03-26 23:07:18 +10:00
Damien Elmes
5e70b9ff0e
fix warning in latest Rust
2021-03-26 23:06:15 +10:00
Damien Elmes
0006a385e1
allow js to request specific i18n modules
...
Brings the payload on the congrats page with a non-English language
down from about 150k to 15k
2021-03-26 21:43:36 +10:00
Damien Elmes
83ed037b83
Merge pull request #1094 from shaunren/fix-tts-html
...
Fix extraneous whitespaces from strip_html_for_tts
2021-03-26 11:00:41 +10:00