Commit graph

11236 commits

Author SHA1 Message Date
Damien Elmes
2c2500db02 Fix formatting 2024-09-22 18:36:01 +10:00
Expertium
c5d80e85df Recall rate -> retention rate (#3433)
Let's keep the terminology consistent
2024-09-22 18:24:52 +10:00
Ben Nguyen
007eb3c476 Bug with “A 100 day interval will become X days.” (#3432)
* add name to about page

* use two decimal retention for calculations

* Update CONTRIBUTORS

* format

* Update CONTRIBUTORS

* Update CONTRIBUTORS

* Update CONTRIBUTORS
2024-09-22 18:24:32 +10:00
Arthur Milchior
85494195f1 If deck options are modified, ask before closing (#3410)
* If deck options are modified, ask before closing

This imitates the way the note editor behaves. If a user assumes by
error that chanhges are automatically saved, it ensures they won't
lose them.

Also, this will eventually allows to have the same feature on
AnkiDroid. While, currently, we always ask the user whether they want
to close the deck options, even when there are no modification, which
seems to regularly frustate users (including myself).

I'm new to Svelte, please let me know whether there is a better way to
obtain the information from Svelte state that I missed.

Note that I ensured that only a boolean can be obtained. I didn't
cause the whole state to be accessible. May be useful for some
add-ons, I guess, but risks breaking too much things.

Regarding the deckoptions.py, I tried to imitate addcards.py way to
check whether the add card view can be closed. Reusing the same
function and variable name when possible.

* Update qt/aqt/deckoptions.py (dae)
2024-09-22 18:07:24 +10:00
Kris Cherven
9b877c8f52 Fix Qt desktop file name warning (#3419)
* Fix Qt desktop file name warning

* Update CONTRIBUTORS
2024-09-22 18:02:35 +10:00
Taylor Obyen
e339460052 Track Current Deck Context from Browser (#3385)
* Update current deck from browser

* Update contributors

* Fix formatting

* Allow Add window to be opened with parameters

* Add explicit return

* Fix formatting

* Accomplish context in a more simple fashion

* Implement context menu add

* Fix contributors

* Add additional context

* Removed uneeded logic and inlined redundant funcs

* Resolve contributors conflict

* Update qt/aqt/deckbrowser.py

* Update qt/aqt/deckbrowser.py
2024-09-22 18:02:17 +10:00
Damien Elmes
6f4320c1b5 Update translations 2024-09-20 22:04:52 +10:00
user1823
51fd6811b1 Add an option to show image from editor in folder (#3412)
* Add "Show in folder" option to images in editor

Credits: @abdnh's Reveal in File Manager add-on (https://github.com/abdnh/anki-misc/tree/master/reveal_in_file_manager)

* Refactor
2024-09-20 21:38:44 +10:00
Abdo
d9dbda7e31 Call the profile_did_open() hook earlier (#3421) 2024-09-20 21:22:27 +10:00
Abdo
6c04066b5c Fix FSRS progress update issues (#3420)
* Delay optimal FSRS params alert to ensure progress updates are reported

* Ensure progress updates arrive synchronously
2024-09-20 21:18:02 +10:00
sorata
e062e3039b Update tooltip text (#3418)
* Update deck-config.ftl

* Update deck-config.ftl

* remove the warning
2024-09-20 21:13:35 +10:00
Kris Cherven
b6dc5a3793 Fix pasting from the primary selection (#3413)
* Fix clipboard pasting from the primary selection

* Small renaming

* Fix submodules

* Fix pylint false positive
2024-09-20 21:00:12 +10:00
Taylor Obyen
441f62f656 Fix occlusion rounding bug (#3400)
* Fix occlusion rounding bug

* Fix contributors
2024-09-20 20:48:44 +10:00
Luke Bartholomew
e6040adda6 Add comment about the usage of the input field in the statistics page (#3394) (#3398)
* Add comment about the usage of the input field in the statistics page (#3394)

* Fix formatting issues (#3394)

* Update ts/routes/graphs/RangeBox.svelte

Co-authored-by: Mike Hardy <github@mikehardy.net>

* Update ts/routes/graphs/RangeBox.svelte

Co-authored-by: Mike Hardy <github@mikehardy.net>

---------

Co-authored-by: Damien Elmes <dae@users.noreply.github.com>
Co-authored-by: Mike Hardy <github@mikehardy.net>
2024-09-20 20:47:04 +10:00
Ben Nguyen
4d1a0d6045 Possible to show “last” subdeck name in Browser? (#3387)
* elide middle of deck names

* Update CONTRIBUTORS

* made elide mode enum

* add elide mode field

* fix enum number

* remove dataclass decorator

* Update CONTRIBUTORS

* format rust code

* Update CONTRIBUTORS

* formatting

* Update CONTRIBUTORS

* fix type hint

* Update CONTRIBUTORS
2024-09-20 20:33:28 +10:00
Abdo
eb4e5d0fae Do not strip quotation marks from deck/tag names (#3407)
* Do not strip quotation marks from deck names

* Do not strip quotation marks from tag names
2024-09-11 03:56:09 +07:00
Damien Elmes
26d3d6aeef Update translations 2024-09-11 02:54:00 +07:00
Damien Elmes
83108a3775 Remove redundant is_finite() check 2024-09-11 02:54:00 +07:00
sorata
6c510256e2 change links to new knowledge base (#3411)
* change links to new knowledge base

* Fix formatting
2024-09-11 02:44:39 +07:00
Taylor Obyen
1663407d7e Fix ease button alignment (#3404)
* Fix ease button alignment

* Fix contributors part 2
2024-09-11 02:44:11 +07:00
Abdo
f7db3ff3c4 Fix minimum interval warning shown when FSRS is enabled (#3409) 2024-09-11 02:21:49 +07:00
Abdo
aecf231efc Stop automatically adding Image Occlusion type in Add screen (#3408) 2024-09-11 02:21:37 +07:00
Abdo
e3ed920bc4 Fix graph averages (#3406)
* Fix graph averages

* Fix formatting
2024-09-11 02:18:53 +07:00
Gregory
16770911c2 Updated error message to provide help for import if 'Legacy Import/Export' is enabled (#3399)
* Updated error message to provide additional guidance for file import issues if Legacy Import/Export is enabled

Enhanced the error message from "Unable to read file. It probably requires a newer version of Anki to import." 
  to include a suggestion for users to try unchecking 'Legacy import/export Handling' under Preferences > Editing > 
  Import/Export if they encounter the issue.

* Update CONTRIBUTORS
2024-09-11 02:06:35 +07:00
Jarrett Ye
2567ba1490 Fix/simulator crashes if no history (#3405)
* Fix/simulator crashes if no history

* ./ninja format

* remove (experimental) from ComputeOptimalRetention

* update to fsrs-rs v1.2.2
2024-09-10 23:15:33 +07:00
Damien Elmes
056a84d4f1 Bump Rust to 1.81 for latest CVE 2024-09-05 12:39:59 +07:00
Damien Elmes
3cd39ee552 Update translations 2024-09-04 12:22:53 +07:00
Damien Elmes
94a38cc7ba Dependency updates (#3403)
* Bump Python deps

Primarily for flask-cors CVE

* Bump TS deps; pin license checker

Current checker is missing the binary
https://github.com/RSeidelsohn/license-checker-rseidelsohn/issues/118

* Update Rust deps

Hyper and axum are held back as we currently make use of the older
http library that reqwest pulls in
2024-09-04 12:21:50 +07:00
Jarrett Ye
8d22175471 graduate card when user presses again or hard and has 0 learning steps (#3367)
* graduate card when user press hard and has 0 learning steps

* fix error: useless conversion to the same type

* do the same thing to again

* fix expected `Option<u32>`, found integer

* ./ninja format

* Update to FSRS-rs v1.2.0

* if else -> match

* Weight length check has been moved into FSRS (dae)

* Don't mention the number of FSRS parameters (dae)

It has changed, and may change again.
2024-08-29 22:20:11 +07:00
Arthur Milchior
ce6de7a950 Empty cards become undoable (#3386)
* Empty cards is undoable

If there was a reason for this operation not to be undoable, I can't easily guess it. My main hyposhesis was that the number of deleted card may be too big. But I realized that deleting a deck is undoable and may delete as many note.

As you may know, I realized that only the undoable operations triggered notification in AnkiDroid that we may have to update the UI. And while I just wanted to trigger more notifications, some reviewers thought it would be nicer if the operation were returning a OpChanges. So here it's done. If you would please consider merging it.

I decided to introduce a new string because the closest strings I could find currently are "Empty cards..." and the trailing commas don't seem nice in "undo". And the title, which we may not be able to reuse in all language

* Don't count cards that have already been removed (dae)
2024-08-29 20:06:41 +07:00
Abdo
59d12c7330 Fix Svelte exports not working in Deck Options (#3382) 2024-08-29 19:12:18 +07:00
bpnguyen107
83cd32480b Move 'ignore reviews before' to advanced (#3381)
* moved ignore setting to advanced

* Update CONTRIBUTORS

* Match width of other text inputs (dae)

The width was inconsistent before as well, but moving it next to
text inputs made it more obvious.
2024-08-29 19:11:56 +07:00
bpnguyen107
b9fdb9c06c .DS_Store file shown as an unused media file (#3380)
* skip ds_store file

* correct capitalization

* skip ds_store file

* correct capitalization

* Update CONTRIBUTORS
2024-08-29 18:22:23 +07:00
Abdo
8764e39062 Fix field focus lost when pressing alt in the editor (#3378) 2024-08-29 17:32:24 +07:00
Themis Demetriades
9f7ad2e0b8 Fix imports of decks with file paths using special URL characters (#3377) 2024-08-29 17:19:27 +07:00
David Culley
5113e95fa2 mypy: fix type checking error (#3365)
* refactor: fix type checking error

error: Argument 1 to "_answerCard" of "Reviewer" has incompatible type "int"; expected "Literal[1, 2, 3, 4]"  [arg-type]

* refactor: remove check that `ease` is correct number

* refactor: rename variable

* refactor: add type hint for generator function

* refactor: revise import of `functools.partial`

* refactor: invert logic of if-construct

to avoid nesting.

* refactor: properly check for `None`

* Update qt/aqt/reviewer.py
2024-08-29 17:07:06 +07:00
Jean Khawand
8b16970011 Add distroless Dockerfile and implement internal health check (#3366)
- rslib(http_server): add `is_running()` method
- rslib(sync): introduce `--healthcheck` argument for health probe in distroless
- doc(syncserver): add table comparing Dockerfile and Dockerfile.distroless
- Expand cross-platform support with distroless
- add `Dockerfile.distroless`

- Dockerfile: bump rust `1.79` to `1.80.1`
- Dockerfile: bump alpine `3.20` to `3.20.2`

Note: Implemented an internal health check because distroless images do not include curl, which is used to reduce image size and attack surface. For more details, see https://blog.sixeyed.com/docker-healthchecks-why-not-to-use-curl-or-iwr/
https://github.com/GoogleContainerTools/distroless

fix: failed: check:format:rust

typo

remove extra space

fix failed:check:format:rust

update doc

fetch `host` and `port` using envy

fix: failed: check:format:rust

Update doc + add dockerignore

- dockerignore: This helps avoid sending unwanted files and directories to the builder
- add new line
- I am still experimenting cross platform compilation, I am getting
4.337 From https://github.com/ankitects/rust-url
4.337  * [new ref]         bb930b8d089f4d30d7d19c12e54e66191de47b88 -> refs/commit/bb930b8d089f4d30d7d19c12e54e66191de47b88
4.397 error: failed to get `percent-encoding-iri` as a dependency of package `anki v0.0.0 (/app/rslib)`

still checking what could be the issue

fix: failed: check:format:dprint
2024-08-29 17:05:33 +07:00
Damien Elmes
be339f4baf Add Eros to about
A reminder that anyone who has contributed help is welcome to add themselves
in a PR.
2024-08-28 23:25:00 +07:00
Damien Elmes
dd806c07b4 Update dprint (#3376)
* Update amd64 docker container to Debian 11

This bumps the minimum required glibc to 2.29, which is 2019
Ubuntu/Fedora, and 2021 Debian.

Also remove the unused download of ninja

* Update to latest dprint

Unblocked by the glibc upgrade
2024-08-22 18:24:56 +07:00
Abdo
6872b01227 Ensure profile name is treated in a case-insensitive manner (#3372) 2024-08-22 17:35:48 +07:00
Jake Probst
666e75622a don't ignore buried cards in future due graph (#3368)
it does ignore them for the current day but not days in the future
2024-08-22 16:53:41 +07:00
David Culley
bde544d403 python: add missing type annotations for None values (#3364)
* refactor: explicitly add NoneType to type hints

If variable can be `None`, don't be implicit. Be explicit.
2024-08-22 16:03:44 +07:00
Jarrett Ye
d8ada1fe82 Update to FSRS-rs v1.1.5 (#3369) 2024-08-22 16:02:50 +07:00
Jarrett Ye
0f11c27c98 Feat/FSRS Simulator (#3257)
* test using existed cards

* plot new and review

* convert learning cards & use line chart

* allow draw multiple simulations in the same chart

* support hide simulation

* convert x axis to Date

* convert y from second to minute

* support clear last simulation

* remove unused import

* rename

* add hover/tooltip

* fallback to default parameters

* update default value and maximum of deckSize

* add "processing..."

* fix mistake
2024-08-22 15:34:19 +07:00
Damien Elmes
c03e36ab48 'card type, then order gathered'
https://forums.ankiweb.net/t/rename-card-type-to-card-type-then-order-gathered/48046
2024-08-19 13:24:52 +07:00
bpnguyen107
5873a29360 Hide right click copy option in deck list (#3363)
* hide copy if nothing selected

* Update CONTRIBUTORS

* type hint

* Update CONTRIBUTORS
2024-08-17 13:18:46 +07:00
bpnguyen107
1e4bbfb069 Right click context menu on images not useful (#3362)
* right click and copy on image works

* renamed helper fn

* separated functionality of copy and copy image

* Update CONTRIBUTORS

* snake case

* Update CONTRIBUTORS
2024-08-17 13:18:07 +07:00
David Culley
7cbb72c275 chore: add initial configuration for pyright (#3361)
If you don't use Visual Studio Code as your text editor, and therefore
can't use the Pylance extension, but nonetheless use `pyright` as a CLI
application.
2024-08-17 13:10:02 +07:00
David Culley
d93e9fd2e6 chore: add mypy's cache to .gitignore file (#3360) 2024-08-17 13:09:30 +07:00
Jake Probst
41f981aa6d load balancer! (#3230)
* start of load balancer

* add configuration options; option to load balance per deck

* formatting

* clippy

* add myself to contributors

* cleanup

* cargo fmt

* copyright header on load_balancer.rs

* remove extra space

* more formatting

* python formatting

* ignore this being None

only doing this cause python has awful lambdas and can't
loop in a meaningful way without doing this

* only calculate notes on each day if we are trying to avoid siblings

* don't fuzz intervals if the load balancer is enabled

* force generator to eval so this actually happens

* load balance instead of fuzzing, rather than in addition to

* use builtin fuzz_bounds rather than reinvent something new

* print some debug info on how its load balancing

* clippy

* more accurately load balance only when we want to fuzz

* incorrectly doublechecking the presence of the load balancer

* more printfs for debugging

* avoid siblings -> disperse siblings

* load balance learning graduating intervals

* load balancer: respect min/max intervals; graduating easy should be at least +1 good

* filter out after-days under minimum interval

* this is an inclusive check

* switch load balancer to caching instead of on the fly calculation

* handle case where load balancer would balance outside of its bounds

* disable lb when unselecting it in preferences

* call load_balancer in StateContext::with_review_fuzz instead of next to

* rebuild load balancer when card queue is rebuilt

* remove now-unused configuration options

* add note option to notetype to enable/disable sibling dispersion

* add options to exclude decks from load balancing

* theres a lint checking that the link actually exists so I guess I'll add the anchor back in later?

* how did I even update this

* move load balancer to cardqueue

* remove per-deck balancing options

* improve determining whether to disperse siblings when load balancing

* don't recalculate notes on days every time

* remove debug code

* remove all configuration; load balancer enabled by default; disperse siblings if bury_reviews is set

* didn't fully remove caring about decks from load balancer sql query

* load balancer should only count cards in the same preset

* fuzz interval if its outside of load balancer's range

* also check minimum when bailing out of load balancer

* cleanup; make tests happy

* experimental weight-based load balance fuzzing

* take into account interval when weighting as it seems to help

* if theres no cards the interval weight is just 1.0

* make load balancer disableable through debug console

* remove debug prints

* typo

* remove debugging print

* explain a bit how load balancer works

* properly balance per preset

* use inclusive range rather than +1

* -1 type cast

* move type hint somewhere less ugly; fix comment typo

* Reuse existing deck list from parent function (dae)

Minor optimisation
2024-08-17 12:50:54 +07:00