Prevent adding a note that has already been added by checking if
note.id is set before attempting to add it. This fixes a race
condition when the Add button is clicked multiple times quickly.
Fixes#4376
* qt: normalize large progress totals to kilobytes to avoid QProgressBar overflow (#4341); docs: update CONTRIBUTORS
* update
* revert: keep ProgressManager generic; no autoscaling in progress.py
* revert: keep ProgressManager generic; do scaling only in full sync
* Simplify sync progress update by scaling to KB, fix CONTRIBUTORS
* add anki_i18n and locale_config crates to launcher
* add launcher.ftl
* add tr to state
* replace most hardcoded strings with translations
* add support for `launcher` rustcfg to trim translations
* use marker structs to denote type of translations
* move underscores into generated code
* Update cargo-license, which may fix the license order issue (dae)
* add GetCustomColours rpc method
* save colours as rgb instead of argb
* show saved custom colours as possible options in colour picker
this is primarily for mobile clients, as qt currently ignores this
* save custom colours on colour picker change (for desktop)
* add SaveCustomColours rpc method
* restore custom colour palette on editor init
* save custom colour palette on colour picker open and input
there doesn't seem to be an event fired when the picker is
cancelled/closed, so it's still possible for work to be lost
* save colours on `change` instead of `input`
`input` is supposed to be fired on every adjustment to the picker
whereas `change` is only fired when the picker is accepted, but qt
seems to treat both as the latter, so this is currently a no-op
* Store colors in the collection
One minor tweak to the logic while I was there: an invalid color no
longer invalidates all the rest.
---------
Co-authored-by: Damien Elmes <gpg@ankiweb.net>
* Improved margins in Card Browser's "Preview" pane
* Alternate approach that looks good on Mac too
---------
Co-authored-by: Damien Elmes <gpg@ankiweb.net>
Co-authored-by: Damien Elmes <dae@users.noreply.github.com>