anki/cargo/licenses.json

4872 lines
167 KiB
JSON
Raw Normal View History

[
{
"name": "addr2line",
2023-08-23 03:41:30 +02:00
"version": "0.21.0",
"authors": null,
"repository": "https://github.com/gimli-rs/addr2line",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "A cross-platform symbolication library written in Rust, using `gimli`"
},
{
"name": "adler",
2021-03-07 10:04:34 +01:00
"version": "1.0.2",
"authors": "Jonas Schievink <jonasschievink@gmail.com>",
"repository": "https://github.com/jonas-schievink/adler.git",
2020-12-15 08:10:25 +01:00
"license": "0BSD OR Apache-2.0 OR MIT",
"license_file": null,
"description": "A simple clean-room implementation of the Adler-32 checksum"
},
{
"name": "aes",
"version": "0.8.3",
"authors": "RustCrypto Developers",
"repository": "https://github.com/RustCrypto/block-ciphers",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Pure Rust implementation of the Advanced Encryption Standard (a.k.a. Rijndael)"
},
{
"name": "ahash",
"version": "0.8.6",
"authors": "Tom Kaitchuck <Tom.Kaitchuck@gmail.com>",
"repository": "https://github.com/tkaitchuck/ahash",
2020-12-15 08:10:25 +01:00
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "A non-cryptographic hash function using AES-NI for high performance"
},
{
"name": "aho-corasick",
2023-10-25 01:28:10 +02:00
"version": "1.1.2",
"authors": "Andrew Gallant <jamslam@gmail.com>",
"repository": "https://github.com/BurntSushi/aho-corasick",
2020-12-15 08:10:25 +01:00
"license": "MIT OR Unlicense",
"license_file": null,
"description": "Fast multiple substring searching."
},
{
"name": "allocator-api2",
2023-08-23 03:41:30 +02:00
"version": "0.2.16",
"authors": "Zakarum <zaq.dev@icloud.com>",
"repository": "https://github.com/zakarumych/allocator-api2",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Mirror of Rust's allocator API"
},
{
"name": "ammonia",
"version": "3.3.0",
"authors": "Michael Howell <michael@notriddle.com>",
"repository": "https://github.com/rust-ammonia/ammonia",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "HTML Sanitization"
},
{
"name": "android-tzdata",
"version": "0.1.1",
"authors": "RumovZ",
"repository": "https://github.com/RumovZ/android-tzdata",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Parser for the Android-specific tzdata file"
},
2022-09-24 04:39:21 +02:00
{
"name": "android_system_properties",
"version": "0.1.5",
"authors": "Nicolas Silva <nical@fastmail.com>",
"repository": "https://github.com/nical/android_system_properties",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Minimal Android system properties wrapper"
},
2020-11-24 09:41:03 +01:00
{
"name": "anki",
"version": "0.0.0",
Move away from Bazel (#2202) (for upgrading users, please see the notes at the bottom) Bazel brought a lot of nice things to the table, such as rebuilds based on content changes instead of modification times, caching of build products, detection of incorrect build rules via a sandbox, and so on. Rewriting the build in Bazel was also an opportunity to improve on the Makefile-based build we had prior, which was pretty poor: most dependencies were external or not pinned, and the build graph was poorly defined and mostly serialized. It was not uncommon for fresh checkouts to fail due to floating dependencies, or for things to break when trying to switch to an older commit. For day-to-day development, I think Bazel served us reasonably well - we could generally switch between branches while being confident that builds would be correct and reasonably fast, and not require full rebuilds (except on Windows, where the lack of a sandbox and the TS rules would cause build breakages when TS files were renamed/removed). Bazel achieves that reliability by defining rules for each programming language that define how source files should be turned into outputs. For the rules to work with Bazel's sandboxing approach, they often have to reimplement or partially bypass the standard tools that each programming language provides. The Rust rules call Rust's compiler directly for example, instead of using Cargo, and the Python rules extract each PyPi package into a separate folder that gets added to sys.path. These separate language rules allow proper declaration of inputs and outputs, and offer some advantages such as caching of build products and fine-grained dependency installation. But they also bring some downsides: - The rules don't always support use-cases/platforms that the standard language tools do, meaning they need to be patched to be used. I've had to contribute a number of patches to the Rust, Python and JS rules to unblock various issues. - The dependencies we use with each language sometimes make assumptions that do not hold in Bazel, meaning they either need to be pinned or patched, or the language rules need to be adjusted to accommodate them. I was hopeful that after the initial setup work, things would be relatively smooth-sailing. Unfortunately, that has not proved to be the case. Things frequently broke when dependencies or the language rules were updated, and I began to get frustrated at the amount of Anki development time I was instead spending on build system upkeep. It's now about 2 years since switching to Bazel, and I think it's time to cut losses, and switch to something else that's a better fit. The new build system is based on a small build tool called Ninja, and some custom Rust code in build/. This means that to build Anki, Bazel is no longer required, but Ninja and Rust need to be installed on your system. Python and Node toolchains are automatically downloaded like in Bazel. This new build system should result in faster builds in some cases: - Because we're using cargo to build now, Rust builds are able to take advantage of pipelining and incremental debug builds, which we didn't have with Bazel. It's also easier to override the default linker on Linux/macOS, which can further improve speeds. - External Rust crates are now built with opt=1, which improves performance of debug builds. - Esbuild is now used to transpile TypeScript, instead of invoking the TypeScript compiler. This results in faster builds, by deferring typechecking to test/check time, and by allowing more work to happen in parallel. As an example of the differences, when testing with the mold linker on Linux, adding a new message to tags.proto (which triggers a recompile of the bulk of the Rust and TypeScript code) results in a compile that goes from about 22s on Bazel to about 7s in the new system. With the standard linker, it's about 9s. Some other changes of note: - Our Rust workspace now uses cargo-hakari to ensure all packages agree on available features, preventing unnecessary rebuilds. - pylib/anki is now a PEP420 implicit namespace, avoiding the need to merge source files and generated files into a single folder for running. By telling VSCode about the extra search path, code completion now works with generated files without needing to symlink them into the source folder. - qt/aqt can't use PEP420 as it's difficult to get rid of aqt/__init__.py. Instead, the generated files are now placed in a separate _aqt package that's added to the path. - ts/lib is now exposed as @tslib, so the source code and generated code can be provided under the same namespace without a merging step. - MyPy and PyLint are now invoked once for the entire codebase. - dprint will be used to format TypeScript/json files in the future instead of the slower prettier (currently turned off to avoid causing conflicts). It can automatically defer to prettier when formatting Svelte files. - svelte-check is now used for typechecking our Svelte code, which revealed a few typing issues that went undetected with the old system. - The Jest unit tests now work on Windows as well. If you're upgrading from Bazel, updated usage instructions are in docs/development.md and docs/build.md. A summary of the changes: - please remove node_modules and .bazel - install rustup (https://rustup.rs/) - install rsync if not already installed (on windows, use pacman - see docs/windows.md) - install Ninja (unzip from https://github.com/ninja-build/ninja/releases/tag/v1.11.1 and place on your path, or from your distro/homebrew if it's 1.10+) - update .vscode/settings.json from .vscode.dist
2022-11-27 06:24:20 +01:00
"authors": "Ankitects Pty Ltd and contributors <https://help.ankiweb.net>",
2020-11-24 09:41:03 +01:00
"repository": null,
"license": "AGPL-3.0-or-later",
"license_file": null,
"description": "Anki's Rust library code"
},
{
"name": "anki_i18n",
"version": "0.0.0",
"authors": "Ankitects Pty Ltd and contributors <https://help.ankiweb.net>",
"repository": null,
"license": "AGPL-3.0-or-later",
"license_file": null,
"description": "Anki's Rust library i18n code"
},
{
"name": "anki_io",
"version": "0.0.0",
"authors": "Ankitects Pty Ltd and contributors <https://help.ankiweb.net>",
"repository": null,
"license": "AGPL-3.0-or-later",
"license_file": null,
"description": "Utils for better I/O error reporting"
},
{
"name": "anki_proto",
"version": "0.0.0",
"authors": "Ankitects Pty Ltd and contributors <https://help.ankiweb.net>",
"repository": null,
"license": "AGPL-3.0-or-later",
"license_file": null,
"description": "Anki's Rust library protobuf code"
},
{
"name": "anki_proto_gen",
"version": "0.0.0",
"authors": "Ankitects Pty Ltd and contributors <https://help.ankiweb.net>",
"repository": null,
"license": "AGPL-3.0-or-later",
"license_file": null,
"description": "Helpers for interface code generation"
},
{
"name": "anyhow",
2023-08-23 03:41:30 +02:00
"version": "1.0.75",
"authors": "David Tolnay <dtolnay@gmail.com>",
"repository": "https://github.com/dtolnay/anyhow",
2020-12-15 08:10:25 +01:00
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Flexible concrete Error type built on std::error::Error"
},
{
"name": "arrayref",
"version": "0.3.7",
"authors": "David Roundy <roundyd@physics.oregonstate.edu>",
"repository": "https://github.com/droundy/arrayref",
"license": "BSD-2-Clause",
"license_file": null,
"description": "Macros to take array references of slices"
},
2021-10-02 12:42:03 +02:00
{
"name": "arrayvec",
"version": "0.7.4",
2021-10-02 12:42:03 +02:00
"authors": "bluss",
"repository": "https://github.com/bluss/arrayvec",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "A vector with fixed capacity, backed by an array (it can be stored on the stack too). Implements fixed capacity ArrayVec and ArrayString."
},
{
"name": "ash",
"version": "0.37.3+1.3.251",
"authors": "Maik Klein <maikklein@googlemail.com>|Benjamin Saunders <ben.e.saunders@gmail.com>|Marijn Suijten <marijn@traverseresearch.nl>",
"repository": "https://github.com/MaikKlein/ash",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Vulkan bindings for Rust"
},
Rework syncing code, and replace local sync server (#2329) This PR replaces the existing Python-driven sync server with a new one in Rust. The new server supports both collection and media syncing, and is compatible with both the new protocol mentioned below, and older clients. A setting has been added to the preferences screen to point Anki to a local server, and a similar setting is likely to come to AnkiMobile soon. Documentation is available here: <https://docs.ankiweb.net/sync-server.html> In addition to the new server and refactoring, this PR also makes changes to the sync protocol. The existing sync protocol places payloads and metadata inside a multipart POST body, which causes a few headaches: - Legacy clients build the request in a non-deterministic order, meaning the entire request needs to be scanned to extract the metadata. - Reqwest's multipart API directly writes the multipart body, without exposing the resulting stream to us, making it harder to track the progress of the transfer. We've been relying on a patched version of reqwest for timeouts, which is a pain to keep up to date. To address these issues, the metadata is now sent in a HTTP header, with the data payload sent directly in the body. Instead of the slower gzip, we now use zstd. The old timeout handling code has been replaced with a new implementation that wraps the request and response body streams to track progress, allowing us to drop the git dependencies for reqwest, hyper-timeout and tokio-io-timeout. The main other change to the protocol is that one-way syncs no longer need to downgrade the collection to schema 11 prior to sending.
2023-01-18 03:43:46 +01:00
{
"name": "assert-json-diff",
"version": "2.0.2",
"authors": "David Pedersen <david.pdrsn@gmail.com>",
"repository": "https://github.com/davidpdrsn/assert-json-diff.git",
"license": "MIT",
"license_file": null,
"description": "Easily compare two JSON values and get great output"
},
{
"name": "async-channel",
2023-08-23 03:41:30 +02:00
"version": "1.9.0",
Rework syncing code, and replace local sync server (#2329) This PR replaces the existing Python-driven sync server with a new one in Rust. The new server supports both collection and media syncing, and is compatible with both the new protocol mentioned below, and older clients. A setting has been added to the preferences screen to point Anki to a local server, and a similar setting is likely to come to AnkiMobile soon. Documentation is available here: <https://docs.ankiweb.net/sync-server.html> In addition to the new server and refactoring, this PR also makes changes to the sync protocol. The existing sync protocol places payloads and metadata inside a multipart POST body, which causes a few headaches: - Legacy clients build the request in a non-deterministic order, meaning the entire request needs to be scanned to extract the metadata. - Reqwest's multipart API directly writes the multipart body, without exposing the resulting stream to us, making it harder to track the progress of the transfer. We've been relying on a patched version of reqwest for timeouts, which is a pain to keep up to date. To address these issues, the metadata is now sent in a HTTP header, with the data payload sent directly in the body. Instead of the slower gzip, we now use zstd. The old timeout handling code has been replaced with a new implementation that wraps the request and response body streams to track progress, allowing us to drop the git dependencies for reqwest, hyper-timeout and tokio-io-timeout. The main other change to the protocol is that one-way syncs no longer need to downgrade the collection to schema 11 prior to sending.
2023-01-18 03:43:46 +01:00
"authors": "Stjepan Glavina <stjepang@gmail.com>",
"repository": "https://github.com/smol-rs/async-channel",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Async multi-producer multi-consumer channel"
},
{
"name": "async-compression",
"version": "0.4.5",
Rework syncing code, and replace local sync server (#2329) This PR replaces the existing Python-driven sync server with a new one in Rust. The new server supports both collection and media syncing, and is compatible with both the new protocol mentioned below, and older clients. A setting has been added to the preferences screen to point Anki to a local server, and a similar setting is likely to come to AnkiMobile soon. Documentation is available here: <https://docs.ankiweb.net/sync-server.html> In addition to the new server and refactoring, this PR also makes changes to the sync protocol. The existing sync protocol places payloads and metadata inside a multipart POST body, which causes a few headaches: - Legacy clients build the request in a non-deterministic order, meaning the entire request needs to be scanned to extract the metadata. - Reqwest's multipart API directly writes the multipart body, without exposing the resulting stream to us, making it harder to track the progress of the transfer. We've been relying on a patched version of reqwest for timeouts, which is a pain to keep up to date. To address these issues, the metadata is now sent in a HTTP header, with the data payload sent directly in the body. Instead of the slower gzip, we now use zstd. The old timeout handling code has been replaced with a new implementation that wraps the request and response body streams to track progress, allowing us to drop the git dependencies for reqwest, hyper-timeout and tokio-io-timeout. The main other change to the protocol is that one-way syncs no longer need to downgrade the collection to schema 11 prior to sending.
2023-01-18 03:43:46 +01:00
"authors": "Wim Looman <wim@nemo157.com>|Allen Bui <fairingrey@gmail.com>",
"repository": "https://github.com/Nullus157/async-compression",
Rework syncing code, and replace local sync server (#2329) This PR replaces the existing Python-driven sync server with a new one in Rust. The new server supports both collection and media syncing, and is compatible with both the new protocol mentioned below, and older clients. A setting has been added to the preferences screen to point Anki to a local server, and a similar setting is likely to come to AnkiMobile soon. Documentation is available here: <https://docs.ankiweb.net/sync-server.html> In addition to the new server and refactoring, this PR also makes changes to the sync protocol. The existing sync protocol places payloads and metadata inside a multipart POST body, which causes a few headaches: - Legacy clients build the request in a non-deterministic order, meaning the entire request needs to be scanned to extract the metadata. - Reqwest's multipart API directly writes the multipart body, without exposing the resulting stream to us, making it harder to track the progress of the transfer. We've been relying on a patched version of reqwest for timeouts, which is a pain to keep up to date. To address these issues, the metadata is now sent in a HTTP header, with the data payload sent directly in the body. Instead of the slower gzip, we now use zstd. The old timeout handling code has been replaced with a new implementation that wraps the request and response body streams to track progress, allowing us to drop the git dependencies for reqwest, hyper-timeout and tokio-io-timeout. The main other change to the protocol is that one-way syncs no longer need to downgrade the collection to schema 11 prior to sending.
2023-01-18 03:43:46 +01:00
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Adaptors between compression crates and Rust's modern asynchronous IO types."
},
{
"name": "async-stream",
"version": "0.3.5",
Rework syncing code, and replace local sync server (#2329) This PR replaces the existing Python-driven sync server with a new one in Rust. The new server supports both collection and media syncing, and is compatible with both the new protocol mentioned below, and older clients. A setting has been added to the preferences screen to point Anki to a local server, and a similar setting is likely to come to AnkiMobile soon. Documentation is available here: <https://docs.ankiweb.net/sync-server.html> In addition to the new server and refactoring, this PR also makes changes to the sync protocol. The existing sync protocol places payloads and metadata inside a multipart POST body, which causes a few headaches: - Legacy clients build the request in a non-deterministic order, meaning the entire request needs to be scanned to extract the metadata. - Reqwest's multipart API directly writes the multipart body, without exposing the resulting stream to us, making it harder to track the progress of the transfer. We've been relying on a patched version of reqwest for timeouts, which is a pain to keep up to date. To address these issues, the metadata is now sent in a HTTP header, with the data payload sent directly in the body. Instead of the slower gzip, we now use zstd. The old timeout handling code has been replaced with a new implementation that wraps the request and response body streams to track progress, allowing us to drop the git dependencies for reqwest, hyper-timeout and tokio-io-timeout. The main other change to the protocol is that one-way syncs no longer need to downgrade the collection to schema 11 prior to sending.
2023-01-18 03:43:46 +01:00
"authors": "Carl Lerche <me@carllerche.com>",
"repository": "https://github.com/tokio-rs/async-stream",
"license": "MIT",
"license_file": null,
"description": "Asynchronous streams using async & await notation"
},
{
"name": "async-stream-impl",
"version": "0.3.5",
Rework syncing code, and replace local sync server (#2329) This PR replaces the existing Python-driven sync server with a new one in Rust. The new server supports both collection and media syncing, and is compatible with both the new protocol mentioned below, and older clients. A setting has been added to the preferences screen to point Anki to a local server, and a similar setting is likely to come to AnkiMobile soon. Documentation is available here: <https://docs.ankiweb.net/sync-server.html> In addition to the new server and refactoring, this PR also makes changes to the sync protocol. The existing sync protocol places payloads and metadata inside a multipart POST body, which causes a few headaches: - Legacy clients build the request in a non-deterministic order, meaning the entire request needs to be scanned to extract the metadata. - Reqwest's multipart API directly writes the multipart body, without exposing the resulting stream to us, making it harder to track the progress of the transfer. We've been relying on a patched version of reqwest for timeouts, which is a pain to keep up to date. To address these issues, the metadata is now sent in a HTTP header, with the data payload sent directly in the body. Instead of the slower gzip, we now use zstd. The old timeout handling code has been replaced with a new implementation that wraps the request and response body streams to track progress, allowing us to drop the git dependencies for reqwest, hyper-timeout and tokio-io-timeout. The main other change to the protocol is that one-way syncs no longer need to downgrade the collection to schema 11 prior to sending.
2023-01-18 03:43:46 +01:00
"authors": "Carl Lerche <me@carllerche.com>",
"repository": "https://github.com/tokio-rs/async-stream",
"license": "MIT",
"license_file": null,
"description": "proc macros for async-stream crate"
},
2021-01-05 10:58:53 +01:00
{
"name": "async-trait",
2023-10-25 01:28:10 +02:00
"version": "0.1.74",
2021-01-05 10:58:53 +01:00
"authors": "David Tolnay <dtolnay@gmail.com>",
"repository": "https://github.com/dtolnay/async-trait",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Type erasure for async trait methods"
},
{
"name": "autocfg",
"version": "1.1.0",
"authors": "Josh Stone <cuviper@gmail.com>",
"repository": "https://github.com/cuviper/autocfg",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Automatic cfg for Rust compiler features"
},
Rework syncing code, and replace local sync server (#2329) This PR replaces the existing Python-driven sync server with a new one in Rust. The new server supports both collection and media syncing, and is compatible with both the new protocol mentioned below, and older clients. A setting has been added to the preferences screen to point Anki to a local server, and a similar setting is likely to come to AnkiMobile soon. Documentation is available here: <https://docs.ankiweb.net/sync-server.html> In addition to the new server and refactoring, this PR also makes changes to the sync protocol. The existing sync protocol places payloads and metadata inside a multipart POST body, which causes a few headaches: - Legacy clients build the request in a non-deterministic order, meaning the entire request needs to be scanned to extract the metadata. - Reqwest's multipart API directly writes the multipart body, without exposing the resulting stream to us, making it harder to track the progress of the transfer. We've been relying on a patched version of reqwest for timeouts, which is a pain to keep up to date. To address these issues, the metadata is now sent in a HTTP header, with the data payload sent directly in the body. Instead of the slower gzip, we now use zstd. The old timeout handling code has been replaced with a new implementation that wraps the request and response body streams to track progress, allowing us to drop the git dependencies for reqwest, hyper-timeout and tokio-io-timeout. The main other change to the protocol is that one-way syncs no longer need to downgrade the collection to schema 11 prior to sending.
2023-01-18 03:43:46 +01:00
{
"name": "axum",
2023-08-23 03:41:30 +02:00
"version": "0.6.20",
Rework syncing code, and replace local sync server (#2329) This PR replaces the existing Python-driven sync server with a new one in Rust. The new server supports both collection and media syncing, and is compatible with both the new protocol mentioned below, and older clients. A setting has been added to the preferences screen to point Anki to a local server, and a similar setting is likely to come to AnkiMobile soon. Documentation is available here: <https://docs.ankiweb.net/sync-server.html> In addition to the new server and refactoring, this PR also makes changes to the sync protocol. The existing sync protocol places payloads and metadata inside a multipart POST body, which causes a few headaches: - Legacy clients build the request in a non-deterministic order, meaning the entire request needs to be scanned to extract the metadata. - Reqwest's multipart API directly writes the multipart body, without exposing the resulting stream to us, making it harder to track the progress of the transfer. We've been relying on a patched version of reqwest for timeouts, which is a pain to keep up to date. To address these issues, the metadata is now sent in a HTTP header, with the data payload sent directly in the body. Instead of the slower gzip, we now use zstd. The old timeout handling code has been replaced with a new implementation that wraps the request and response body streams to track progress, allowing us to drop the git dependencies for reqwest, hyper-timeout and tokio-io-timeout. The main other change to the protocol is that one-way syncs no longer need to downgrade the collection to schema 11 prior to sending.
2023-01-18 03:43:46 +01:00
"authors": null,
"repository": "https://github.com/tokio-rs/axum",
"license": "MIT",
"license_file": null,
"description": "Web framework that focuses on ergonomics and modularity"
},
{
"name": "axum-client-ip",
"version": "0.4.2",
Rework syncing code, and replace local sync server (#2329) This PR replaces the existing Python-driven sync server with a new one in Rust. The new server supports both collection and media syncing, and is compatible with both the new protocol mentioned below, and older clients. A setting has been added to the preferences screen to point Anki to a local server, and a similar setting is likely to come to AnkiMobile soon. Documentation is available here: <https://docs.ankiweb.net/sync-server.html> In addition to the new server and refactoring, this PR also makes changes to the sync protocol. The existing sync protocol places payloads and metadata inside a multipart POST body, which causes a few headaches: - Legacy clients build the request in a non-deterministic order, meaning the entire request needs to be scanned to extract the metadata. - Reqwest's multipart API directly writes the multipart body, without exposing the resulting stream to us, making it harder to track the progress of the transfer. We've been relying on a patched version of reqwest for timeouts, which is a pain to keep up to date. To address these issues, the metadata is now sent in a HTTP header, with the data payload sent directly in the body. Instead of the slower gzip, we now use zstd. The old timeout handling code has been replaced with a new implementation that wraps the request and response body streams to track progress, allowing us to drop the git dependencies for reqwest, hyper-timeout and tokio-io-timeout. The main other change to the protocol is that one-way syncs no longer need to downgrade the collection to schema 11 prior to sending.
2023-01-18 03:43:46 +01:00
"authors": null,
"repository": "https://github.com/imbolc/axum-client-ip",
"license": "MIT",
"license_file": null,
"description": "Client IP address extractors for Axum"
Rework syncing code, and replace local sync server (#2329) This PR replaces the existing Python-driven sync server with a new one in Rust. The new server supports both collection and media syncing, and is compatible with both the new protocol mentioned below, and older clients. A setting has been added to the preferences screen to point Anki to a local server, and a similar setting is likely to come to AnkiMobile soon. Documentation is available here: <https://docs.ankiweb.net/sync-server.html> In addition to the new server and refactoring, this PR also makes changes to the sync protocol. The existing sync protocol places payloads and metadata inside a multipart POST body, which causes a few headaches: - Legacy clients build the request in a non-deterministic order, meaning the entire request needs to be scanned to extract the metadata. - Reqwest's multipart API directly writes the multipart body, without exposing the resulting stream to us, making it harder to track the progress of the transfer. We've been relying on a patched version of reqwest for timeouts, which is a pain to keep up to date. To address these issues, the metadata is now sent in a HTTP header, with the data payload sent directly in the body. Instead of the slower gzip, we now use zstd. The old timeout handling code has been replaced with a new implementation that wraps the request and response body streams to track progress, allowing us to drop the git dependencies for reqwest, hyper-timeout and tokio-io-timeout. The main other change to the protocol is that one-way syncs no longer need to downgrade the collection to schema 11 prior to sending.
2023-01-18 03:43:46 +01:00
},
{
"name": "axum-core",
"version": "0.3.4",
Rework syncing code, and replace local sync server (#2329) This PR replaces the existing Python-driven sync server with a new one in Rust. The new server supports both collection and media syncing, and is compatible with both the new protocol mentioned below, and older clients. A setting has been added to the preferences screen to point Anki to a local server, and a similar setting is likely to come to AnkiMobile soon. Documentation is available here: <https://docs.ankiweb.net/sync-server.html> In addition to the new server and refactoring, this PR also makes changes to the sync protocol. The existing sync protocol places payloads and metadata inside a multipart POST body, which causes a few headaches: - Legacy clients build the request in a non-deterministic order, meaning the entire request needs to be scanned to extract the metadata. - Reqwest's multipart API directly writes the multipart body, without exposing the resulting stream to us, making it harder to track the progress of the transfer. We've been relying on a patched version of reqwest for timeouts, which is a pain to keep up to date. To address these issues, the metadata is now sent in a HTTP header, with the data payload sent directly in the body. Instead of the slower gzip, we now use zstd. The old timeout handling code has been replaced with a new implementation that wraps the request and response body streams to track progress, allowing us to drop the git dependencies for reqwest, hyper-timeout and tokio-io-timeout. The main other change to the protocol is that one-way syncs no longer need to downgrade the collection to schema 11 prior to sending.
2023-01-18 03:43:46 +01:00
"authors": null,
"repository": "https://github.com/tokio-rs/axum",
"license": "MIT",
"license_file": null,
"description": "Core types and traits for axum"
},
{
"name": "axum-macros",
2023-08-23 03:41:30 +02:00
"version": "0.3.8",
Rework syncing code, and replace local sync server (#2329) This PR replaces the existing Python-driven sync server with a new one in Rust. The new server supports both collection and media syncing, and is compatible with both the new protocol mentioned below, and older clients. A setting has been added to the preferences screen to point Anki to a local server, and a similar setting is likely to come to AnkiMobile soon. Documentation is available here: <https://docs.ankiweb.net/sync-server.html> In addition to the new server and refactoring, this PR also makes changes to the sync protocol. The existing sync protocol places payloads and metadata inside a multipart POST body, which causes a few headaches: - Legacy clients build the request in a non-deterministic order, meaning the entire request needs to be scanned to extract the metadata. - Reqwest's multipart API directly writes the multipart body, without exposing the resulting stream to us, making it harder to track the progress of the transfer. We've been relying on a patched version of reqwest for timeouts, which is a pain to keep up to date. To address these issues, the metadata is now sent in a HTTP header, with the data payload sent directly in the body. Instead of the slower gzip, we now use zstd. The old timeout handling code has been replaced with a new implementation that wraps the request and response body streams to track progress, allowing us to drop the git dependencies for reqwest, hyper-timeout and tokio-io-timeout. The main other change to the protocol is that one-way syncs no longer need to downgrade the collection to schema 11 prior to sending.
2023-01-18 03:43:46 +01:00
"authors": null,
"repository": "https://github.com/tokio-rs/axum",
"license": "MIT",
"license_file": null,
"description": "Macros for axum"
},
{
"name": "backtrace",
2023-08-23 03:41:30 +02:00
"version": "0.3.69",
"authors": "The Rust Project Developers",
"repository": "https://github.com/rust-lang/backtrace-rs",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "A library to acquire a stack trace (backtrace) at runtime in a Rust program."
},
{
"name": "base64",
"version": "0.13.1",
"authors": "Alice Maz <alice@alicemaz.com>|Marshall Pierce <marshall@mpierce.org>",
"repository": "https://github.com/marshallpierce/rust-base64",
2020-12-15 08:10:25 +01:00
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "encodes and decodes base64 as bytes or utf8"
},
Rework syncing code, and replace local sync server (#2329) This PR replaces the existing Python-driven sync server with a new one in Rust. The new server supports both collection and media syncing, and is compatible with both the new protocol mentioned below, and older clients. A setting has been added to the preferences screen to point Anki to a local server, and a similar setting is likely to come to AnkiMobile soon. Documentation is available here: <https://docs.ankiweb.net/sync-server.html> In addition to the new server and refactoring, this PR also makes changes to the sync protocol. The existing sync protocol places payloads and metadata inside a multipart POST body, which causes a few headaches: - Legacy clients build the request in a non-deterministic order, meaning the entire request needs to be scanned to extract the metadata. - Reqwest's multipart API directly writes the multipart body, without exposing the resulting stream to us, making it harder to track the progress of the transfer. We've been relying on a patched version of reqwest for timeouts, which is a pain to keep up to date. To address these issues, the metadata is now sent in a HTTP header, with the data payload sent directly in the body. Instead of the slower gzip, we now use zstd. The old timeout handling code has been replaced with a new implementation that wraps the request and response body streams to track progress, allowing us to drop the git dependencies for reqwest, hyper-timeout and tokio-io-timeout. The main other change to the protocol is that one-way syncs no longer need to downgrade the collection to schema 11 prior to sending.
2023-01-18 03:43:46 +01:00
{
"name": "base64",
2023-10-25 01:28:10 +02:00
"version": "0.21.5",
Rework syncing code, and replace local sync server (#2329) This PR replaces the existing Python-driven sync server with a new one in Rust. The new server supports both collection and media syncing, and is compatible with both the new protocol mentioned below, and older clients. A setting has been added to the preferences screen to point Anki to a local server, and a similar setting is likely to come to AnkiMobile soon. Documentation is available here: <https://docs.ankiweb.net/sync-server.html> In addition to the new server and refactoring, this PR also makes changes to the sync protocol. The existing sync protocol places payloads and metadata inside a multipart POST body, which causes a few headaches: - Legacy clients build the request in a non-deterministic order, meaning the entire request needs to be scanned to extract the metadata. - Reqwest's multipart API directly writes the multipart body, without exposing the resulting stream to us, making it harder to track the progress of the transfer. We've been relying on a patched version of reqwest for timeouts, which is a pain to keep up to date. To address these issues, the metadata is now sent in a HTTP header, with the data payload sent directly in the body. Instead of the slower gzip, we now use zstd. The old timeout handling code has been replaced with a new implementation that wraps the request and response body streams to track progress, allowing us to drop the git dependencies for reqwest, hyper-timeout and tokio-io-timeout. The main other change to the protocol is that one-way syncs no longer need to downgrade the collection to schema 11 prior to sending.
2023-01-18 03:43:46 +01:00
"authors": "Alice Maz <alice@alicemaz.com>|Marshall Pierce <marshall@mpierce.org>",
"repository": "https://github.com/marshallpierce/rust-base64",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "encodes and decodes base64 as bytes or utf8"
},
{
"name": "base64ct",
"version": "1.6.0",
"authors": "RustCrypto Developers",
"repository": "https://github.com/RustCrypto/formats/tree/master/base64ct",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Pure Rust implementation of Base64 (RFC 4648) which avoids any usages of data-dependent branches/LUTs and thereby provides portable \"best effort\" constant-time operation and embedded-friendly no_std support"
},
{
"name": "bincode",
"version": "2.0.0-rc.3",
"authors": "Ty Overby <ty@pre-alpha.com>|Zoey Riordan <zoey@dos.cafe>|Victor Koenders <bincode@trangar.com>",
"repository": "https://github.com/bincode-org/bincode",
"license": "MIT",
"license_file": null,
"description": "A binary serialization / deserialization strategy for transforming structs into bytes and vice versa!"
},
{
"name": "bit-set",
"version": "0.5.3",
"authors": "Alexis Beingessner <a.beingessner@gmail.com>",
"repository": "https://github.com/contain-rs/bit-set",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "A set of bits"
},
{
"name": "bit-vec",
"version": "0.6.3",
"authors": "Alexis Beingessner <a.beingessner@gmail.com>",
"repository": "https://github.com/contain-rs/bit-vec",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "A vector of bits"
},
{
"name": "bit_field",
"version": "0.10.2",
"authors": "Philipp Oppermann <dev@phil-opp.com>",
"repository": "https://github.com/phil-opp/rust-bit-field",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Simple bit field trait providing get_bit, get_bits, set_bit, and set_bits methods for Rust's integral types."
},
{
"name": "bitflags",
2021-10-02 12:42:03 +02:00
"version": "1.3.2",
"authors": "The Rust Project Developers",
"repository": "https://github.com/bitflags/bitflags",
2020-12-15 08:10:25 +01:00
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "A macro to generate structures which behave like bitflags."
},
{
"name": "bitflags",
2023-10-25 01:28:10 +02:00
"version": "2.4.1",
"authors": "The Rust Project Developers",
"repository": "https://github.com/bitflags/bitflags",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "A macro to generate structures which behave like bitflags."
},
{
"name": "blake3",
"version": "1.5.0",
2022-01-15 05:59:43 +01:00
"authors": "Jack O'Connor <oconnor663@gmail.com>|Samuel Neves",
"repository": "https://github.com/BLAKE3-team/BLAKE3",
2020-12-15 08:10:25 +01:00
"license": "Apache-2.0 OR CC0-1.0",
"license_file": null,
"description": "the BLAKE3 hash function"
},
{
"name": "block",
"version": "0.1.6",
"authors": "Steven Sheldon",
"repository": "http://github.com/SSheldon/rust-block",
"license": "MIT",
"license_file": null,
"description": "Rust interface for Apple's C language extension of blocks."
},
2022-01-15 05:59:43 +01:00
{
"name": "block-buffer",
"version": "0.10.4",
2022-01-15 05:59:43 +01:00
"authors": "RustCrypto Developers",
"repository": "https://github.com/RustCrypto/utils",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Buffer type for block processing of data"
},
{
"name": "block-padding",
"version": "0.3.3",
"authors": "RustCrypto Developers",
"repository": "https://github.com/RustCrypto/utils",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Padding and unpadding of messages divided into blocks."
},
{
"name": "bumpalo",
"version": "3.14.0",
"authors": "Nick Fitzgerald <fitzgen@gmail.com>",
"repository": "https://github.com/fitzgen/bumpalo",
2020-12-15 08:10:25 +01:00
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "A fast bump allocation arena for Rust."
},
{
"name": "burn",
"version": "0.11.1",
"authors": "nathanielsimard <nathaniel.simard.42@gmail.com>",
"repository": "https://github.com/tracel-ai/burn",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Flexible and Comprehensive Deep Learning Framework in Rust"
},
{
"name": "burn-autodiff",
"version": "0.11.1",
"authors": "nathanielsimard <nathaniel.simard.42@gmail.com>",
"repository": "https://github.com/tracel-ai/burn/tree/main/burn-autodiff",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Automatic differentiation backend for the Burn framework"
},
{
"name": "burn-candle",
"version": "0.11.1",
"authors": "louisfd <louisfd94@gmail.com>",
"repository": "https://github.com/tracel-ai/burn/tree/main/burn-candle",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Candle backend for the Burn framework"
},
{
"name": "burn-common",
"version": "0.11.1",
"authors": "Dilshod Tadjibaev (@antimora)",
"repository": "https://github.com/tracel-ai/burn/tree/main/burn-common",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Common crate for the Burn framework"
},
{
"name": "burn-compute",
"version": "0.11.1",
"authors": "louisfd <louisfd94@gmail.com>|Nathaniel Simard",
"repository": "https://github.com/tracel-ai/burn/tree/main/burn-compute",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Compute crate that helps creating high performance async backends."
},
{
"name": "burn-core",
"version": "0.11.1",
"authors": "nathanielsimard <nathaniel.simard.42@gmail.com>",
"repository": "https://github.com/tracel-ai/burn/tree/main/burn-core",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Flexible and Comprehensive Deep Learning Framework in Rust"
},
{
"name": "burn-dataset",
"version": "0.11.1",
"authors": "nathanielsimard <nathaniel.simard.42@gmail.com>",
"repository": "https://github.com/tracel-ai/burn/tree/main/burn-dataset",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Library with simple dataset APIs for creating ML data pipelines"
},
{
"name": "burn-derive",
"version": "0.11.1",
"authors": "nathanielsimard <nathaniel.simard.42@gmail.com>",
"repository": "https://github.com/tracel-ai/burn/tree/main/burn-derive",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Derive crate for the Burn framework"
},
{
"name": "burn-fusion",
"version": "0.11.1",
"authors": "nathanielsimard <nathaniel.simard.42@gmail.com>",
"repository": "https://github.com/tracel-ai/burn/tree/main/burn-fusion",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Kernel fusion backend decorator for the Burn framework"
},
{
"name": "burn-ndarray",
"version": "0.11.1",
"authors": "nathanielsimard <nathaniel.simard.42@gmail.com>",
"repository": "https://github.com/tracel-ai/burn/tree/main/burn-ndarray",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Ndarray backend for the Burn framework"
},
{
"name": "burn-tch",
"version": "0.11.1",
"authors": "nathanielsimard <nathaniel.simard.42@gmail.com>",
"repository": "https://github.com/tracel-ai/burn/tree/main/burn-tch",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Tch backend for the Burn framework"
},
{
"name": "burn-tensor",
"version": "0.11.1",
"authors": "nathanielsimard <nathaniel.simard.42@gmail.com>",
"repository": "https://github.com/tracel-ai/burn/tree/main/burn-tensor",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Tensor library with user-friendly APIs and automatic differentiation support"
},
{
"name": "burn-tensor-testgen",
"version": "0.11.1",
"authors": "nathanielsimard <nathaniel.simard.42@gmail.com>",
"repository": "https://github.com/tracel-ai/burn/tree/main/burn-tensor-testgen",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Test generation crate for burn-tensor"
},
{
"name": "burn-train",
"version": "0.11.1",
"authors": "nathanielsimard <nathaniel.simard.42@gmail.com>",
"repository": "https://github.com/tracel-ai/burn/tree/main/burn-train",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Training crate for the Burn framework"
},
{
"name": "burn-wgpu",
"version": "0.11.1",
"authors": "nathanielsimard <nathaniel.simard.42@gmail.com>",
"repository": "https://github.com/tracel-ai/burn/tree/main/burn-wgpu",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "WGPU backend for the Burn framework"
},
{
"name": "bytemuck",
"version": "1.14.0",
"authors": "Lokathor <zefria@gmail.com>",
"repository": "https://github.com/Lokathor/bytemuck",
"license": "Apache-2.0 OR MIT OR Zlib",
"license_file": null,
"description": "A crate for mucking around with piles of bytes."
},
{
"name": "bytemuck_derive",
"version": "1.5.0",
"authors": "Lokathor <zefria@gmail.com>",
"repository": "https://github.com/Lokathor/bytemuck",
"license": "Apache-2.0 OR MIT OR Zlib",
"license_file": null,
"description": "derive proc-macros for `bytemuck`"
},
{
"name": "byteorder",
2023-10-25 01:28:10 +02:00
"version": "1.5.0",
"authors": "Andrew Gallant <jamslam@gmail.com>",
"repository": "https://github.com/BurntSushi/byteorder",
2020-12-15 08:10:25 +01:00
"license": "MIT OR Unlicense",
"license_file": null,
"description": "Library for reading/writing numbers in big-endian and little-endian."
},
{
"name": "bytes",
"version": "1.5.0",
"authors": "Carl Lerche <me@carllerche.com>|Sean McArthur <sean@seanmonstar.com>",
"repository": "https://github.com/tokio-rs/bytes",
"license": "MIT",
"license_file": null,
"description": "Types and traits for working with bytes"
},
{
"name": "bzip2",
"version": "0.4.4",
"authors": "Alex Crichton <alex@alexcrichton.com>",
"repository": "https://github.com/alexcrichton/bzip2-rs",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Bindings to libbzip2 for bzip2 compression and decompression exposed as Reader/Writer streams."
},
{
"name": "bzip2-sys",
"version": "0.1.11+1.0.8",
"authors": "Alex Crichton <alex@alexcrichton.com>",
"repository": "https://github.com/alexcrichton/bzip2-rs",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Bindings to libbzip2 for bzip2 compression and decompression exposed as Reader/Writer streams."
},
{
"name": "camino",
2023-08-23 03:41:30 +02:00
"version": "1.1.6",
"authors": "Without Boats <saoirse@without.boats>|Ashley Williams <ashley666ashley@gmail.com>|Steve Klabnik <steve@steveklabnik.com>|Rain <rain@sunshowers.io>",
"repository": "https://github.com/camino-rs/camino",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "UTF-8 paths"
},
{
"name": "candle-core",
"version": "0.3.1",
"authors": null,
"repository": "https://github.com/huggingface/candle",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Minimalist ML framework."
},
{
"name": "cc",
2023-08-23 03:41:30 +02:00
"version": "1.0.83",
"authors": "Alex Crichton <alex@alexcrichton.com>",
"repository": "https://github.com/rust-lang/cc-rs",
2020-12-15 08:10:25 +01:00
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "A build-time dependency for Cargo build scripts to assist in invoking the native C compiler to compile native C code into a static archive to be linked into Rust code."
},
{
"name": "cfg-if",
"version": "1.0.0",
"authors": "Alex Crichton <alex@alexcrichton.com>",
"repository": "https://github.com/alexcrichton/cfg-if",
2020-12-15 08:10:25 +01:00
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "A macro to ergonomically define an item depending on a large number of #[cfg] parameters. Structured like an if-else chain, the first matching branch is the item that gets emitted."
},
{
"name": "chrono",
"version": "0.4.31",
2022-09-24 04:39:21 +02:00
"authors": null,
"repository": "https://github.com/chronotope/chrono",
2020-12-15 08:10:25 +01:00
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Date and time library for Rust"
},
{
"name": "cipher",
"version": "0.4.4",
"authors": "RustCrypto Developers",
"repository": "https://github.com/RustCrypto/traits",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Traits for describing block ciphers and stream ciphers"
},
{
"name": "coarsetime",
"version": "0.1.33",
"authors": "Frank Denis <github@pureftpd.org>",
"repository": "https://github.com/jedisct1/rust-coarsetime",
"license": "ISC",
"license_file": null,
"description": "Time and duration crate optimized for speed"
},
{
"name": "codespan-reporting",
"version": "0.11.1",
"authors": "Brendan Zabarauskas <bjzaba@yahoo.com.au>",
"repository": "https://github.com/brendanzab/codespan",
"license": "Apache-2.0",
"license_file": null,
"description": "Beautiful diagnostic reporting for text-based programming languages"
},
{
"name": "color_quant",
"version": "1.1.0",
"authors": "nwin <nwin@users.noreply.github.com>",
"repository": "https://github.com/image-rs/color_quant.git",
"license": "MIT",
"license_file": null,
"description": "Color quantization library to reduce n colors to 256 colors."
},
{
"name": "com-rs",
"version": "0.2.1",
"authors": "Lee Jeffery <lee@leejeffery.co.uk>",
"repository": "https://github.com/Eljay/com-rs",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Deprecated. Use the `com` crate instead."
},
Rework syncing code, and replace local sync server (#2329) This PR replaces the existing Python-driven sync server with a new one in Rust. The new server supports both collection and media syncing, and is compatible with both the new protocol mentioned below, and older clients. A setting has been added to the preferences screen to point Anki to a local server, and a similar setting is likely to come to AnkiMobile soon. Documentation is available here: <https://docs.ankiweb.net/sync-server.html> In addition to the new server and refactoring, this PR also makes changes to the sync protocol. The existing sync protocol places payloads and metadata inside a multipart POST body, which causes a few headaches: - Legacy clients build the request in a non-deterministic order, meaning the entire request needs to be scanned to extract the metadata. - Reqwest's multipart API directly writes the multipart body, without exposing the resulting stream to us, making it harder to track the progress of the transfer. We've been relying on a patched version of reqwest for timeouts, which is a pain to keep up to date. To address these issues, the metadata is now sent in a HTTP header, with the data payload sent directly in the body. Instead of the slower gzip, we now use zstd. The old timeout handling code has been replaced with a new implementation that wraps the request and response body streams to track progress, allowing us to drop the git dependencies for reqwest, hyper-timeout and tokio-io-timeout. The main other change to the protocol is that one-way syncs no longer need to downgrade the collection to schema 11 prior to sending.
2023-01-18 03:43:46 +01:00
{
"name": "concurrent-queue",
"version": "2.4.0",
Rework syncing code, and replace local sync server (#2329) This PR replaces the existing Python-driven sync server with a new one in Rust. The new server supports both collection and media syncing, and is compatible with both the new protocol mentioned below, and older clients. A setting has been added to the preferences screen to point Anki to a local server, and a similar setting is likely to come to AnkiMobile soon. Documentation is available here: <https://docs.ankiweb.net/sync-server.html> In addition to the new server and refactoring, this PR also makes changes to the sync protocol. The existing sync protocol places payloads and metadata inside a multipart POST body, which causes a few headaches: - Legacy clients build the request in a non-deterministic order, meaning the entire request needs to be scanned to extract the metadata. - Reqwest's multipart API directly writes the multipart body, without exposing the resulting stream to us, making it harder to track the progress of the transfer. We've been relying on a patched version of reqwest for timeouts, which is a pain to keep up to date. To address these issues, the metadata is now sent in a HTTP header, with the data payload sent directly in the body. Instead of the slower gzip, we now use zstd. The old timeout handling code has been replaced with a new implementation that wraps the request and response body streams to track progress, allowing us to drop the git dependencies for reqwest, hyper-timeout and tokio-io-timeout. The main other change to the protocol is that one-way syncs no longer need to downgrade the collection to schema 11 prior to sending.
2023-01-18 03:43:46 +01:00
"authors": "Stjepan Glavina <stjepang@gmail.com>|Taiki Endo <te316e89@gmail.com>|John Nunley <jtnunley01@gmail.com>",
"repository": "https://github.com/smol-rs/concurrent-queue",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Concurrent multi-producer multi-consumer queue"
},
{
"name": "constant_time_eq",
"version": "0.1.5",
"authors": "Cesar Eduardo Barros <cesarb@cesarb.eti.br>",
"repository": "https://github.com/cesarb/constant_time_eq",
"license": "CC0-1.0",
"license_file": null,
"description": "Compares two equal-sized byte strings in constant time."
},
{
"name": "constant_time_eq",
2023-08-23 03:41:30 +02:00
"version": "0.3.0",
"authors": "Cesar Eduardo Barros <cesarb@cesarb.eti.br>",
"repository": "https://github.com/cesarb/constant_time_eq",
"license": "Apache-2.0 OR CC0-1.0 OR MIT-0",
"license_file": null,
"description": "Compares two equal-sized byte strings in constant time."
},
{
"name": "convert_case",
"version": "0.6.0",
"authors": "Rutrum <dave@rutrum.net>",
"repository": "https://github.com/rutrum/convert-case",
"license": "MIT",
"license_file": null,
"description": "Convert strings into any case"
},
{
"name": "core-foundation",
"version": "0.9.4",
"authors": "The Servo Project Developers",
"repository": "https://github.com/servo/core-foundation-rs",
2020-12-15 08:10:25 +01:00
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Bindings to Core Foundation for macOS"
},
{
"name": "core-foundation-sys",
"version": "0.8.6",
"authors": "The Servo Project Developers",
"repository": "https://github.com/servo/core-foundation-rs",
2020-12-15 08:10:25 +01:00
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Bindings to Core Foundation for macOS"
},
{
"name": "core-graphics-types",
"version": "0.1.3",
"authors": "The Servo Project Developers",
"repository": "https://github.com/servo/core-foundation-rs",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Bindings for some fundamental Core Graphics types"
},
Move away from Bazel (#2202) (for upgrading users, please see the notes at the bottom) Bazel brought a lot of nice things to the table, such as rebuilds based on content changes instead of modification times, caching of build products, detection of incorrect build rules via a sandbox, and so on. Rewriting the build in Bazel was also an opportunity to improve on the Makefile-based build we had prior, which was pretty poor: most dependencies were external or not pinned, and the build graph was poorly defined and mostly serialized. It was not uncommon for fresh checkouts to fail due to floating dependencies, or for things to break when trying to switch to an older commit. For day-to-day development, I think Bazel served us reasonably well - we could generally switch between branches while being confident that builds would be correct and reasonably fast, and not require full rebuilds (except on Windows, where the lack of a sandbox and the TS rules would cause build breakages when TS files were renamed/removed). Bazel achieves that reliability by defining rules for each programming language that define how source files should be turned into outputs. For the rules to work with Bazel's sandboxing approach, they often have to reimplement or partially bypass the standard tools that each programming language provides. The Rust rules call Rust's compiler directly for example, instead of using Cargo, and the Python rules extract each PyPi package into a separate folder that gets added to sys.path. These separate language rules allow proper declaration of inputs and outputs, and offer some advantages such as caching of build products and fine-grained dependency installation. But they also bring some downsides: - The rules don't always support use-cases/platforms that the standard language tools do, meaning they need to be patched to be used. I've had to contribute a number of patches to the Rust, Python and JS rules to unblock various issues. - The dependencies we use with each language sometimes make assumptions that do not hold in Bazel, meaning they either need to be pinned or patched, or the language rules need to be adjusted to accommodate them. I was hopeful that after the initial setup work, things would be relatively smooth-sailing. Unfortunately, that has not proved to be the case. Things frequently broke when dependencies or the language rules were updated, and I began to get frustrated at the amount of Anki development time I was instead spending on build system upkeep. It's now about 2 years since switching to Bazel, and I think it's time to cut losses, and switch to something else that's a better fit. The new build system is based on a small build tool called Ninja, and some custom Rust code in build/. This means that to build Anki, Bazel is no longer required, but Ninja and Rust need to be installed on your system. Python and Node toolchains are automatically downloaded like in Bazel. This new build system should result in faster builds in some cases: - Because we're using cargo to build now, Rust builds are able to take advantage of pipelining and incremental debug builds, which we didn't have with Bazel. It's also easier to override the default linker on Linux/macOS, which can further improve speeds. - External Rust crates are now built with opt=1, which improves performance of debug builds. - Esbuild is now used to transpile TypeScript, instead of invoking the TypeScript compiler. This results in faster builds, by deferring typechecking to test/check time, and by allowing more work to happen in parallel. As an example of the differences, when testing with the mold linker on Linux, adding a new message to tags.proto (which triggers a recompile of the bulk of the Rust and TypeScript code) results in a compile that goes from about 22s on Bazel to about 7s in the new system. With the standard linker, it's about 9s. Some other changes of note: - Our Rust workspace now uses cargo-hakari to ensure all packages agree on available features, preventing unnecessary rebuilds. - pylib/anki is now a PEP420 implicit namespace, avoiding the need to merge source files and generated files into a single folder for running. By telling VSCode about the extra search path, code completion now works with generated files without needing to symlink them into the source folder. - qt/aqt can't use PEP420 as it's difficult to get rid of aqt/__init__.py. Instead, the generated files are now placed in a separate _aqt package that's added to the path. - ts/lib is now exposed as @tslib, so the source code and generated code can be provided under the same namespace without a merging step. - MyPy and PyLint are now invoked once for the entire codebase. - dprint will be used to format TypeScript/json files in the future instead of the slower prettier (currently turned off to avoid causing conflicts). It can automatically defer to prettier when formatting Svelte files. - svelte-check is now used for typechecking our Svelte code, which revealed a few typing issues that went undetected with the old system. - The Jest unit tests now work on Windows as well. If you're upgrading from Bazel, updated usage instructions are in docs/development.md and docs/build.md. A summary of the changes: - please remove node_modules and .bazel - install rustup (https://rustup.rs/) - install rsync if not already installed (on windows, use pacman - see docs/windows.md) - install Ninja (unzip from https://github.com/ninja-build/ninja/releases/tag/v1.11.1 and place on your path, or from your distro/homebrew if it's 1.10+) - update .vscode/settings.json from .vscode.dist
2022-11-27 06:24:20 +01:00
{
"name": "cpufeatures",
"version": "0.2.11",
Move away from Bazel (#2202) (for upgrading users, please see the notes at the bottom) Bazel brought a lot of nice things to the table, such as rebuilds based on content changes instead of modification times, caching of build products, detection of incorrect build rules via a sandbox, and so on. Rewriting the build in Bazel was also an opportunity to improve on the Makefile-based build we had prior, which was pretty poor: most dependencies were external or not pinned, and the build graph was poorly defined and mostly serialized. It was not uncommon for fresh checkouts to fail due to floating dependencies, or for things to break when trying to switch to an older commit. For day-to-day development, I think Bazel served us reasonably well - we could generally switch between branches while being confident that builds would be correct and reasonably fast, and not require full rebuilds (except on Windows, where the lack of a sandbox and the TS rules would cause build breakages when TS files were renamed/removed). Bazel achieves that reliability by defining rules for each programming language that define how source files should be turned into outputs. For the rules to work with Bazel's sandboxing approach, they often have to reimplement or partially bypass the standard tools that each programming language provides. The Rust rules call Rust's compiler directly for example, instead of using Cargo, and the Python rules extract each PyPi package into a separate folder that gets added to sys.path. These separate language rules allow proper declaration of inputs and outputs, and offer some advantages such as caching of build products and fine-grained dependency installation. But they also bring some downsides: - The rules don't always support use-cases/platforms that the standard language tools do, meaning they need to be patched to be used. I've had to contribute a number of patches to the Rust, Python and JS rules to unblock various issues. - The dependencies we use with each language sometimes make assumptions that do not hold in Bazel, meaning they either need to be pinned or patched, or the language rules need to be adjusted to accommodate them. I was hopeful that after the initial setup work, things would be relatively smooth-sailing. Unfortunately, that has not proved to be the case. Things frequently broke when dependencies or the language rules were updated, and I began to get frustrated at the amount of Anki development time I was instead spending on build system upkeep. It's now about 2 years since switching to Bazel, and I think it's time to cut losses, and switch to something else that's a better fit. The new build system is based on a small build tool called Ninja, and some custom Rust code in build/. This means that to build Anki, Bazel is no longer required, but Ninja and Rust need to be installed on your system. Python and Node toolchains are automatically downloaded like in Bazel. This new build system should result in faster builds in some cases: - Because we're using cargo to build now, Rust builds are able to take advantage of pipelining and incremental debug builds, which we didn't have with Bazel. It's also easier to override the default linker on Linux/macOS, which can further improve speeds. - External Rust crates are now built with opt=1, which improves performance of debug builds. - Esbuild is now used to transpile TypeScript, instead of invoking the TypeScript compiler. This results in faster builds, by deferring typechecking to test/check time, and by allowing more work to happen in parallel. As an example of the differences, when testing with the mold linker on Linux, adding a new message to tags.proto (which triggers a recompile of the bulk of the Rust and TypeScript code) results in a compile that goes from about 22s on Bazel to about 7s in the new system. With the standard linker, it's about 9s. Some other changes of note: - Our Rust workspace now uses cargo-hakari to ensure all packages agree on available features, preventing unnecessary rebuilds. - pylib/anki is now a PEP420 implicit namespace, avoiding the need to merge source files and generated files into a single folder for running. By telling VSCode about the extra search path, code completion now works with generated files without needing to symlink them into the source folder. - qt/aqt can't use PEP420 as it's difficult to get rid of aqt/__init__.py. Instead, the generated files are now placed in a separate _aqt package that's added to the path. - ts/lib is now exposed as @tslib, so the source code and generated code can be provided under the same namespace without a merging step. - MyPy and PyLint are now invoked once for the entire codebase. - dprint will be used to format TypeScript/json files in the future instead of the slower prettier (currently turned off to avoid causing conflicts). It can automatically defer to prettier when formatting Svelte files. - svelte-check is now used for typechecking our Svelte code, which revealed a few typing issues that went undetected with the old system. - The Jest unit tests now work on Windows as well. If you're upgrading from Bazel, updated usage instructions are in docs/development.md and docs/build.md. A summary of the changes: - please remove node_modules and .bazel - install rustup (https://rustup.rs/) - install rsync if not already installed (on windows, use pacman - see docs/windows.md) - install Ninja (unzip from https://github.com/ninja-build/ninja/releases/tag/v1.11.1 and place on your path, or from your distro/homebrew if it's 1.10+) - update .vscode/settings.json from .vscode.dist
2022-11-27 06:24:20 +01:00
"authors": "RustCrypto Developers",
"repository": "https://github.com/RustCrypto/utils",
"license": "Apache-2.0 OR MIT",
"license_file": null,
2023-10-25 01:28:10 +02:00
"description": "Lightweight runtime CPU feature detection for aarch64, loongarch64, and x86/x86_64 targets, with no_std support and support for mobile targets including Android and iOS"
Move away from Bazel (#2202) (for upgrading users, please see the notes at the bottom) Bazel brought a lot of nice things to the table, such as rebuilds based on content changes instead of modification times, caching of build products, detection of incorrect build rules via a sandbox, and so on. Rewriting the build in Bazel was also an opportunity to improve on the Makefile-based build we had prior, which was pretty poor: most dependencies were external or not pinned, and the build graph was poorly defined and mostly serialized. It was not uncommon for fresh checkouts to fail due to floating dependencies, or for things to break when trying to switch to an older commit. For day-to-day development, I think Bazel served us reasonably well - we could generally switch between branches while being confident that builds would be correct and reasonably fast, and not require full rebuilds (except on Windows, where the lack of a sandbox and the TS rules would cause build breakages when TS files were renamed/removed). Bazel achieves that reliability by defining rules for each programming language that define how source files should be turned into outputs. For the rules to work with Bazel's sandboxing approach, they often have to reimplement or partially bypass the standard tools that each programming language provides. The Rust rules call Rust's compiler directly for example, instead of using Cargo, and the Python rules extract each PyPi package into a separate folder that gets added to sys.path. These separate language rules allow proper declaration of inputs and outputs, and offer some advantages such as caching of build products and fine-grained dependency installation. But they also bring some downsides: - The rules don't always support use-cases/platforms that the standard language tools do, meaning they need to be patched to be used. I've had to contribute a number of patches to the Rust, Python and JS rules to unblock various issues. - The dependencies we use with each language sometimes make assumptions that do not hold in Bazel, meaning they either need to be pinned or patched, or the language rules need to be adjusted to accommodate them. I was hopeful that after the initial setup work, things would be relatively smooth-sailing. Unfortunately, that has not proved to be the case. Things frequently broke when dependencies or the language rules were updated, and I began to get frustrated at the amount of Anki development time I was instead spending on build system upkeep. It's now about 2 years since switching to Bazel, and I think it's time to cut losses, and switch to something else that's a better fit. The new build system is based on a small build tool called Ninja, and some custom Rust code in build/. This means that to build Anki, Bazel is no longer required, but Ninja and Rust need to be installed on your system. Python and Node toolchains are automatically downloaded like in Bazel. This new build system should result in faster builds in some cases: - Because we're using cargo to build now, Rust builds are able to take advantage of pipelining and incremental debug builds, which we didn't have with Bazel. It's also easier to override the default linker on Linux/macOS, which can further improve speeds. - External Rust crates are now built with opt=1, which improves performance of debug builds. - Esbuild is now used to transpile TypeScript, instead of invoking the TypeScript compiler. This results in faster builds, by deferring typechecking to test/check time, and by allowing more work to happen in parallel. As an example of the differences, when testing with the mold linker on Linux, adding a new message to tags.proto (which triggers a recompile of the bulk of the Rust and TypeScript code) results in a compile that goes from about 22s on Bazel to about 7s in the new system. With the standard linker, it's about 9s. Some other changes of note: - Our Rust workspace now uses cargo-hakari to ensure all packages agree on available features, preventing unnecessary rebuilds. - pylib/anki is now a PEP420 implicit namespace, avoiding the need to merge source files and generated files into a single folder for running. By telling VSCode about the extra search path, code completion now works with generated files without needing to symlink them into the source folder. - qt/aqt can't use PEP420 as it's difficult to get rid of aqt/__init__.py. Instead, the generated files are now placed in a separate _aqt package that's added to the path. - ts/lib is now exposed as @tslib, so the source code and generated code can be provided under the same namespace without a merging step. - MyPy and PyLint are now invoked once for the entire codebase. - dprint will be used to format TypeScript/json files in the future instead of the slower prettier (currently turned off to avoid causing conflicts). It can automatically defer to prettier when formatting Svelte files. - svelte-check is now used for typechecking our Svelte code, which revealed a few typing issues that went undetected with the old system. - The Jest unit tests now work on Windows as well. If you're upgrading from Bazel, updated usage instructions are in docs/development.md and docs/build.md. A summary of the changes: - please remove node_modules and .bazel - install rustup (https://rustup.rs/) - install rsync if not already installed (on windows, use pacman - see docs/windows.md) - install Ninja (unzip from https://github.com/ninja-build/ninja/releases/tag/v1.11.1 and place on your path, or from your distro/homebrew if it's 1.10+) - update .vscode/settings.json from .vscode.dist
2022-11-27 06:24:20 +01:00
},
{
"name": "crc32fast",
"version": "1.3.2",
"authors": "Sam Rijs <srijs@airpost.net>|Alex Crichton <alex@alexcrichton.com>",
"repository": "https://github.com/srijs/rust-crc32fast",
2020-12-15 08:10:25 +01:00
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Fast, SIMD-accelerated CRC32 (IEEE) checksum computation"
},
{
"name": "crossbeam-channel",
2023-04-12 00:29:26 +02:00
"version": "0.5.8",
2022-01-15 05:59:43 +01:00
"authors": null,
"repository": "https://github.com/crossbeam-rs/crossbeam",
2020-12-15 08:10:25 +01:00
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Multi-producer multi-consumer channels for message passing"
},
{
"name": "crossbeam-deque",
"version": "0.8.3",
"authors": null,
"repository": "https://github.com/crossbeam-rs/crossbeam",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Concurrent work-stealing deque"
},
{
"name": "crossbeam-epoch",
"version": "0.9.15",
"authors": null,
"repository": "https://github.com/crossbeam-rs/crossbeam",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Epoch-based garbage collection"
},
{
"name": "crossbeam-utils",
"version": "0.8.16",
2022-01-15 05:59:43 +01:00
"authors": null,
"repository": "https://github.com/crossbeam-rs/crossbeam",
2020-12-15 08:10:25 +01:00
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Utilities for concurrent programming"
},
{
"name": "crunchy",
"version": "0.2.2",
"authors": "Vurich <jackefransham@hotmail.co.uk>",
"repository": null,
"license": "MIT",
"license_file": null,
"description": "Crunchy unroller: deterministically unroll constant loops"
},
{
2022-01-15 05:59:43 +01:00
"name": "crypto-common",
2022-09-24 04:39:21 +02:00
"version": "0.1.6",
2022-01-15 05:59:43 +01:00
"authors": "RustCrypto Developers",
"repository": "https://github.com/RustCrypto/traits",
2020-12-15 08:10:25 +01:00
"license": "Apache-2.0 OR MIT",
"license_file": null,
2022-01-15 05:59:43 +01:00
"description": "Common cryptographic traits"
},
Plaintext import/export (#1850) * Add crate csv * Add start of csv importing on backend * Add Menomosyne serializer * Add csv and json importing on backend * Add plaintext importing on frontend * Add csv metadata extraction on backend * Add csv importing with GUI * Fix missing dfa file in build Added compile_data_attr, then re-ran cargo/update.py. * Don't use doubly buffered reader in csv * Escape HTML entities if CSV is not HTML Also use name 'is_html' consistently. * Use decimal number as foreign ease (like '2.5') * ForeignCard.ivl → ForeignCard.interval * Only allow fixed set of CSV delimiters * Map timestamp of ForeignCard to native due time * Don't trim CSV records * Document use of empty strings for defaults * Avoid creating CardGenContexts for every note This requires CardGenContext to be generic, so it works both with an owned and borrowed notetype. * Show all accepted file types in import file picker * Add import_json_file() * factor → ease_factor * delimter_from_value → delimiter_from_value * Map columns to fields, not the other way around * Fallback to current config for csv metadata * Add start of new import csv screen * Temporary fix for compilation issue on Linux/Mac * Disable jest bazel action for import-csv Jest fails with an error code if no tests are available, but this would not be noticable on Windows as Jest is not run there. * Fix field mapping issue * Revert "Temporary fix for compilation issue on Linux/Mac" This reverts commit 21f8a261408cdae49ec031aa21a1b659c4f66d82. * Add HtmlSwitch and move Switch to components * Fix spacing and make selectors consistent * Fix shortcut tooltip * Place import button at the top with path * Fix meta column indices * Remove NotetypeForString * Fix queue and type of foreign cards * Support different dupe resolution strategies * Allow dupe resolution selection when importing CSV * Test import of unnormalized text Close #1863. * Fix logging of foreign notes * Implement CSV exports * Use db_scalar() in notes_table_len() * Rework CSV metadata - Notetypes and decks are either defined by a global id or by a column. - If a notetype id is provided, its field map must also be specified. - If a notetype column is provided, fields are now mapped by index instead of name at import time. So the first non-meta column is used for the first field of every note, regardless of notetype. This makes importing easier and should improve compatiblity with files without a notetype column. - Ensure first field can be mapped to a column. - Meta columns must be defined as `#[meta name]:[column index]` instead of in the `#columns` tag. - Column labels contain the raw names defined by the file and must be prettified by the frontend. * Adjust frontend to new backend column mapping * Add force flags for is_html and delimiter * Detect if CSV is HTML by field content * Update dupe resolution labels * Simplify selectors * Fix coalescence of oneofs in TS * Disable meta columns from selection Plus a lot of refactoring. * Make import button stick to the bottom * Write delimiter and html flag into csv * Refetch field map after notetype change * Fix log labels for csv import * Log notes whose deck/notetype was missing * Fix hiding of empty log queues * Implement adding tags to all notes of a csv * Fix dupe resolution not being set in log * Implement adding tags to updated notes of a csv * Check first note field is not empty * Temporary fix for build on Linux/Mac * Fix inverted html check (dae) * Remove unused ftl string * Delimiter → Separator * Remove commented-out line * Don't accept .json files * Tweak tag ftl strings * Remove redundant blur call * Strip sound and add spaces in csv export * Export HTML by default * Fix unset deck in Mnemosyne import Also accept both numbers and strings for notetypes and decks in JSON. * Make DupeResolution::Update the default * Fix missing dot in extension * Make column indices 1-based * Remove StickContainer from TagEditor Fixes line breaking, border and z index on ImportCsvPage. * Assign different key combos to tag editors * Log all updated duplicates Add a log field for the true number of found notes. * Show identical notes as skipped * Split tag-editor into separate ts module (dae) * Add progress for CSV export * Add progress for text import * Tidy-ups after tag-editor split (dae) - import-csv no longer depends on editor - remove some commented lines
2022-06-01 12:26:16 +02:00
{
"name": "csv",
"version": "1.3.0",
Plaintext import/export (#1850) * Add crate csv * Add start of csv importing on backend * Add Menomosyne serializer * Add csv and json importing on backend * Add plaintext importing on frontend * Add csv metadata extraction on backend * Add csv importing with GUI * Fix missing dfa file in build Added compile_data_attr, then re-ran cargo/update.py. * Don't use doubly buffered reader in csv * Escape HTML entities if CSV is not HTML Also use name 'is_html' consistently. * Use decimal number as foreign ease (like '2.5') * ForeignCard.ivl → ForeignCard.interval * Only allow fixed set of CSV delimiters * Map timestamp of ForeignCard to native due time * Don't trim CSV records * Document use of empty strings for defaults * Avoid creating CardGenContexts for every note This requires CardGenContext to be generic, so it works both with an owned and borrowed notetype. * Show all accepted file types in import file picker * Add import_json_file() * factor → ease_factor * delimter_from_value → delimiter_from_value * Map columns to fields, not the other way around * Fallback to current config for csv metadata * Add start of new import csv screen * Temporary fix for compilation issue on Linux/Mac * Disable jest bazel action for import-csv Jest fails with an error code if no tests are available, but this would not be noticable on Windows as Jest is not run there. * Fix field mapping issue * Revert "Temporary fix for compilation issue on Linux/Mac" This reverts commit 21f8a261408cdae49ec031aa21a1b659c4f66d82. * Add HtmlSwitch and move Switch to components * Fix spacing and make selectors consistent * Fix shortcut tooltip * Place import button at the top with path * Fix meta column indices * Remove NotetypeForString * Fix queue and type of foreign cards * Support different dupe resolution strategies * Allow dupe resolution selection when importing CSV * Test import of unnormalized text Close #1863. * Fix logging of foreign notes * Implement CSV exports * Use db_scalar() in notes_table_len() * Rework CSV metadata - Notetypes and decks are either defined by a global id or by a column. - If a notetype id is provided, its field map must also be specified. - If a notetype column is provided, fields are now mapped by index instead of name at import time. So the first non-meta column is used for the first field of every note, regardless of notetype. This makes importing easier and should improve compatiblity with files without a notetype column. - Ensure first field can be mapped to a column. - Meta columns must be defined as `#[meta name]:[column index]` instead of in the `#columns` tag. - Column labels contain the raw names defined by the file and must be prettified by the frontend. * Adjust frontend to new backend column mapping * Add force flags for is_html and delimiter * Detect if CSV is HTML by field content * Update dupe resolution labels * Simplify selectors * Fix coalescence of oneofs in TS * Disable meta columns from selection Plus a lot of refactoring. * Make import button stick to the bottom * Write delimiter and html flag into csv * Refetch field map after notetype change * Fix log labels for csv import * Log notes whose deck/notetype was missing * Fix hiding of empty log queues * Implement adding tags to all notes of a csv * Fix dupe resolution not being set in log * Implement adding tags to updated notes of a csv * Check first note field is not empty * Temporary fix for build on Linux/Mac * Fix inverted html check (dae) * Remove unused ftl string * Delimiter → Separator * Remove commented-out line * Don't accept .json files * Tweak tag ftl strings * Remove redundant blur call * Strip sound and add spaces in csv export * Export HTML by default * Fix unset deck in Mnemosyne import Also accept both numbers and strings for notetypes and decks in JSON. * Make DupeResolution::Update the default * Fix missing dot in extension * Make column indices 1-based * Remove StickContainer from TagEditor Fixes line breaking, border and z index on ImportCsvPage. * Assign different key combos to tag editors * Log all updated duplicates Add a log field for the true number of found notes. * Show identical notes as skipped * Split tag-editor into separate ts module (dae) * Add progress for CSV export * Add progress for text import * Tidy-ups after tag-editor split (dae) - import-csv no longer depends on editor - remove some commented lines
2022-06-01 12:26:16 +02:00
"authors": "Andrew Gallant <jamslam@gmail.com>",
"repository": "https://github.com/BurntSushi/rust-csv",
"license": "MIT OR Unlicense",
"license_file": null,
"description": "Fast CSV parsing with support for serde."
},
{
"name": "csv-core",
"version": "0.1.11",
"authors": "Andrew Gallant <jamslam@gmail.com>",
"repository": "https://github.com/BurntSushi/rust-csv",
"license": "MIT OR Unlicense",
"license_file": null,
"description": "Bare bones CSV parsing with no_std support."
},
{
"name": "d3d12",
"version": "0.7.0",
"authors": "gfx-rs developers",
"repository": "https://github.com/gfx-rs/d3d12-rs",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Low level D3D12 API wrapper"
},
{
"name": "dashmap",
"version": "5.5.3",
"authors": "Acrimon <joel.wejdenstal@gmail.com>",
"repository": "https://github.com/xacrimon/dashmap",
"license": "MIT",
"license_file": null,
"description": "Blazing fast concurrent HashMap for Rust."
},
{
"name": "data-encoding",
"version": "2.5.0",
"authors": "Julien Cretin <git@ia0.eu>",
"repository": "https://github.com/ia0/data-encoding",
"license": "MIT",
"license_file": null,
"description": "Efficient and customizable data-encoding functions like base64, base32, and hex"
},
Rework syncing code, and replace local sync server (#2329) This PR replaces the existing Python-driven sync server with a new one in Rust. The new server supports both collection and media syncing, and is compatible with both the new protocol mentioned below, and older clients. A setting has been added to the preferences screen to point Anki to a local server, and a similar setting is likely to come to AnkiMobile soon. Documentation is available here: <https://docs.ankiweb.net/sync-server.html> In addition to the new server and refactoring, this PR also makes changes to the sync protocol. The existing sync protocol places payloads and metadata inside a multipart POST body, which causes a few headaches: - Legacy clients build the request in a non-deterministic order, meaning the entire request needs to be scanned to extract the metadata. - Reqwest's multipart API directly writes the multipart body, without exposing the resulting stream to us, making it harder to track the progress of the transfer. We've been relying on a patched version of reqwest for timeouts, which is a pain to keep up to date. To address these issues, the metadata is now sent in a HTTP header, with the data payload sent directly in the body. Instead of the slower gzip, we now use zstd. The old timeout handling code has been replaced with a new implementation that wraps the request and response body streams to track progress, allowing us to drop the git dependencies for reqwest, hyper-timeout and tokio-io-timeout. The main other change to the protocol is that one-way syncs no longer need to downgrade the collection to schema 11 prior to sending.
2023-01-18 03:43:46 +01:00
{
"name": "deadpool",
"version": "0.9.5",
"authors": "Michael P. Jung <michael.jung@terreon.de>",
"repository": "https://github.com/bikeshedder/deadpool",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Dead simple async pool"
},
{
"name": "deadpool-runtime",
"version": "0.1.3",
Rework syncing code, and replace local sync server (#2329) This PR replaces the existing Python-driven sync server with a new one in Rust. The new server supports both collection and media syncing, and is compatible with both the new protocol mentioned below, and older clients. A setting has been added to the preferences screen to point Anki to a local server, and a similar setting is likely to come to AnkiMobile soon. Documentation is available here: <https://docs.ankiweb.net/sync-server.html> In addition to the new server and refactoring, this PR also makes changes to the sync protocol. The existing sync protocol places payloads and metadata inside a multipart POST body, which causes a few headaches: - Legacy clients build the request in a non-deterministic order, meaning the entire request needs to be scanned to extract the metadata. - Reqwest's multipart API directly writes the multipart body, without exposing the resulting stream to us, making it harder to track the progress of the transfer. We've been relying on a patched version of reqwest for timeouts, which is a pain to keep up to date. To address these issues, the metadata is now sent in a HTTP header, with the data payload sent directly in the body. Instead of the slower gzip, we now use zstd. The old timeout handling code has been replaced with a new implementation that wraps the request and response body streams to track progress, allowing us to drop the git dependencies for reqwest, hyper-timeout and tokio-io-timeout. The main other change to the protocol is that one-way syncs no longer need to downgrade the collection to schema 11 prior to sending.
2023-01-18 03:43:46 +01:00
"authors": "Michael P. Jung <michael.jung@terreon.de>",
"repository": "https://github.com/bikeshedder/deadpool",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Dead simple async pool utitities for sync managers"
},
2023-08-23 03:41:30 +02:00
{
"name": "deranged",
"version": "0.3.10",
2023-08-23 03:41:30 +02:00
"authors": "Jacob Pratt <jacob@jhpratt.dev>",
"repository": "https://github.com/jhpratt/deranged",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Ranged integers"
},
{
"name": "derive-new",
"version": "0.5.9",
"authors": "Nick Cameron <ncameron@mozilla.com>",
"repository": "https://github.com/nrc/derive-new",
"license": "MIT",
"license_file": null,
"description": "`#[derive(new)]` implements simple constructor functions for structs and enums."
},
{
"name": "difflib",
"version": "0.4.0",
"authors": "Dima Kudosh <dimakudosh@gmail.com>",
"repository": "https://github.com/DimaKudosh/difflib",
"license": "MIT",
"license_file": null,
"description": "Port of Python's difflib library to Rust."
},
{
"name": "digest",
"version": "0.10.7",
"authors": "RustCrypto Developers",
"repository": "https://github.com/RustCrypto/traits",
2020-12-15 08:10:25 +01:00
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Traits for cryptographic hash functions and message authentication codes"
},
{
"name": "dirs",
"version": "5.0.1",
"authors": "Simon Ochsenreither <simon@ochsenreither.de>",
"repository": "https://github.com/soc/dirs-rs",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "A tiny low-level library that provides platform-specific standard locations of directories for config, cache and other data on Linux, Windows, macOS and Redox by leveraging the mechanisms defined by the XDG base/user directory specifications on Linux, the Known Folder API on Windows, and the Standard Directory guidelines on macOS."
},
{
"name": "dirs-sys",
"version": "0.4.1",
"authors": "Simon Ochsenreither <simon@ochsenreither.de>",
"repository": "https://github.com/dirs-dev/dirs-sys-rs",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "System-level helper functions for the dirs and directories crates."
},
{
"name": "displaydoc",
"version": "0.2.4",
"authors": "Jane Lusby <jlusby@yaah.dev>",
"repository": "https://github.com/yaahc/displaydoc",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "A derive macro for implementing the display Trait via a doc comment and string interpolation"
},
{
"name": "doc-comment",
"version": "0.3.3",
"authors": "Guillaume Gomez <guillaume1.gomez@gmail.com>",
"repository": "https://github.com/GuillaumeGomez/doc-comment",
"license": "MIT",
"license_file": null,
"description": "Macro to generate doc comments"
},
{
"name": "dyn-stack",
"version": "0.10.0",
"authors": "sarah <>",
"repository": "https://github.com/kitegi/dynstack/",
"license": "MIT",
"license_file": null,
"description": "Dynamic stack wrapper for unsized allocations"
},
{
"name": "either",
2023-08-23 03:41:30 +02:00
"version": "1.9.0",
"authors": "bluss",
"repository": "https://github.com/bluss/either",
2020-12-15 08:10:25 +01:00
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "The enum `Either` with variants `Left` and `Right` is a general purpose sum type with two cases."
},
{
"name": "encoding_rs",
"version": "0.8.33",
"authors": "Henri Sivonen <hsivonen@hsivonen.fi>",
"repository": "https://github.com/hsivonen/encoding_rs",
2022-09-24 04:39:21 +02:00
"license": "(Apache-2.0 OR MIT) AND BSD-3-Clause",
"license_file": null,
"description": "A Gecko-oriented implementation of the Encoding Standard"
},
{
"name": "envy",
"version": "0.4.2",
"authors": "softprops <d.tangren@gmail.com>",
"repository": "https://github.com/softprops/envy",
"license": "MIT",
"license_file": null,
"description": "deserialize env vars into typesafe structs"
},
{
"name": "equivalent",
2023-08-23 03:41:30 +02:00
"version": "1.0.1",
"authors": null,
"repository": "https://github.com/cuviper/equivalent",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Traits for key comparison in maps."
},
{
"name": "errno",
"version": "0.3.8",
"authors": "Chris Wong <lambda.fairy@gmail.com>",
"repository": "https://github.com/lambda-fairy/rust-errno",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Cross-platform interface to the `errno` variable."
},
Rework syncing code, and replace local sync server (#2329) This PR replaces the existing Python-driven sync server with a new one in Rust. The new server supports both collection and media syncing, and is compatible with both the new protocol mentioned below, and older clients. A setting has been added to the preferences screen to point Anki to a local server, and a similar setting is likely to come to AnkiMobile soon. Documentation is available here: <https://docs.ankiweb.net/sync-server.html> In addition to the new server and refactoring, this PR also makes changes to the sync protocol. The existing sync protocol places payloads and metadata inside a multipart POST body, which causes a few headaches: - Legacy clients build the request in a non-deterministic order, meaning the entire request needs to be scanned to extract the metadata. - Reqwest's multipart API directly writes the multipart body, without exposing the resulting stream to us, making it harder to track the progress of the transfer. We've been relying on a patched version of reqwest for timeouts, which is a pain to keep up to date. To address these issues, the metadata is now sent in a HTTP header, with the data payload sent directly in the body. Instead of the slower gzip, we now use zstd. The old timeout handling code has been replaced with a new implementation that wraps the request and response body streams to track progress, allowing us to drop the git dependencies for reqwest, hyper-timeout and tokio-io-timeout. The main other change to the protocol is that one-way syncs no longer need to downgrade the collection to schema 11 prior to sending.
2023-01-18 03:43:46 +01:00
{
"name": "event-listener",
"version": "2.5.3",
"authors": "Stjepan Glavina <stjepang@gmail.com>",
"repository": "https://github.com/smol-rs/event-listener",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Notify async tasks or threads"
},
{
"name": "exr",
"version": "1.6.4",
"authors": "johannesvollmer <johannes596@t-online.de>",
"repository": "https://github.com/johannesvollmer/exrs",
"license": "BSD-3-Clause",
"license_file": null,
"description": "Read and write OpenEXR files without any unsafe code"
},
{
"name": "fallible-iterator",
"version": "0.3.0",
"authors": "Steven Fackler <sfackler@gmail.com>",
"repository": "https://github.com/sfackler/rust-fallible-iterator",
2020-12-15 08:10:25 +01:00
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Fallible iterator traits"
},
{
"name": "fallible-streaming-iterator",
"version": "0.1.9",
"authors": "Steven Fackler <sfackler@gmail.com>",
"repository": "https://github.com/sfackler/fallible-streaming-iterator",
2020-12-15 08:10:25 +01:00
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Fallible streaming iteration"
},
{
"name": "faster-hex",
"version": "0.8.1",
"authors": "zhangsoledad <787953403@qq.com>",
"repository": "https://github.com/NervosFoundation/faster-hex",
"license": "MIT",
"license_file": null,
"description": "Fast hex encoding."
},
2022-01-15 05:59:43 +01:00
{
"name": "fastrand",
"version": "1.9.0",
2022-01-15 05:59:43 +01:00
"authors": "Stjepan Glavina <stjepang@gmail.com>",
"repository": "https://github.com/smol-rs/fastrand",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "A simple and fast random number generator"
},
2023-08-23 03:41:30 +02:00
{
"name": "fastrand",
"version": "2.0.1",
2023-08-23 03:41:30 +02:00
"authors": "Stjepan Glavina <stjepang@gmail.com>",
"repository": "https://github.com/smol-rs/fastrand",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "A simple and fast random number generator"
},
{
"name": "fdeflate",
"version": "0.3.1",
"authors": "The image-rs Developers",
"repository": "https://github.com/image-rs/fdeflate",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Fast specialized deflate implementation"
},
{
"name": "find-crate",
"version": "0.6.3",
"authors": "Taiki Endo <te316e89@gmail.com>",
"repository": "https://github.com/taiki-e/find-crate",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Find the crate name from the current Cargo.toml."
},
{
"name": "fixedbitset",
2022-09-24 04:39:21 +02:00
"version": "0.4.2",
"authors": "bluss",
2022-01-15 05:59:43 +01:00
"repository": "https://github.com/petgraph/fixedbitset",
2020-12-15 08:10:25 +01:00
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "FixedBitSet is a simple bitset collection"
},
{
"name": "flate2",
2023-10-25 01:28:10 +02:00
"version": "1.0.28",
"authors": "Alex Crichton <alex@alexcrichton.com>|Josh Triplett <josh@joshtriplett.org>",
"repository": "https://github.com/rust-lang/flate2-rs",
2020-12-15 08:10:25 +01:00
"license": "Apache-2.0 OR MIT",
"license_file": null,
2022-09-24 04:39:21 +02:00
"description": "DEFLATE compression and decompression exposed as Read/BufRead/Write streams. Supports miniz_oxide and multiple zlib implementations. Supports zlib, gzip, and raw deflate streams."
},
{
"name": "fluent",
2021-10-02 12:42:03 +02:00
"version": "0.16.0",
"authors": "Zibi Braniecki <gandalf@mozilla.com>|Staś Małolepszy <stas@mozilla.com>",
"repository": "https://github.com/projectfluent/fluent-rs",
2020-12-15 08:10:25 +01:00
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "A localization system designed to unleash the entire expressive power of natural language translations."
},
{
"name": "fluent-bundle",
"version": "0.15.2",
"authors": "Zibi Braniecki <gandalf@mozilla.com>|Staś Małolepszy <stas@mozilla.com>",
"repository": "https://github.com/projectfluent/fluent-rs",
2020-12-15 08:10:25 +01:00
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "A localization system designed to unleash the entire expressive power of natural language translations."
},
{
"name": "fluent-langneg",
"version": "0.13.0",
"authors": "Zibi Braniecki <gandalf@mozilla.com>",
"repository": "https://github.com/projectfluent/fluent-langneg-rs",
"license": "Apache-2.0",
"license_file": null,
"description": "A library for language and locale negotiation."
},
{
"name": "fluent-syntax",
2021-03-27 04:24:11 +01:00
"version": "0.11.0",
"authors": "Zibi Braniecki <gandalf@mozilla.com>|Staś Małolepszy <stas@mozilla.com>",
"repository": "https://github.com/projectfluent/fluent-rs",
2020-12-15 08:10:25 +01:00
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Parser/Serializer tools for Fluent Syntax."
},
{
"name": "flume",
"version": "0.10.14",
"authors": "Joshua Barretto <joshua.s.barretto@gmail.com>",
"repository": "https://github.com/zesterer/flume",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "A blazingly fast multi-producer channel"
},
{
"name": "flume",
"version": "0.11.0",
"authors": "Joshua Barretto <joshua.s.barretto@gmail.com>",
"repository": "https://github.com/zesterer/flume",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "A blazingly fast multi-producer channel"
},
{
"name": "fnv",
"version": "1.0.7",
"authors": "Alex Crichton <alex@alexcrichton.com>",
"repository": "https://github.com/servo/rust-fnv",
2020-12-15 08:10:25 +01:00
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "FowlerNollVo hash function"
},
{
"name": "foreign-types",
"version": "0.3.2",
"authors": "Steven Fackler <sfackler@gmail.com>",
"repository": "https://github.com/sfackler/foreign-types",
2020-12-15 08:10:25 +01:00
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "A framework for Rust wrappers over C APIs"
},
{
"name": "foreign-types",
"version": "0.5.0",
"authors": "Steven Fackler <sfackler@gmail.com>",
"repository": "https://github.com/sfackler/foreign-types",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "A framework for Rust wrappers over C APIs"
},
{
"name": "foreign-types-macros",
"version": "0.2.3",
"authors": "Steven Fackler <sfackler@gmail.com>",
"repository": "https://github.com/sfackler/foreign-types",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "An internal crate used by foreign-types"
},
{
"name": "foreign-types-shared",
"version": "0.1.1",
"authors": "Steven Fackler <sfackler@gmail.com>",
"repository": "https://github.com/sfackler/foreign-types",
2020-12-15 08:10:25 +01:00
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "An internal crate used by foreign-types"
},
{
"name": "foreign-types-shared",
"version": "0.3.1",
"authors": "Steven Fackler <sfackler@gmail.com>",
"repository": "https://github.com/sfackler/foreign-types",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "An internal crate used by foreign-types"
},
{
"name": "form_urlencoded",
"version": "1.2.1",
"authors": "The rust-url developers",
"repository": "https://github.com/servo/rust-url",
2020-12-15 08:10:25 +01:00
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Parser and serializer for the application/x-www-form-urlencoded syntax, as used by HTML forms."
},
Rework syncing code, and replace local sync server (#2329) This PR replaces the existing Python-driven sync server with a new one in Rust. The new server supports both collection and media syncing, and is compatible with both the new protocol mentioned below, and older clients. A setting has been added to the preferences screen to point Anki to a local server, and a similar setting is likely to come to AnkiMobile soon. Documentation is available here: <https://docs.ankiweb.net/sync-server.html> In addition to the new server and refactoring, this PR also makes changes to the sync protocol. The existing sync protocol places payloads and metadata inside a multipart POST body, which causes a few headaches: - Legacy clients build the request in a non-deterministic order, meaning the entire request needs to be scanned to extract the metadata. - Reqwest's multipart API directly writes the multipart body, without exposing the resulting stream to us, making it harder to track the progress of the transfer. We've been relying on a patched version of reqwest for timeouts, which is a pain to keep up to date. To address these issues, the metadata is now sent in a HTTP header, with the data payload sent directly in the body. Instead of the slower gzip, we now use zstd. The old timeout handling code has been replaced with a new implementation that wraps the request and response body streams to track progress, allowing us to drop the git dependencies for reqwest, hyper-timeout and tokio-io-timeout. The main other change to the protocol is that one-way syncs no longer need to downgrade the collection to schema 11 prior to sending.
2023-01-18 03:43:46 +01:00
{
"name": "forwarded-header-value",
"version": "0.1.1",
"authors": "James Brown <jbrown@easypost.com>",
"repository": "https://github.com/EasyPost/rust-forwarded-header-value",
"license": "ISC",
"license_file": null,
"description": "Parser for values from the Forwarded header (RFC 7239)"
},
{
Integrate FSRS into Anki (#2654) * Pack FSRS data into card.data * Update FSRS card data when preset or weights change + Show FSRS stats in card stats * Show a warning when there's a limited review history * Add some translations; tweak UI * Fix default requested retention * Add browser columns, fix calculation of R * Property searches eg prop:d>0.1 * Integrate FSRS into reviewer * Warn about long learning steps * Hide minimum interval when FSRS is on * Don't apply interval multiplier to FSRS intervals * Expose memory state to Python * Don't set memory state on new cards * Port Jarret's new tests; add some helpers to make tests more compact https://github.com/open-spaced-repetition/fsrs-rs/pull/64 * Fix learning cards not being given memory state * Require update to v3 scheduler * Don't exclude single learning step when calculating memory state * Use relearning step when learning steps unavailable * Update docstring * fix single_card_revlog_to_items (#2656) * not need check the review_kind for unique_dates * add email address to CONTRIBUTORS * fix last first learn & keep early review * cargo fmt * cargo clippy --fix * Add Jarrett to about screen * Fix fsrs_memory_state being initialized to default in get_card() * Set initial memory state on graduate * Update to latest FSRS * Fix experiment.log being empty * Fix broken colpkg imports Introduced by "Update FSRS card data when preset or weights change" * Update memory state during (re)learning; use FSRS for graduating intervals * Reset memory state when cards are manually rescheduled as new * Add difficulty graph; hide eases when FSRS enabled * Add retrievability graph * Derive memory_state from revlog when it's missing and shouldn't be --------- Co-authored-by: Jarrett Ye <jarrett.ye@outlook.com>
2023-09-16 08:09:26 +02:00
"name": "fsrs",
"version": "0.1.0",
"authors": null,
"repository": null,
"license": "BSD-3-Clause",
"license_file": null,
"description": null
},
{
"name": "futf",
"version": "0.1.5",
"authors": "Keegan McAllister <kmcallister@mozilla.com>",
"repository": "https://github.com/servo/futf",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Handling fragments of UTF-8"
},
{
"name": "futures",
"version": "0.3.29",
2021-12-03 11:04:47 +01:00
"authors": null,
"repository": "https://github.com/rust-lang/futures-rs",
2020-12-15 08:10:25 +01:00
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "An implementation of futures and streams featuring zero allocations, composability, and iterator-like interfaces."
},
{
"name": "futures-channel",
"version": "0.3.29",
2021-12-03 11:04:47 +01:00
"authors": null,
"repository": "https://github.com/rust-lang/futures-rs",
2020-12-15 08:10:25 +01:00
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Channels for asynchronous communication using futures-rs."
},
{
"name": "futures-core",
"version": "0.3.29",
2021-12-03 11:04:47 +01:00
"authors": null,
"repository": "https://github.com/rust-lang/futures-rs",
2020-12-15 08:10:25 +01:00
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "The core traits and types in for the `futures` library."
},
{
"name": "futures-executor",
"version": "0.3.29",
2021-12-03 11:04:47 +01:00
"authors": null,
"repository": "https://github.com/rust-lang/futures-rs",
2020-12-15 08:10:25 +01:00
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Executors for asynchronous tasks based on the futures-rs library."
},
{
"name": "futures-intrusive",
"version": "0.5.0",
"authors": "Matthias Einwag <matthias.einwag@live.com>",
"repository": "https://github.com/Matthias247/futures-intrusive",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Futures based on intrusive data structures - for std and no-std environments."
},
{
"name": "futures-io",
"version": "0.3.29",
2021-12-03 11:04:47 +01:00
"authors": null,
"repository": "https://github.com/rust-lang/futures-rs",
2020-12-15 08:10:25 +01:00
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "The `AsyncRead`, `AsyncWrite`, `AsyncSeek`, and `AsyncBufRead` traits for the futures-rs library."
},
Rework syncing code, and replace local sync server (#2329) This PR replaces the existing Python-driven sync server with a new one in Rust. The new server supports both collection and media syncing, and is compatible with both the new protocol mentioned below, and older clients. A setting has been added to the preferences screen to point Anki to a local server, and a similar setting is likely to come to AnkiMobile soon. Documentation is available here: <https://docs.ankiweb.net/sync-server.html> In addition to the new server and refactoring, this PR also makes changes to the sync protocol. The existing sync protocol places payloads and metadata inside a multipart POST body, which causes a few headaches: - Legacy clients build the request in a non-deterministic order, meaning the entire request needs to be scanned to extract the metadata. - Reqwest's multipart API directly writes the multipart body, without exposing the resulting stream to us, making it harder to track the progress of the transfer. We've been relying on a patched version of reqwest for timeouts, which is a pain to keep up to date. To address these issues, the metadata is now sent in a HTTP header, with the data payload sent directly in the body. Instead of the slower gzip, we now use zstd. The old timeout handling code has been replaced with a new implementation that wraps the request and response body streams to track progress, allowing us to drop the git dependencies for reqwest, hyper-timeout and tokio-io-timeout. The main other change to the protocol is that one-way syncs no longer need to downgrade the collection to schema 11 prior to sending.
2023-01-18 03:43:46 +01:00
{
"name": "futures-lite",
"version": "1.13.0",
Rework syncing code, and replace local sync server (#2329) This PR replaces the existing Python-driven sync server with a new one in Rust. The new server supports both collection and media syncing, and is compatible with both the new protocol mentioned below, and older clients. A setting has been added to the preferences screen to point Anki to a local server, and a similar setting is likely to come to AnkiMobile soon. Documentation is available here: <https://docs.ankiweb.net/sync-server.html> In addition to the new server and refactoring, this PR also makes changes to the sync protocol. The existing sync protocol places payloads and metadata inside a multipart POST body, which causes a few headaches: - Legacy clients build the request in a non-deterministic order, meaning the entire request needs to be scanned to extract the metadata. - Reqwest's multipart API directly writes the multipart body, without exposing the resulting stream to us, making it harder to track the progress of the transfer. We've been relying on a patched version of reqwest for timeouts, which is a pain to keep up to date. To address these issues, the metadata is now sent in a HTTP header, with the data payload sent directly in the body. Instead of the slower gzip, we now use zstd. The old timeout handling code has been replaced with a new implementation that wraps the request and response body streams to track progress, allowing us to drop the git dependencies for reqwest, hyper-timeout and tokio-io-timeout. The main other change to the protocol is that one-way syncs no longer need to downgrade the collection to schema 11 prior to sending.
2023-01-18 03:43:46 +01:00
"authors": "Stjepan Glavina <stjepang@gmail.com>|Contributors to futures-rs",
"repository": "https://github.com/smol-rs/futures-lite",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Futures, streams, and async I/O combinators"
},
{
"name": "futures-macro",
"version": "0.3.29",
2021-12-03 11:04:47 +01:00
"authors": null,
"repository": "https://github.com/rust-lang/futures-rs",
2020-12-15 08:10:25 +01:00
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "The futures-rs procedural macro implementations."
},
{
"name": "futures-sink",
"version": "0.3.29",
2021-12-03 11:04:47 +01:00
"authors": null,
"repository": "https://github.com/rust-lang/futures-rs",
2020-12-15 08:10:25 +01:00
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "The asynchronous `Sink` trait for the futures-rs library."
},
{
"name": "futures-task",
"version": "0.3.29",
2021-12-03 11:04:47 +01:00
"authors": null,
"repository": "https://github.com/rust-lang/futures-rs",
2020-12-15 08:10:25 +01:00
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Tools for working with tasks."
},
Rework syncing code, and replace local sync server (#2329) This PR replaces the existing Python-driven sync server with a new one in Rust. The new server supports both collection and media syncing, and is compatible with both the new protocol mentioned below, and older clients. A setting has been added to the preferences screen to point Anki to a local server, and a similar setting is likely to come to AnkiMobile soon. Documentation is available here: <https://docs.ankiweb.net/sync-server.html> In addition to the new server and refactoring, this PR also makes changes to the sync protocol. The existing sync protocol places payloads and metadata inside a multipart POST body, which causes a few headaches: - Legacy clients build the request in a non-deterministic order, meaning the entire request needs to be scanned to extract the metadata. - Reqwest's multipart API directly writes the multipart body, without exposing the resulting stream to us, making it harder to track the progress of the transfer. We've been relying on a patched version of reqwest for timeouts, which is a pain to keep up to date. To address these issues, the metadata is now sent in a HTTP header, with the data payload sent directly in the body. Instead of the slower gzip, we now use zstd. The old timeout handling code has been replaced with a new implementation that wraps the request and response body streams to track progress, allowing us to drop the git dependencies for reqwest, hyper-timeout and tokio-io-timeout. The main other change to the protocol is that one-way syncs no longer need to downgrade the collection to schema 11 prior to sending.
2023-01-18 03:43:46 +01:00
{
"name": "futures-timer",
"version": "3.0.2",
"authors": "Alex Crichton <alex@alexcrichton.com>",
"repository": "https://github.com/async-rs/futures-timer",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Timeouts for futures."
},
{
"name": "futures-util",
"version": "0.3.29",
2021-12-03 11:04:47 +01:00
"authors": null,
"repository": "https://github.com/rust-lang/futures-rs",
2020-12-15 08:10:25 +01:00
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Common utilities and extension traits for the futures-rs library."
},
{
"name": "gemm",
"version": "0.16.15",
"authors": "sarah <>",
"repository": "https://github.com/sarah-ek/gemm/",
"license": "MIT",
"license_file": null,
"description": "Playground for matrix multiplication algorithms"
},
{
"name": "gemm-c32",
"version": "0.16.15",
"authors": "sarah <>",
"repository": "https://github.com/sarah-ek/gemm/",
"license": "MIT",
"license_file": null,
"description": "Playground for matrix multiplication algorithms"
},
{
"name": "gemm-c64",
"version": "0.16.15",
"authors": "sarah <>",
"repository": "https://github.com/sarah-ek/gemm/",
"license": "MIT",
"license_file": null,
"description": "Playground for matrix multiplication algorithms"
},
{
"name": "gemm-common",
"version": "0.16.15",
"authors": "sarah <>",
"repository": "https://github.com/sarah-ek/gemm/",
"license": "MIT",
"license_file": null,
"description": "Playground for matrix multiplication algorithms"
},
{
"name": "gemm-f16",
"version": "0.16.15",
"authors": "sarah <>",
"repository": "https://github.com/sarah-ek/gemm/",
"license": "MIT",
"license_file": null,
"description": "Playground for matrix multiplication algorithms"
},
{
"name": "gemm-f32",
"version": "0.16.15",
"authors": "sarah <>",
"repository": "https://github.com/sarah-ek/gemm/",
"license": "MIT",
"license_file": null,
"description": "Playground for matrix multiplication algorithms"
},
{
"name": "gemm-f64",
"version": "0.16.15",
"authors": "sarah <>",
"repository": "https://github.com/sarah-ek/gemm/",
"license": "MIT",
"license_file": null,
"description": "Playground for matrix multiplication algorithms"
},
{
"name": "generic-array",
"version": "0.14.7",
"authors": "Bartłomiej Kamiński <fizyk20@gmail.com>|Aaron Trent <novacrazy@gmail.com>",
"repository": "https://github.com/fizyk20/generic-array.git",
"license": "MIT",
"license_file": null,
"description": "Generic types implementing functionality of arrays"
},
{
"name": "getopts",
"version": "0.2.21",
"authors": "The Rust Project Developers",
"repository": "https://github.com/rust-lang/getopts",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "getopts-like option parsing."
},
Rework syncing code, and replace local sync server (#2329) This PR replaces the existing Python-driven sync server with a new one in Rust. The new server supports both collection and media syncing, and is compatible with both the new protocol mentioned below, and older clients. A setting has been added to the preferences screen to point Anki to a local server, and a similar setting is likely to come to AnkiMobile soon. Documentation is available here: <https://docs.ankiweb.net/sync-server.html> In addition to the new server and refactoring, this PR also makes changes to the sync protocol. The existing sync protocol places payloads and metadata inside a multipart POST body, which causes a few headaches: - Legacy clients build the request in a non-deterministic order, meaning the entire request needs to be scanned to extract the metadata. - Reqwest's multipart API directly writes the multipart body, without exposing the resulting stream to us, making it harder to track the progress of the transfer. We've been relying on a patched version of reqwest for timeouts, which is a pain to keep up to date. To address these issues, the metadata is now sent in a HTTP header, with the data payload sent directly in the body. Instead of the slower gzip, we now use zstd. The old timeout handling code has been replaced with a new implementation that wraps the request and response body streams to track progress, allowing us to drop the git dependencies for reqwest, hyper-timeout and tokio-io-timeout. The main other change to the protocol is that one-way syncs no longer need to downgrade the collection to schema 11 prior to sending.
2023-01-18 03:43:46 +01:00
{
"name": "getrandom",
"version": "0.1.16",
"authors": "The Rand Project Developers",
"repository": "https://github.com/rust-random/getrandom",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "A small cross-platform library for retrieving random data from system source"
},
{
"name": "getrandom",
"version": "0.2.11",
2021-02-03 11:29:48 +01:00
"authors": "The Rand Project Developers",
"repository": "https://github.com/rust-random/getrandom",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "A small cross-platform library for retrieving random data from system source"
},
{
"name": "gif",
"version": "0.12.0",
"authors": "The image-rs Developers",
"repository": "https://github.com/image-rs/image-gif",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "GIF de- and encoder"
},
{
"name": "gimli",
"version": "0.28.1",
"authors": null,
"repository": "https://github.com/gimli-rs/gimli",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "A library for reading and writing the DWARF debugging format."
},
{
"name": "gix-features",
"version": "0.33.0",
"authors": "Sebastian Thiel <sebastian.thiel@icloud.com>",
"repository": "https://github.com/Byron/gitoxide",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "A crate to integrate various capabilities using compile-time feature flags"
},
{
"name": "gix-fs",
"version": "0.5.0",
"authors": "Sebastian Thiel <sebastian.thiel@icloud.com>",
"repository": "https://github.com/Byron/gitoxide",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "A crate providing file system specific utilities to `gitoxide`"
},
{
"name": "gix-hash",
"version": "0.12.0",
"authors": "Sebastian Thiel <sebastian.thiel@icloud.com>",
"repository": "https://github.com/Byron/gitoxide",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Borrowed and owned git hash digests used to identify git objects"
},
{
"name": "gix-tempfile",
"version": "8.0.0",
"authors": "Sebastian Thiel <sebastian.thiel@icloud.com>",
"repository": "https://github.com/Byron/gitoxide",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "A tempfile implementation with a global registry to assure cleanup"
},
{
"name": "gix-trace",
"version": "0.1.3",
"authors": "Sebastian Thiel <sebastian.thiel@icloud.com>",
"repository": "https://github.com/Byron/gitoxide",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "A crate to provide minimal `tracing` support that can be turned off to zero cost"
},
{
"name": "gl_generator",
"version": "0.14.0",
"authors": "Brendan Zabarauskas <bjzaba@yahoo.com.au>|Corey Richardson|Arseny Kapoulkine",
"repository": "https://github.com/brendanzab/gl-rs/",
"license": "Apache-2.0",
"license_file": null,
"description": "Code generators for creating bindings to the Khronos OpenGL APIs."
},
{
"name": "glow",
"version": "0.13.0",
"authors": "Joshua Groves <josh@joshgroves.com>|Dzmitry Malyshau <kvarkus@gmail.com>",
"repository": "https://github.com/grovesNL/glow",
"license": "Apache-2.0 OR MIT OR Zlib",
"license_file": null,
"description": "GL on Whatever: a set of bindings to run GL (Open GL, OpenGL ES, and WebGL) anywhere, and avoid target-specific code."
},
{
"name": "glutin_wgl_sys",
"version": "0.5.0",
"authors": "Kirill Chibisov <contact@kchibisov.com>",
"repository": "https://github.com/rust-windowing/glutin",
"license": "Apache-2.0",
"license_file": null,
"description": "The wgl bindings for glutin"
},
{
"name": "gpu-alloc",
"version": "0.6.0",
"authors": "Zakarum <zakarumych@ya.ru>",
"repository": "https://github.com/zakarumych/gpu-alloc",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Implementation agnostic memory allocator for Vulkan like APIs"
},
{
"name": "gpu-alloc-types",
"version": "0.3.0",
"authors": "Zakarum <zakarumych@ya.ru>",
"repository": "https://github.com/zakarumych/gpu-alloc",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Core types of gpu-alloc crate"
},
{
"name": "gpu-allocator",
"version": "0.23.0",
"authors": "Traverse Research <opensource@traverseresearch.nl>",
"repository": "https://github.com/Traverse-Research/gpu-allocator",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Memory allocator for GPU memory in Vulkan and DirectX 12"
},
{
"name": "gpu-descriptor",
"version": "0.2.4",
"authors": "Zakarum <zakarumych@ya.ru>",
"repository": "https://github.com/zakarumych/gpu-descriptor",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Implementation agnostic descriptor allocator for Vulkan like APIs"
},
{
"name": "gpu-descriptor-types",
"version": "0.1.2",
"authors": "Zakarum <zakarumych@ya.ru>",
"repository": "https://github.com/zakarumych/gpu-descriptor",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Core types of gpu-descriptor crate"
},
{
"name": "h2",
"version": "0.3.22",
"authors": "Carl Lerche <me@carllerche.com>|Sean McArthur <sean@seanmonstar.com>",
"repository": "https://github.com/hyperium/h2",
"license": "MIT",
"license_file": null,
"description": "An HTTP/2 client and server"
},
{
"name": "half",
"version": "2.3.1",
"authors": "Kathryn Long <squeeself@gmail.com>",
"repository": "https://github.com/starkat99/half-rs",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Half-precision floating point f16 and bf16 types for Rust implementing the IEEE 754-2008 standard binary16 and bfloat16 types."
},
{
"name": "hashbrown",
"version": "0.13.2",
"authors": "Amanieu d'Antras <amanieu@gmail.com>",
"repository": "https://github.com/rust-lang/hashbrown",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "A Rust port of Google's SwissTable hash map"
},
2021-06-25 08:22:21 +02:00
{
"name": "hashbrown",
"version": "0.14.3",
"authors": "Amanieu d'Antras <amanieu@gmail.com>",
"repository": "https://github.com/rust-lang/hashbrown",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "A Rust port of Google's SwissTable hash map"
},
{
"name": "hashlink",
"version": "0.8.4",
"authors": "kyren <kerriganw@gmail.com>",
"repository": "https://github.com/kyren/hashlink",
2020-12-15 08:10:25 +01:00
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "HashMap-like containers that hold their key-value pairs in a user controllable order"
},
{
"name": "hassle-rs",
"version": "0.10.0",
"authors": "Traverse-Research <support@traverseresearch.nl>",
"repository": "https://github.com/Traverse-Research/hassle-rs",
"license": "MIT",
"license_file": null,
"description": "HLSL compiler library, this crate provides an FFI layer and idiomatic rust wrappers for the new DXC hlsl compiler and validator."
},
Rework syncing code, and replace local sync server (#2329) This PR replaces the existing Python-driven sync server with a new one in Rust. The new server supports both collection and media syncing, and is compatible with both the new protocol mentioned below, and older clients. A setting has been added to the preferences screen to point Anki to a local server, and a similar setting is likely to come to AnkiMobile soon. Documentation is available here: <https://docs.ankiweb.net/sync-server.html> In addition to the new server and refactoring, this PR also makes changes to the sync protocol. The existing sync protocol places payloads and metadata inside a multipart POST body, which causes a few headaches: - Legacy clients build the request in a non-deterministic order, meaning the entire request needs to be scanned to extract the metadata. - Reqwest's multipart API directly writes the multipart body, without exposing the resulting stream to us, making it harder to track the progress of the transfer. We've been relying on a patched version of reqwest for timeouts, which is a pain to keep up to date. To address these issues, the metadata is now sent in a HTTP header, with the data payload sent directly in the body. Instead of the slower gzip, we now use zstd. The old timeout handling code has been replaced with a new implementation that wraps the request and response body streams to track progress, allowing us to drop the git dependencies for reqwest, hyper-timeout and tokio-io-timeout. The main other change to the protocol is that one-way syncs no longer need to downgrade the collection to schema 11 prior to sending.
2023-01-18 03:43:46 +01:00
{
"name": "headers",
"version": "0.3.9",
Rework syncing code, and replace local sync server (#2329) This PR replaces the existing Python-driven sync server with a new one in Rust. The new server supports both collection and media syncing, and is compatible with both the new protocol mentioned below, and older clients. A setting has been added to the preferences screen to point Anki to a local server, and a similar setting is likely to come to AnkiMobile soon. Documentation is available here: <https://docs.ankiweb.net/sync-server.html> In addition to the new server and refactoring, this PR also makes changes to the sync protocol. The existing sync protocol places payloads and metadata inside a multipart POST body, which causes a few headaches: - Legacy clients build the request in a non-deterministic order, meaning the entire request needs to be scanned to extract the metadata. - Reqwest's multipart API directly writes the multipart body, without exposing the resulting stream to us, making it harder to track the progress of the transfer. We've been relying on a patched version of reqwest for timeouts, which is a pain to keep up to date. To address these issues, the metadata is now sent in a HTTP header, with the data payload sent directly in the body. Instead of the slower gzip, we now use zstd. The old timeout handling code has been replaced with a new implementation that wraps the request and response body streams to track progress, allowing us to drop the git dependencies for reqwest, hyper-timeout and tokio-io-timeout. The main other change to the protocol is that one-way syncs no longer need to downgrade the collection to schema 11 prior to sending.
2023-01-18 03:43:46 +01:00
"authors": "Sean McArthur <sean@seanmonstar.com>",
"repository": "https://github.com/hyperium/headers",
"license": "MIT",
"license_file": null,
"description": "typed HTTP headers"
},
{
"name": "headers-core",
"version": "0.2.0",
"authors": "Sean McArthur <sean@seanmonstar.com>",
"repository": "https://github.com/hyperium/headers",
"license": "MIT",
"license_file": null,
"description": "typed HTTP headers core trait"
},
{
"name": "heck",
"version": "0.4.1",
"authors": "Without Boats <woboats@gmail.com>",
"repository": "https://github.com/withoutboats/heck",
2020-12-15 08:10:25 +01:00
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "heck is a case conversion library."
},
{
"name": "hermit-abi",
"version": "0.3.3",
"authors": "Stefan Lankes",
"repository": "https://github.com/hermitcore/hermit-rs",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Hermit system calls definitions."
},
{
"name": "hex",
2021-03-07 10:04:34 +01:00
"version": "0.4.3",
"authors": "KokaKiwi <kokakiwi@kokakiwi.net>",
"repository": "https://github.com/KokaKiwi/rust-hex",
2020-12-15 08:10:25 +01:00
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Encoding and decoding data into/from hexadecimal representation."
},
{
"name": "hexf-parse",
"version": "0.2.1",
"authors": "Kang Seonghoon <public+rust@mearie.org>",
"repository": "https://github.com/lifthrasiir/hexf",
"license": "CC0-1.0",
"license_file": null,
"description": "Parses hexadecimal floats (see also hexf)"
},
{
"name": "hmac",
"version": "0.12.1",
"authors": "RustCrypto Developers",
"repository": "https://github.com/RustCrypto/MACs",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Generic implementation of Hash-based Message Authentication Code (HMAC)"
},
{
"name": "home",
"version": "0.5.5",
"authors": "Brian Anderson <andersrb@gmail.com>",
"repository": "https://github.com/rust-lang/cargo",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Shared definitions of home directories."
},
{
"name": "html5ever",
2022-09-24 04:39:21 +02:00
"version": "0.26.0",
"authors": "The html5ever Project Developers",
"repository": "https://github.com/servo/html5ever",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "High-performance browser-grade HTML5 parser"
},
{
"name": "htmlescape",
"version": "0.3.1",
"authors": "Viktor Dahl <pazaconyoman@gmail.com>",
"repository": "https://github.com/veddan/rust-htmlescape",
2020-12-15 08:10:25 +01:00
"license": "Apache-2.0 OR MIT OR MPL-2.0",
"license_file": null,
"description": "A library for HTML entity encoding and decoding"
},
{
"name": "http",
"version": "0.2.11",
"authors": "Alex Crichton <alex@alexcrichton.com>|Carl Lerche <me@carllerche.com>|Sean McArthur <sean@seanmonstar.com>",
"repository": "https://github.com/hyperium/http",
2020-12-15 08:10:25 +01:00
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "A set of types for representing HTTP requests and responses."
},
{
"name": "http-body",
2022-09-24 04:39:21 +02:00
"version": "0.4.5",
"authors": "Carl Lerche <me@carllerche.com>|Lucio Franco <luciofranco14@gmail.com>|Sean McArthur <sean@seanmonstar.com>",
"repository": "https://github.com/hyperium/http-body",
"license": "MIT",
"license_file": null,
"description": "Trait representing an asynchronous, streaming, HTTP request or response body."
},
Rework syncing code, and replace local sync server (#2329) This PR replaces the existing Python-driven sync server with a new one in Rust. The new server supports both collection and media syncing, and is compatible with both the new protocol mentioned below, and older clients. A setting has been added to the preferences screen to point Anki to a local server, and a similar setting is likely to come to AnkiMobile soon. Documentation is available here: <https://docs.ankiweb.net/sync-server.html> In addition to the new server and refactoring, this PR also makes changes to the sync protocol. The existing sync protocol places payloads and metadata inside a multipart POST body, which causes a few headaches: - Legacy clients build the request in a non-deterministic order, meaning the entire request needs to be scanned to extract the metadata. - Reqwest's multipart API directly writes the multipart body, without exposing the resulting stream to us, making it harder to track the progress of the transfer. We've been relying on a patched version of reqwest for timeouts, which is a pain to keep up to date. To address these issues, the metadata is now sent in a HTTP header, with the data payload sent directly in the body. Instead of the slower gzip, we now use zstd. The old timeout handling code has been replaced with a new implementation that wraps the request and response body streams to track progress, allowing us to drop the git dependencies for reqwest, hyper-timeout and tokio-io-timeout. The main other change to the protocol is that one-way syncs no longer need to downgrade the collection to schema 11 prior to sending.
2023-01-18 03:43:46 +01:00
{
"name": "http-range-header",
2023-08-23 03:41:30 +02:00
"version": "0.3.1",
Rework syncing code, and replace local sync server (#2329) This PR replaces the existing Python-driven sync server with a new one in Rust. The new server supports both collection and media syncing, and is compatible with both the new protocol mentioned below, and older clients. A setting has been added to the preferences screen to point Anki to a local server, and a similar setting is likely to come to AnkiMobile soon. Documentation is available here: <https://docs.ankiweb.net/sync-server.html> In addition to the new server and refactoring, this PR also makes changes to the sync protocol. The existing sync protocol places payloads and metadata inside a multipart POST body, which causes a few headaches: - Legacy clients build the request in a non-deterministic order, meaning the entire request needs to be scanned to extract the metadata. - Reqwest's multipart API directly writes the multipart body, without exposing the resulting stream to us, making it harder to track the progress of the transfer. We've been relying on a patched version of reqwest for timeouts, which is a pain to keep up to date. To address these issues, the metadata is now sent in a HTTP header, with the data payload sent directly in the body. Instead of the slower gzip, we now use zstd. The old timeout handling code has been replaced with a new implementation that wraps the request and response body streams to track progress, allowing us to drop the git dependencies for reqwest, hyper-timeout and tokio-io-timeout. The main other change to the protocol is that one-way syncs no longer need to downgrade the collection to schema 11 prior to sending.
2023-01-18 03:43:46 +01:00
"authors": null,
"repository": "https://github.com/MarcusGrass/parse-range-headers",
"license": "MIT",
"license_file": null,
"description": "No-dep range header parser"
},
{
"name": "http-types",
"version": "2.12.0",
"authors": "Yoshua Wuyts <yoshuawuyts@gmail.com>",
"repository": "https://github.com/http-rs/http-types",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Common types for HTTP operations."
},
{
"name": "httparse",
2022-09-24 04:39:21 +02:00
"version": "1.8.0",
"authors": "Sean McArthur <sean@seanmonstar.com>",
"repository": "https://github.com/seanmonstar/httparse",
2020-12-15 08:10:25 +01:00
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "A tiny, safe, speedy, zero-copy HTTP/1.x parser."
},
{
"name": "httpdate",
2023-08-23 03:41:30 +02:00
"version": "1.0.3",
"authors": "Pyfisch <pyfisch@posteo.org>",
"repository": "https://github.com/pyfisch/httpdate",
2020-12-15 08:10:25 +01:00
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "HTTP date parsing and formatting"
},
{
"name": "hyper",
"version": "0.14.27",
"authors": "Sean McArthur <sean@seanmonstar.com>",
"repository": "https://github.com/hyperium/hyper",
"license": "MIT",
"license_file": null,
"description": "A fast and correct HTTP library."
},
{
"name": "hyper-rustls",
"version": "0.24.2",
Rework syncing code, and replace local sync server (#2329) This PR replaces the existing Python-driven sync server with a new one in Rust. The new server supports both collection and media syncing, and is compatible with both the new protocol mentioned below, and older clients. A setting has been added to the preferences screen to point Anki to a local server, and a similar setting is likely to come to AnkiMobile soon. Documentation is available here: <https://docs.ankiweb.net/sync-server.html> In addition to the new server and refactoring, this PR also makes changes to the sync protocol. The existing sync protocol places payloads and metadata inside a multipart POST body, which causes a few headaches: - Legacy clients build the request in a non-deterministic order, meaning the entire request needs to be scanned to extract the metadata. - Reqwest's multipart API directly writes the multipart body, without exposing the resulting stream to us, making it harder to track the progress of the transfer. We've been relying on a patched version of reqwest for timeouts, which is a pain to keep up to date. To address these issues, the metadata is now sent in a HTTP header, with the data payload sent directly in the body. Instead of the slower gzip, we now use zstd. The old timeout handling code has been replaced with a new implementation that wraps the request and response body streams to track progress, allowing us to drop the git dependencies for reqwest, hyper-timeout and tokio-io-timeout. The main other change to the protocol is that one-way syncs no longer need to downgrade the collection to schema 11 prior to sending.
2023-01-18 03:43:46 +01:00
"authors": null,
2023-08-23 03:41:30 +02:00
"repository": "https://github.com/rustls/hyper-rustls",
2020-12-15 08:10:25 +01:00
"license": "Apache-2.0 OR ISC OR MIT",
"license_file": null,
"description": "Rustls+hyper integration for pure rust HTTPS"
},
{
"name": "hyper-tls",
"version": "0.5.0",
"authors": "Sean McArthur <sean@seanmonstar.com>",
"repository": "https://github.com/hyperium/hyper-tls",
2020-12-15 08:10:25 +01:00
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Default TLS implementation for use with hyper"
},
2022-09-24 04:39:21 +02:00
{
"name": "iana-time-zone",
2023-10-25 01:28:10 +02:00
"version": "0.1.58",
"authors": "Andrew Straw <strawman@astraw.com>|René Kijewski <rene.kijewski@fu-berlin.de>|Ryan Lopopolo <rjl@hyperbo.la>",
2022-09-24 04:39:21 +02:00
"repository": "https://github.com/strawlab/iana-time-zone",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "get the IANA time zone for the current system"
},
{
"name": "iana-time-zone-haiku",
"version": "0.1.2",
"authors": "René Kijewski <crates.io@k6i.de>",
"repository": "https://github.com/strawlab/iana-time-zone",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "iana-time-zone support crate for Haiku OS"
},
V3 parent limits (#1638) * avoid repinning Rust deps by default * add id_tree dependency * Respect intermediate child limits in v3 * Test new behaviour of v3 counts * Rework v3 queue building to respect parent limits * Add missing did field to SQL query * Fix `LimitTreeMap::is_exhausted()` * Rework tree building logic https://github.com/ankitects/anki/pull/1638#discussion_r798328734 * Add timer for build_queues() * `is_exhausted()` -> `limit_reached()` * Move context and limits into `QueueBuilder` This allows for moving more logic into QueueBuilder, so less passing around of arguments. Unfortunately, some tests will require additional work to set up. * Fix stop condition in new_cards_by_position * Fix order gather order of new cards by deck * Add scheduler/queue/builder/burying.rs * Fix bad tree due to unsorted child decks * Fix comment * Fix `cap_new_to_review_rec()` * Add test for new card gathering * Always sort `child_decks()` * Fix deck removal in `cap_new_to_review_rec()` * Fix sibling ordering in new card gathering * Remove limits for deck total count with children * Add random gather order * Remove bad sibling order handling All routines ensure ascending order now. Also do some other minor refactoring. * Remove queue truncating All routines stop now as soon as the root limit is reached. * Move deck fetching into `QueueBuilder::new()` * Rework new card gather and sort options https://github.com/ankitects/anki/pull/1638#issuecomment-1032173013 * Disable new sort order choices ... depending on set gather order. * Use enum instead of numbers * Ensure valid sort order setting * Update new gather and sort order tooltips * Warn about random insertion order with v3 * Revert "Add timer for build_queues()" This reverts commit c9f5fc6ebe87953c17a0c842990b009b5596c69c. * Update rslib/src/storage/card/mod.rs (dae) * minor wording tweaks to the tooltips (dae) + move legacy strings to bottom + consistent capitalization (our leech action still needs fixing, but that will require introducing a new 'suspend card' string as the existing one is used elsewhere as well)
2022-02-10 00:55:43 +01:00
{
"name": "id_tree",
"version": "1.8.0",
"authors": "Ian Burns <iwburns8@gmail.com>",
"repository": "https://github.com/iwburns/id-tree",
"license": "MIT",
"license_file": null,
"description": "A library for creating and modifying Tree structures."
},
{
"name": "idna",
"version": "0.5.0",
"authors": "The rust-url developers",
"repository": "https://github.com/servo/rust-url/",
2020-12-15 08:10:25 +01:00
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "IDNA (Internationalizing Domain Names in Applications) and Punycode."
},
{
"name": "image",
"version": "0.24.7",
"authors": "The image-rs Developers",
"repository": "https://github.com/image-rs/image",
"license": "MIT",
"license_file": null,
"description": "Imaging library. Provides basic image processing and encoders/decoders for common image formats."
},
{
"name": "indexmap",
"version": "2.1.0",
"authors": null,
"repository": "https://github.com/bluss/indexmap",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "A hash table with consistent order and fast iteration."
},
Rework syncing code, and replace local sync server (#2329) This PR replaces the existing Python-driven sync server with a new one in Rust. The new server supports both collection and media syncing, and is compatible with both the new protocol mentioned below, and older clients. A setting has been added to the preferences screen to point Anki to a local server, and a similar setting is likely to come to AnkiMobile soon. Documentation is available here: <https://docs.ankiweb.net/sync-server.html> In addition to the new server and refactoring, this PR also makes changes to the sync protocol. The existing sync protocol places payloads and metadata inside a multipart POST body, which causes a few headaches: - Legacy clients build the request in a non-deterministic order, meaning the entire request needs to be scanned to extract the metadata. - Reqwest's multipart API directly writes the multipart body, without exposing the resulting stream to us, making it harder to track the progress of the transfer. We've been relying on a patched version of reqwest for timeouts, which is a pain to keep up to date. To address these issues, the metadata is now sent in a HTTP header, with the data payload sent directly in the body. Instead of the slower gzip, we now use zstd. The old timeout handling code has been replaced with a new implementation that wraps the request and response body streams to track progress, allowing us to drop the git dependencies for reqwest, hyper-timeout and tokio-io-timeout. The main other change to the protocol is that one-way syncs no longer need to downgrade the collection to schema 11 prior to sending.
2023-01-18 03:43:46 +01:00
{
"name": "infer",
"version": "0.2.3",
"authors": "Bojan <dbojan@gmail.com>",
"repository": "https://github.com/bojand/infer",
"license": "MIT",
"license_file": null,
"description": "Small crate to infer file types based on its magic number signature"
},
{
"name": "inflections",
"version": "1.1.1",
"authors": "Caleb Meredith <calebmeredith8@gmail.com>",
"repository": "https://docs.rs/inflections",
"license": "MIT",
"license_file": null,
"description": "High performance inflection transformation library for changing properties of words like the case."
},
{
"name": "inout",
"version": "0.1.3",
"authors": "RustCrypto Developers",
"repository": "https://github.com/RustCrypto/utils",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Custom reference types for code generic over in-place and buffer-to-buffer modes of operation."
},
{
"name": "instant",
"version": "0.1.12",
"authors": "sebcrozet <developer@crozet.re>",
"repository": "https://github.com/sebcrozet/instant",
"license": "BSD-3-Clause",
"license_file": null,
"description": "A partial replacement for std::time::Instant that works on WASM too."
},
{
"name": "intl-memoizer",
2021-02-03 11:29:48 +01:00
"version": "0.5.1",
"authors": "Zibi Braniecki <gandalf@mozilla.com>|Manish Goregaokar <manishsmail@gmail.com>",
"repository": "https://github.com/projectfluent/fluent-rs",
2020-12-15 08:10:25 +01:00
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "A memoizer specifically tailored for storing lazy-initialized intl formatters."
},
{
"name": "intl_pluralrules",
"version": "7.0.2",
"authors": "Kekoa Riggin <kekoariggin@gmail.com>|Zibi Braniecki <zbraniecki@mozilla.com>",
"repository": "https://github.com/zbraniecki/pluralrules",
2020-12-15 08:10:25 +01:00
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Unicode Plural Rules categorizer for numeric input."
},
{
"name": "ipnet",
2023-10-25 01:28:10 +02:00
"version": "2.9.0",
"authors": "Kris Price <kris@krisprice.nz>",
"repository": "https://github.com/krisprice/ipnet",
2020-12-15 08:10:25 +01:00
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Provides types and useful methods for working with IPv4 and IPv6 network addresses, commonly called IP prefixes. The new `IpNet`, `Ipv4Net`, and `Ipv6Net` types build on the existing `IpAddr`, `Ipv4Addr`, and `Ipv6Addr` types already provided in Rust's standard library and align to their design to stay consistent. The module also provides useful traits that extend `Ipv4Addr` and `Ipv6Addr` with methods for `Add`, `Sub`, `BitAnd`, and `BitOr` operations. The module only uses stable feature so it is guaranteed to compile using the stable toolchain."
},
2023-10-25 01:28:10 +02:00
{
"name": "itertools",
"version": "0.11.0",
2023-10-25 01:28:10 +02:00
"authors": "bluss",
"repository": "https://github.com/rust-itertools/itertools",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Extra iterator adaptors, iterator methods, free functions, and macros."
},
{
"name": "itertools",
"version": "0.12.0",
"authors": "bluss",
"repository": "https://github.com/rust-itertools/itertools",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Extra iterator adaptors, iterator methods, free functions, and macros."
},
{
"name": "itoa",
2023-08-23 03:41:30 +02:00
"version": "1.0.9",
2022-01-15 05:59:43 +01:00
"authors": "David Tolnay <dtolnay@gmail.com>",
"repository": "https://github.com/dtolnay/itoa",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Fast integer primitive to string conversion"
},
Backups (#1685) * Add zstd dep * Implement backend backup with zstd * Implement backup thinning * Write backup meta * Use new file ending anki21b * Asynchronously backup on collection close in Rust * Revert "Add zstd dep" This reverts commit 3fcb2141d2be15f907269d13275c41971431385c. * Add zstd again * Take backup col path from col struct * Fix formatting * Implement backup restoring on backend * Normalize restored media file names * Refactor `extract_legacy_data()` A bit cumbersome due to borrowing rules. * Refactor * Make thinning calendar-based and gradual * Consider last kept backups of previous stages * Import full apkgs and colpkgs with backend * Expose new backup settings * Test `BackupThinner` and make it deterministic * Mark backup_path when closing optional * Delete leaky timer * Add progress updates for restoring media * Write restored collection to tempfile first * Do collection compression in the background thread This has us currently storing an uncompressed and compressed copy of the collection in memory (not ideal), but means the collection can be closed without waiting for compression to complete. On a large collection, this takes a close and reopen from about 0.55s to about 0.07s. The old backup code for comparison: about 0.35s for compression off, about 8.5s for zip compression. * Use multithreading in zstd compression On my system, this reduces the compression time of a large collection from about 0.55s to 0.08s. * Stream compressed collection data into zip file * Tweak backup explanation + Fix incorrect tab order for ignore accents option * Decouple restoring backup and full import In the first case, no profile is opened, unless the new collection succeeds to load. In the second case, either the old collection is reloaded or the new one is loaded. * Fix number gap in Progress message * Don't revert backup when media fails but report it * Tweak error flow * Remove native BackupLimits enum * Fix type annotation * Add thinning test for whole year * Satisfy linter * Await async backup to finish * Move restart disclaimer out of backup tab Should be visible regardless of the current tab. * Write restored collection in chunks * Refactor * Write media in chunks and refactor * Log error if removing file fails * join_backup_task -> await_backup_completion * Refactor backup.rs * Refactor backup meta and collection extraction * Fix wrong error being returned * Call sync_all() on new collection * Add ImportError * Store logger in Backend, instead of creating one on demand init_backend() accepts a Logger rather than a log file, to allow other callers to customize the logger if they wish. In the future we may want to explore using the tracing crate as an alternative; it's a bit more ergonomic, as a logger doesn't need to be passed around, and it plays more nicely with async code. * Sync file contents prior to rename; sync folder after rename. * Limit backup creation to once per 30 min * Use zstd::stream::copy_decode * Make importing abortable * Don't revert if backup media is aborted * Set throttle implicitly * Change force flag to minimum_backup_interval * Don't attempt to open folders on Windows * Join last backup thread before starting new one Also refactor. * Disable auto sync and backup when restoring again * Force backup on full download * Include the reason why a media file import failed, and the file path - Introduce a FileIoError that contains a string representation of the underlying I/O error, and an associated path. There are a few places in the code where we're currently manually including the filename in a custom error message, and this is a step towards a more consistent approach (but we may be better served with a more general approach in the future similar to Anyhow's .context()) - Move the error message into importing.ftl, as it's a bit neater when error messages live in the same file as the rest of the messages associated with some functionality. * Fix importing of media files * Minor wording tweaks * Save an allocation I18n strings with replacements are already strings, so we can skip the extra allocation. Not that it matters here at all. * Terminate import if file missing from archive If a third-party tool is creating invalid archives, the user should know about it. This should be rare, so I did not attempt to make it translatable. * Skip multithreaded compression on small collections Co-authored-by: Damien Elmes <gpg@ankiweb.net>
2022-03-07 06:11:31 +01:00
{
"name": "jobserver",
2023-10-25 01:28:10 +02:00
"version": "0.1.27",
Backups (#1685) * Add zstd dep * Implement backend backup with zstd * Implement backup thinning * Write backup meta * Use new file ending anki21b * Asynchronously backup on collection close in Rust * Revert "Add zstd dep" This reverts commit 3fcb2141d2be15f907269d13275c41971431385c. * Add zstd again * Take backup col path from col struct * Fix formatting * Implement backup restoring on backend * Normalize restored media file names * Refactor `extract_legacy_data()` A bit cumbersome due to borrowing rules. * Refactor * Make thinning calendar-based and gradual * Consider last kept backups of previous stages * Import full apkgs and colpkgs with backend * Expose new backup settings * Test `BackupThinner` and make it deterministic * Mark backup_path when closing optional * Delete leaky timer * Add progress updates for restoring media * Write restored collection to tempfile first * Do collection compression in the background thread This has us currently storing an uncompressed and compressed copy of the collection in memory (not ideal), but means the collection can be closed without waiting for compression to complete. On a large collection, this takes a close and reopen from about 0.55s to about 0.07s. The old backup code for comparison: about 0.35s for compression off, about 8.5s for zip compression. * Use multithreading in zstd compression On my system, this reduces the compression time of a large collection from about 0.55s to 0.08s. * Stream compressed collection data into zip file * Tweak backup explanation + Fix incorrect tab order for ignore accents option * Decouple restoring backup and full import In the first case, no profile is opened, unless the new collection succeeds to load. In the second case, either the old collection is reloaded or the new one is loaded. * Fix number gap in Progress message * Don't revert backup when media fails but report it * Tweak error flow * Remove native BackupLimits enum * Fix type annotation * Add thinning test for whole year * Satisfy linter * Await async backup to finish * Move restart disclaimer out of backup tab Should be visible regardless of the current tab. * Write restored collection in chunks * Refactor * Write media in chunks and refactor * Log error if removing file fails * join_backup_task -> await_backup_completion * Refactor backup.rs * Refactor backup meta and collection extraction * Fix wrong error being returned * Call sync_all() on new collection * Add ImportError * Store logger in Backend, instead of creating one on demand init_backend() accepts a Logger rather than a log file, to allow other callers to customize the logger if they wish. In the future we may want to explore using the tracing crate as an alternative; it's a bit more ergonomic, as a logger doesn't need to be passed around, and it plays more nicely with async code. * Sync file contents prior to rename; sync folder after rename. * Limit backup creation to once per 30 min * Use zstd::stream::copy_decode * Make importing abortable * Don't revert if backup media is aborted * Set throttle implicitly * Change force flag to minimum_backup_interval * Don't attempt to open folders on Windows * Join last backup thread before starting new one Also refactor. * Disable auto sync and backup when restoring again * Force backup on full download * Include the reason why a media file import failed, and the file path - Introduce a FileIoError that contains a string representation of the underlying I/O error, and an associated path. There are a few places in the code where we're currently manually including the filename in a custom error message, and this is a step towards a more consistent approach (but we may be better served with a more general approach in the future similar to Anyhow's .context()) - Move the error message into importing.ftl, as it's a bit neater when error messages live in the same file as the rest of the messages associated with some functionality. * Fix importing of media files * Minor wording tweaks * Save an allocation I18n strings with replacements are already strings, so we can skip the extra allocation. Not that it matters here at all. * Terminate import if file missing from archive If a third-party tool is creating invalid archives, the user should know about it. This should be rare, so I did not attempt to make it translatable. * Skip multithreaded compression on small collections Co-authored-by: Damien Elmes <gpg@ankiweb.net>
2022-03-07 06:11:31 +01:00
"authors": "Alex Crichton <alex@alexcrichton.com>",
"repository": "https://github.com/alexcrichton/jobserver-rs",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "An implementation of the GNU make jobserver for Rust"
},
{
"name": "jpeg-decoder",
"version": "0.3.0",
"authors": "The image-rs Developers",
"repository": "https://github.com/image-rs/jpeg-decoder",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "JPEG decoder"
},
{
"name": "js-sys",
"version": "0.3.66",
"authors": "The wasm-bindgen Developers",
"repository": "https://github.com/rustwasm/wasm-bindgen/tree/master/crates/js-sys",
2020-12-15 08:10:25 +01:00
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Bindings for all JS global objects and functions in all JS environments like Node.js and browsers, built on `#[wasm_bindgen]` using the `wasm-bindgen` crate."
},
{
"name": "khronos-egl",
"version": "6.0.0",
"authors": "Timothée Haudebourg <author@haudebourg.net>|Sean Kerr <sean@metatomic.io>",
"repository": "https://github.com/timothee-haudebourg/khronos-egl",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Rust bindings for EGL"
},
{
"name": "khronos_api",
"version": "3.1.0",
"authors": "Brendan Zabarauskas <bjzaba@yahoo.com.au>|Corey Richardson|Arseny Kapoulkine|Pierre Krieger <pierre.krieger1708@gmail.com>",
"repository": "https://github.com/brendanzab/gl-rs/",
"license": "Apache-2.0",
"license_file": null,
"description": "The Khronos XML API Registry, exposed as byte string constants."
},
{
"name": "lazy_static",
"version": "1.4.0",
"authors": "Marvin Löbel <loebel.marvin@gmail.com>",
"repository": "https://github.com/rust-lang-nursery/lazy-static.rs",
2020-12-15 08:10:25 +01:00
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "A macro for declaring lazily evaluated statics in Rust."
},
{
"name": "lebe",
"version": "0.5.2",
"authors": "johannesvollmer <johannes596@t-online.de>",
"repository": "https://github.com/johannesvollmer/lebe",
"license": "BSD-3-Clause",
"license_file": null,
"description": "Tiny, dead simple, high performance endianness conversions with a generic API"
},
{
"name": "libc",
"version": "0.2.150",
"authors": "The Rust Project Developers",
"repository": "https://github.com/rust-lang/libc",
2020-12-15 08:10:25 +01:00
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Raw FFI bindings to platform libraries like libc."
},
{
"name": "libloading",
"version": "0.7.4",
"authors": "Simonas Kazlauskas <libloading@kazlauskas.me>",
"repository": "https://github.com/nagisa/rust_libloading/",
"license": "ISC",
"license_file": null,
"description": "Bindings around the platform's dynamic library loading primitives with greatly improved memory safety."
},
{
"name": "libloading",
"version": "0.8.1",
"authors": "Simonas Kazlauskas <libloading@kazlauskas.me>",
"repository": "https://github.com/nagisa/rust_libloading/",
"license": "ISC",
"license_file": null,
"description": "Bindings around the platform's dynamic library loading primitives with greatly improved memory safety."
},
{
"name": "libm",
2023-10-25 01:28:10 +02:00
"version": "0.2.8",
"authors": "Jorge Aparicio <jorge@japaric.io>",
"repository": "https://github.com/rust-lang/libm",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "libm in pure Rust"
},
{
"name": "libredox",
"version": "0.0.1",
"authors": "4lDO2 <4lDO2@protonmail.com>",
"repository": "https://gitlab.redox-os.org/redox-os/libredox.git",
"license": "MIT",
"license_file": null,
"description": "Redox stable ABI"
},
{
"name": "libsqlite3-sys",
"version": "0.27.0",
"authors": "The rusqlite developers",
"repository": "https://github.com/rusqlite/rusqlite",
"license": "MIT",
"license_file": null,
"description": "Native bindings to the libsqlite3 library"
},
{
"name": "linux-raw-sys",
"version": "0.4.12",
"authors": "Dan Gohman <dev@sunfishcode.online>",
"repository": "https://github.com/sunfishcode/linux-raw-sys",
"license": "Apache-2.0 OR Apache-2.0 WITH LLVM-exception OR MIT",
"license_file": null,
"description": "Generated bindings for Linux's userspace API"
},
{
"name": "lock_api",
2023-10-25 01:28:10 +02:00
"version": "0.4.11",
"authors": "Amanieu d'Antras <amanieu@gmail.com>",
"repository": "https://github.com/Amanieu/parking_lot",
2020-12-15 08:10:25 +01:00
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Wrappers to create fully-featured Mutex and RwLock types. Compatible with no_std."
},
{
"name": "log",
2023-08-23 03:41:30 +02:00
"version": "0.4.20",
"authors": "The Rust Project Developers",
"repository": "https://github.com/rust-lang/log",
2020-12-15 08:10:25 +01:00
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "A lightweight logging facade for Rust"
},
{
"name": "mac",
"version": "0.1.1",
"authors": "Jonathan Reem <jonathan.reem@gmail.com>",
"repository": "https://github.com/reem/rust-mac.git",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "A collection of great and ubiqutitous macros."
},
{
"name": "malloc_buf",
"version": "0.0.6",
"authors": "Steven Sheldon",
"repository": "https://github.com/SSheldon/malloc_buf",
"license": "MIT",
"license_file": null,
"description": "Structs for handling malloc'd memory passed to Rust."
},
{
"name": "maplit",
"version": "1.0.2",
"authors": "bluss",
"repository": "https://github.com/bluss/maplit",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Collection “literal” macros for HashMap, HashSet, BTreeMap, and BTreeSet."
},
{
"name": "markup5ever",
2022-09-24 04:39:21 +02:00
"version": "0.11.0",
"authors": "The html5ever Project Developers",
"repository": "https://github.com/servo/html5ever",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Common code for xml5ever and html5ever"
},
{
"name": "matchers",
"version": "0.1.0",
"authors": "Eliza Weisman <eliza@buoyant.io>",
"repository": "https://github.com/hawkw/matchers",
"license": "MIT",
"license_file": null,
"description": "Regex matching on character and byte streams."
},
{
"name": "matches",
"version": "0.1.10",
"authors": null,
"repository": "https://github.com/SimonSapin/rust-std-candidates",
"license": "MIT",
"license_file": null,
"description": "A macro to evaluate, as a boolean, whether an expression matches a pattern."
},
Rework syncing code, and replace local sync server (#2329) This PR replaces the existing Python-driven sync server with a new one in Rust. The new server supports both collection and media syncing, and is compatible with both the new protocol mentioned below, and older clients. A setting has been added to the preferences screen to point Anki to a local server, and a similar setting is likely to come to AnkiMobile soon. Documentation is available here: <https://docs.ankiweb.net/sync-server.html> In addition to the new server and refactoring, this PR also makes changes to the sync protocol. The existing sync protocol places payloads and metadata inside a multipart POST body, which causes a few headaches: - Legacy clients build the request in a non-deterministic order, meaning the entire request needs to be scanned to extract the metadata. - Reqwest's multipart API directly writes the multipart body, without exposing the resulting stream to us, making it harder to track the progress of the transfer. We've been relying on a patched version of reqwest for timeouts, which is a pain to keep up to date. To address these issues, the metadata is now sent in a HTTP header, with the data payload sent directly in the body. Instead of the slower gzip, we now use zstd. The old timeout handling code has been replaced with a new implementation that wraps the request and response body streams to track progress, allowing us to drop the git dependencies for reqwest, hyper-timeout and tokio-io-timeout. The main other change to the protocol is that one-way syncs no longer need to downgrade the collection to schema 11 prior to sending.
2023-01-18 03:43:46 +01:00
{
"name": "matchit",
"version": "0.7.3",
Rework syncing code, and replace local sync server (#2329) This PR replaces the existing Python-driven sync server with a new one in Rust. The new server supports both collection and media syncing, and is compatible with both the new protocol mentioned below, and older clients. A setting has been added to the preferences screen to point Anki to a local server, and a similar setting is likely to come to AnkiMobile soon. Documentation is available here: <https://docs.ankiweb.net/sync-server.html> In addition to the new server and refactoring, this PR also makes changes to the sync protocol. The existing sync protocol places payloads and metadata inside a multipart POST body, which causes a few headaches: - Legacy clients build the request in a non-deterministic order, meaning the entire request needs to be scanned to extract the metadata. - Reqwest's multipart API directly writes the multipart body, without exposing the resulting stream to us, making it harder to track the progress of the transfer. We've been relying on a patched version of reqwest for timeouts, which is a pain to keep up to date. To address these issues, the metadata is now sent in a HTTP header, with the data payload sent directly in the body. Instead of the slower gzip, we now use zstd. The old timeout handling code has been replaced with a new implementation that wraps the request and response body streams to track progress, allowing us to drop the git dependencies for reqwest, hyper-timeout and tokio-io-timeout. The main other change to the protocol is that one-way syncs no longer need to downgrade the collection to schema 11 prior to sending.
2023-01-18 03:43:46 +01:00
"authors": "Ibraheem Ahmed <ibraheem@ibraheem.ca>",
"repository": "https://github.com/ibraheemdev/matchit",
2023-08-23 03:41:30 +02:00
"license": "MIT AND BSD-3-Clause",
Rework syncing code, and replace local sync server (#2329) This PR replaces the existing Python-driven sync server with a new one in Rust. The new server supports both collection and media syncing, and is compatible with both the new protocol mentioned below, and older clients. A setting has been added to the preferences screen to point Anki to a local server, and a similar setting is likely to come to AnkiMobile soon. Documentation is available here: <https://docs.ankiweb.net/sync-server.html> In addition to the new server and refactoring, this PR also makes changes to the sync protocol. The existing sync protocol places payloads and metadata inside a multipart POST body, which causes a few headaches: - Legacy clients build the request in a non-deterministic order, meaning the entire request needs to be scanned to extract the metadata. - Reqwest's multipart API directly writes the multipart body, without exposing the resulting stream to us, making it harder to track the progress of the transfer. We've been relying on a patched version of reqwest for timeouts, which is a pain to keep up to date. To address these issues, the metadata is now sent in a HTTP header, with the data payload sent directly in the body. Instead of the slower gzip, we now use zstd. The old timeout handling code has been replaced with a new implementation that wraps the request and response body streams to track progress, allowing us to drop the git dependencies for reqwest, hyper-timeout and tokio-io-timeout. The main other change to the protocol is that one-way syncs no longer need to downgrade the collection to schema 11 prior to sending.
2023-01-18 03:43:46 +01:00
"license_file": null,
"description": "A high performance, zero-copy URL router."
Rework syncing code, and replace local sync server (#2329) This PR replaces the existing Python-driven sync server with a new one in Rust. The new server supports both collection and media syncing, and is compatible with both the new protocol mentioned below, and older clients. A setting has been added to the preferences screen to point Anki to a local server, and a similar setting is likely to come to AnkiMobile soon. Documentation is available here: <https://docs.ankiweb.net/sync-server.html> In addition to the new server and refactoring, this PR also makes changes to the sync protocol. The existing sync protocol places payloads and metadata inside a multipart POST body, which causes a few headaches: - Legacy clients build the request in a non-deterministic order, meaning the entire request needs to be scanned to extract the metadata. - Reqwest's multipart API directly writes the multipart body, without exposing the resulting stream to us, making it harder to track the progress of the transfer. We've been relying on a patched version of reqwest for timeouts, which is a pain to keep up to date. To address these issues, the metadata is now sent in a HTTP header, with the data payload sent directly in the body. Instead of the slower gzip, we now use zstd. The old timeout handling code has been replaced with a new implementation that wraps the request and response body streams to track progress, allowing us to drop the git dependencies for reqwest, hyper-timeout and tokio-io-timeout. The main other change to the protocol is that one-way syncs no longer need to downgrade the collection to schema 11 prior to sending.
2023-01-18 03:43:46 +01:00
},
{
"name": "matrixmultiply",
"version": "0.3.8",
"authors": "bluss|R. Janis Goldschmidt",
"repository": "https://github.com/bluss/matrixmultiply/",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "General matrix multiplication for f32 and f64 matrices. Operates on matrices with general layout (they can use arbitrary row and column stride). Detects and uses AVX or SSE2 on x86 platforms transparently for higher performance. Uses a microkernel strategy, so that the implementation is easy to parallelize and optimize. Supports multithreading."
},
{
"name": "memchr",
2023-10-25 01:28:10 +02:00
"version": "2.6.4",
"authors": "Andrew Gallant <jamslam@gmail.com>|bluss",
2021-10-02 12:42:03 +02:00
"repository": "https://github.com/BurntSushi/memchr",
2020-12-15 08:10:25 +01:00
"license": "MIT OR Unlicense",
"license_file": null,
2023-10-25 01:28:10 +02:00
"description": "Provides extremely fast (uses SIMD on x86_64, aarch64 and wasm32) routines for 1, 2 or 3 byte search and single substring search."
},
{
"name": "memmap2",
"version": "0.7.1",
"authors": "Dan Burkert <dan@danburkert.com>|Yevhenii Reizner <razrfalcon@gmail.com>",
"repository": "https://github.com/RazrFalcon/memmap2-rs",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Cross-platform Rust API for memory-mapped file IO"
},
{
"name": "memoffset",
"version": "0.9.0",
"authors": "Gilad Naaman <gilad.naaman@gmail.com>",
"repository": "https://github.com/Gilnaa/memoffset",
"license": "MIT",
"license_file": null,
"description": "offset_of functionality for Rust structs."
},
{
"name": "metal",
"version": "0.27.0",
"authors": "gfx-rs developers",
"repository": "https://github.com/gfx-rs/metal-rs",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Rust bindings for Metal"
},
{
"name": "mime",
"version": "0.3.17",
"authors": "Sean McArthur <sean@seanmonstar.com>",
"repository": "https://github.com/hyperium/mime",
2020-12-15 08:10:25 +01:00
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Strongly Typed Mimes"
},
{
"name": "mime_guess",
"version": "2.0.4",
"authors": "Austin Bonander <austin.bonander@gmail.com>",
"repository": "https://github.com/abonander/mime_guess",
"license": "MIT",
"license_file": null,
"description": "A simple crate for detection of a file's MIME type by its extension."
},
2021-10-02 12:42:03 +02:00
{
"name": "minimal-lexical",
2021-11-18 11:54:00 +01:00
"version": "0.2.1",
2021-10-02 12:42:03 +02:00
"authors": "Alex Huszagh <ahuszagh@gmail.com>",
"repository": "https://github.com/Alexhuszagh/minimal-lexical",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Fast float parsing conversion routines."
},
{
"name": "miniz_oxide",
"version": "0.7.1",
"authors": "Frommi <daniil.liferenko@gmail.com>|oyvindln <oyvindln@users.noreply.github.com>",
"repository": "https://github.com/Frommi/miniz_oxide/tree/master/miniz_oxide",
"license": "Apache-2.0 OR MIT OR Zlib",
"license_file": null,
"description": "DEFLATE compression and decompression library rewritten in Rust based on miniz"
},
{
"name": "mio",
2023-10-25 01:28:10 +02:00
"version": "0.8.9",
"authors": "Carl Lerche <me@carllerche.com>|Thomas de Zeeuw <thomasdezeeuw@gmail.com>|Tokio Contributors <team@tokio.rs>",
"repository": "https://github.com/tokio-rs/mio",
"license": "MIT",
"license_file": null,
"description": "Lightweight non-blocking I/O."
},
Rework syncing code, and replace local sync server (#2329) This PR replaces the existing Python-driven sync server with a new one in Rust. The new server supports both collection and media syncing, and is compatible with both the new protocol mentioned below, and older clients. A setting has been added to the preferences screen to point Anki to a local server, and a similar setting is likely to come to AnkiMobile soon. Documentation is available here: <https://docs.ankiweb.net/sync-server.html> In addition to the new server and refactoring, this PR also makes changes to the sync protocol. The existing sync protocol places payloads and metadata inside a multipart POST body, which causes a few headaches: - Legacy clients build the request in a non-deterministic order, meaning the entire request needs to be scanned to extract the metadata. - Reqwest's multipart API directly writes the multipart body, without exposing the resulting stream to us, making it harder to track the progress of the transfer. We've been relying on a patched version of reqwest for timeouts, which is a pain to keep up to date. To address these issues, the metadata is now sent in a HTTP header, with the data payload sent directly in the body. Instead of the slower gzip, we now use zstd. The old timeout handling code has been replaced with a new implementation that wraps the request and response body streams to track progress, allowing us to drop the git dependencies for reqwest, hyper-timeout and tokio-io-timeout. The main other change to the protocol is that one-way syncs no longer need to downgrade the collection to schema 11 prior to sending.
2023-01-18 03:43:46 +01:00
{
"name": "multer",
"version": "2.1.0",
Rework syncing code, and replace local sync server (#2329) This PR replaces the existing Python-driven sync server with a new one in Rust. The new server supports both collection and media syncing, and is compatible with both the new protocol mentioned below, and older clients. A setting has been added to the preferences screen to point Anki to a local server, and a similar setting is likely to come to AnkiMobile soon. Documentation is available here: <https://docs.ankiweb.net/sync-server.html> In addition to the new server and refactoring, this PR also makes changes to the sync protocol. The existing sync protocol places payloads and metadata inside a multipart POST body, which causes a few headaches: - Legacy clients build the request in a non-deterministic order, meaning the entire request needs to be scanned to extract the metadata. - Reqwest's multipart API directly writes the multipart body, without exposing the resulting stream to us, making it harder to track the progress of the transfer. We've been relying on a patched version of reqwest for timeouts, which is a pain to keep up to date. To address these issues, the metadata is now sent in a HTTP header, with the data payload sent directly in the body. Instead of the slower gzip, we now use zstd. The old timeout handling code has been replaced with a new implementation that wraps the request and response body streams to track progress, allowing us to drop the git dependencies for reqwest, hyper-timeout and tokio-io-timeout. The main other change to the protocol is that one-way syncs no longer need to downgrade the collection to schema 11 prior to sending.
2023-01-18 03:43:46 +01:00
"authors": "Rousan Ali <hello@rousan.io>",
"repository": "https://github.com/rousan/multer-rs",
"license": "MIT",
"license_file": null,
"description": "An async parser for `multipart/form-data` content-type in Rust."
},
{
"name": "multimap",
2021-03-27 05:47:16 +01:00
"version": "0.8.3",
"authors": "Håvar Nøvik <havar.novik@gmail.com>",
"repository": "https://github.com/havarnov/multimap",
2020-12-15 08:10:25 +01:00
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "A multimap implementation."
},
{
"name": "naga",
"version": "0.14.1",
"authors": "Naga Developers",
"repository": "https://github.com/gfx-rs/naga",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Shader translation infrastructure"
},
{
"name": "nanorand",
"version": "0.7.0",
"authors": "Lucy <lucy@absolucy.moe>",
"repository": "https://github.com/Absolucy/nanorand-rs",
"license": "Zlib",
"license_file": null,
"description": "A tiny, fast, zero-dep library for random number generation."
},
{
"name": "native-tls",
"version": "0.2.11",
"authors": "Steven Fackler <sfackler@gmail.com>",
"repository": "https://github.com/sfackler/rust-native-tls",
2020-12-15 08:10:25 +01:00
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "A wrapper over a platform's native TLS implementation"
},
{
"name": "ndarray",
"version": "0.15.6",
"authors": "Ulrik Sverdrup \"bluss\"|Jim Turner",
"repository": "https://github.com/rust-ndarray/ndarray",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "An n-dimensional array for general elements and for numerics. Lightweight array views and slicing; views support chunking and splitting."
},
{
"name": "ndarray-rand",
"version": "0.14.0",
"authors": "bluss",
"repository": "https://github.com/rust-ndarray/ndarray",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Constructors for randomized arrays. `rand` integration for `ndarray`."
},
{
"name": "new_debug_unreachable",
"version": "1.0.4",
"authors": "Matt Brubeck <mbrubeck@limpet.net>|Jonathan Reem <jonathan.reem@gmail.com>",
"repository": "https://github.com/mbrubeck/rust-debug-unreachable",
"license": "MIT",
"license_file": null,
"description": "panic in debug, intrinsics::unreachable() in release (fork of debug_unreachable)"
},
2021-06-25 07:35:25 +02:00
{
"name": "nom",
"version": "7.1.3",
2021-06-25 07:35:25 +02:00
"authors": "contact@geoffroycouprie.com",
"repository": "https://github.com/Geal/nom",
"license": "MIT",
"license_file": null,
"description": "A byte-oriented, zero-copy, parser combinators library"
},
Rework syncing code, and replace local sync server (#2329) This PR replaces the existing Python-driven sync server with a new one in Rust. The new server supports both collection and media syncing, and is compatible with both the new protocol mentioned below, and older clients. A setting has been added to the preferences screen to point Anki to a local server, and a similar setting is likely to come to AnkiMobile soon. Documentation is available here: <https://docs.ankiweb.net/sync-server.html> In addition to the new server and refactoring, this PR also makes changes to the sync protocol. The existing sync protocol places payloads and metadata inside a multipart POST body, which causes a few headaches: - Legacy clients build the request in a non-deterministic order, meaning the entire request needs to be scanned to extract the metadata. - Reqwest's multipart API directly writes the multipart body, without exposing the resulting stream to us, making it harder to track the progress of the transfer. We've been relying on a patched version of reqwest for timeouts, which is a pain to keep up to date. To address these issues, the metadata is now sent in a HTTP header, with the data payload sent directly in the body. Instead of the slower gzip, we now use zstd. The old timeout handling code has been replaced with a new implementation that wraps the request and response body streams to track progress, allowing us to drop the git dependencies for reqwest, hyper-timeout and tokio-io-timeout. The main other change to the protocol is that one-way syncs no longer need to downgrade the collection to schema 11 prior to sending.
2023-01-18 03:43:46 +01:00
{
"name": "nonempty",
"version": "0.7.0",
"authors": "Alexis Sellier <self@cloudhead.io>",
"repository": "https://github.com/cloudhead/nonempty",
"license": "MIT",
"license_file": null,
"description": "Correct by construction non-empty vector"
},
{
"name": "nu-ansi-term",
"version": "0.46.0",
"authors": "ogham@bsago.me|Ryan Scheel (Havvy) <ryan.havvy@gmail.com>|Josh Triplett <josh@joshtriplett.org>|The Nushell Project Developers",
"repository": "https://github.com/nushell/nu-ansi-term",
"license": "MIT",
"license_file": null,
"description": "Library for ANSI terminal colors and styles (bold, underline)"
},
{
"name": "num-complex",
"version": "0.4.4",
"authors": "The Rust Project Developers",
"repository": "https://github.com/rust-num/num-complex",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Complex numbers implementation for Rust"
},
{
"name": "num-format",
"version": "0.4.4",
"authors": "Brian Myers <brian.carl.myers@gmail.com>",
"repository": "https://github.com/bcmyers/num-format",
2020-12-15 08:10:25 +01:00
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "A Rust crate for producing string-representations of numbers, formatted according to international standards"
},
{
"name": "num-integer",
"version": "0.1.45",
"authors": "The Rust Project Developers",
"repository": "https://github.com/rust-num/num-integer",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Integer traits and functions"
},
{
"name": "num-rational",
"version": "0.4.1",
"authors": "The Rust Project Developers",
"repository": "https://github.com/rust-num/num-rational",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Rational numbers implementation for Rust"
},
{
"name": "num-traits",
2023-10-25 01:28:10 +02:00
"version": "0.2.17",
"authors": "The Rust Project Developers",
"repository": "https://github.com/rust-num/num-traits",
2020-12-15 08:10:25 +01:00
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Numeric traits for generic mathematics"
},
{
"name": "num_cpus",
"version": "1.16.0",
"authors": "Sean McArthur <sean@seanmonstar.com>",
"repository": "https://github.com/seanmonstar/num_cpus",
2020-12-15 08:10:25 +01:00
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Get the number of CPUs on a machine."
},
{
"name": "num_enum",
"version": "0.7.1",
"authors": "Daniel Wagner-Hall <dawagner@gmail.com>|Daniel Henry-Mantilla <daniel.henry.mantilla@gmail.com>|Vincent Esche <regexident@gmail.com>",
"repository": "https://github.com/illicitonion/num_enum",
2022-01-15 05:59:43 +01:00
"license": "Apache-2.0 OR BSD-3-Clause OR MIT",
"license_file": null,
"description": "Procedural macros to make inter-operation between primitives and enums easier."
},
{
"name": "num_enum_derive",
"version": "0.7.1",
"authors": "Daniel Wagner-Hall <dawagner@gmail.com>|Daniel Henry-Mantilla <daniel.henry.mantilla@gmail.com>|Vincent Esche <regexident@gmail.com>",
"repository": "https://github.com/illicitonion/num_enum",
2022-01-15 05:59:43 +01:00
"license": "Apache-2.0 OR BSD-3-Clause OR MIT",
"license_file": null,
"description": "Internal implementation details for ::num_enum (Procedural macros to make inter-operation between primitives and enums easier)"
},
{
"name": "objc",
"version": "0.2.7",
"authors": "Steven Sheldon",
"repository": "http://github.com/SSheldon/rust-objc",
"license": "MIT",
"license_file": null,
"description": "Objective-C Runtime bindings and wrapper for Rust."
},
{
"name": "objc_exception",
"version": "0.1.2",
"authors": "Steven Sheldon",
"repository": "http://github.com/SSheldon/rust-objc-exception",
"license": "MIT",
"license_file": null,
"description": "Rust interface for Objective-C's throw and try/catch statements."
},
{
"name": "object",
"version": "0.32.1",
"authors": null,
"repository": "https://github.com/gimli-rs/object",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "A unified interface for reading and writing object file formats."
},
{
"name": "once_cell",
"version": "1.18.0",
"authors": "Aleksey Kladov <aleksey.kladov@gmail.com>",
"repository": "https://github.com/matklad/once_cell",
2020-12-15 08:10:25 +01:00
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Single assignment cells and lazy values."
},
{
"name": "openssl",
"version": "0.10.61",
"authors": "Steven Fackler <sfackler@gmail.com>",
"repository": "https://github.com/sfackler/rust-openssl",
"license": "Apache-2.0",
"license_file": null,
"description": "OpenSSL bindings"
},
2022-09-24 04:39:21 +02:00
{
"name": "openssl-macros",
"version": "0.1.1",
2022-09-24 04:39:21 +02:00
"authors": null,
"repository": null,
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Internal macros used by the openssl crate."
},
{
"name": "openssl-probe",
2022-01-15 05:59:43 +01:00
"version": "0.1.5",
"authors": "Alex Crichton <alex@alexcrichton.com>",
"repository": "https://github.com/alexcrichton/openssl-probe",
2020-12-15 08:10:25 +01:00
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Tool for helping to find SSL certificate locations on the system for OpenSSL"
},
{
"name": "openssl-sys",
"version": "0.9.97",
"authors": "Alex Crichton <alex@alexcrichton.com>|Steven Fackler <sfackler@gmail.com>",
"repository": "https://github.com/sfackler/rust-openssl",
"license": "MIT",
"license_file": null,
"description": "FFI bindings to OpenSSL"
},
{
"name": "option-ext",
"version": "0.2.0",
"authors": "Simon Ochsenreither <simon@ochsenreither.de>",
"repository": "https://github.com/soc/option-ext.git",
"license": "MPL-2.0",
"license_file": null,
"description": "Extends `Option` with additional operations"
},
{
"name": "overload",
"version": "0.1.1",
"authors": "Daniel Salvadori <danaugrs@gmail.com>",
"repository": "https://github.com/danaugrs/overload",
"license": "MIT",
"license_file": null,
"description": "Provides a macro to simplify operator overloading."
},
Rework syncing code, and replace local sync server (#2329) This PR replaces the existing Python-driven sync server with a new one in Rust. The new server supports both collection and media syncing, and is compatible with both the new protocol mentioned below, and older clients. A setting has been added to the preferences screen to point Anki to a local server, and a similar setting is likely to come to AnkiMobile soon. Documentation is available here: <https://docs.ankiweb.net/sync-server.html> In addition to the new server and refactoring, this PR also makes changes to the sync protocol. The existing sync protocol places payloads and metadata inside a multipart POST body, which causes a few headaches: - Legacy clients build the request in a non-deterministic order, meaning the entire request needs to be scanned to extract the metadata. - Reqwest's multipart API directly writes the multipart body, without exposing the resulting stream to us, making it harder to track the progress of the transfer. We've been relying on a patched version of reqwest for timeouts, which is a pain to keep up to date. To address these issues, the metadata is now sent in a HTTP header, with the data payload sent directly in the body. Instead of the slower gzip, we now use zstd. The old timeout handling code has been replaced with a new implementation that wraps the request and response body streams to track progress, allowing us to drop the git dependencies for reqwest, hyper-timeout and tokio-io-timeout. The main other change to the protocol is that one-way syncs no longer need to downgrade the collection to schema 11 prior to sending.
2023-01-18 03:43:46 +01:00
{
"name": "parking",
2023-10-25 01:28:10 +02:00
"version": "2.2.0",
Rework syncing code, and replace local sync server (#2329) This PR replaces the existing Python-driven sync server with a new one in Rust. The new server supports both collection and media syncing, and is compatible with both the new protocol mentioned below, and older clients. A setting has been added to the preferences screen to point Anki to a local server, and a similar setting is likely to come to AnkiMobile soon. Documentation is available here: <https://docs.ankiweb.net/sync-server.html> In addition to the new server and refactoring, this PR also makes changes to the sync protocol. The existing sync protocol places payloads and metadata inside a multipart POST body, which causes a few headaches: - Legacy clients build the request in a non-deterministic order, meaning the entire request needs to be scanned to extract the metadata. - Reqwest's multipart API directly writes the multipart body, without exposing the resulting stream to us, making it harder to track the progress of the transfer. We've been relying on a patched version of reqwest for timeouts, which is a pain to keep up to date. To address these issues, the metadata is now sent in a HTTP header, with the data payload sent directly in the body. Instead of the slower gzip, we now use zstd. The old timeout handling code has been replaced with a new implementation that wraps the request and response body streams to track progress, allowing us to drop the git dependencies for reqwest, hyper-timeout and tokio-io-timeout. The main other change to the protocol is that one-way syncs no longer need to downgrade the collection to schema 11 prior to sending.
2023-01-18 03:43:46 +01:00
"authors": "Stjepan Glavina <stjepang@gmail.com>|The Rust Project Developers",
"repository": "https://github.com/smol-rs/parking",
Rework syncing code, and replace local sync server (#2329) This PR replaces the existing Python-driven sync server with a new one in Rust. The new server supports both collection and media syncing, and is compatible with both the new protocol mentioned below, and older clients. A setting has been added to the preferences screen to point Anki to a local server, and a similar setting is likely to come to AnkiMobile soon. Documentation is available here: <https://docs.ankiweb.net/sync-server.html> In addition to the new server and refactoring, this PR also makes changes to the sync protocol. The existing sync protocol places payloads and metadata inside a multipart POST body, which causes a few headaches: - Legacy clients build the request in a non-deterministic order, meaning the entire request needs to be scanned to extract the metadata. - Reqwest's multipart API directly writes the multipart body, without exposing the resulting stream to us, making it harder to track the progress of the transfer. We've been relying on a patched version of reqwest for timeouts, which is a pain to keep up to date. To address these issues, the metadata is now sent in a HTTP header, with the data payload sent directly in the body. Instead of the slower gzip, we now use zstd. The old timeout handling code has been replaced with a new implementation that wraps the request and response body streams to track progress, allowing us to drop the git dependencies for reqwest, hyper-timeout and tokio-io-timeout. The main other change to the protocol is that one-way syncs no longer need to downgrade the collection to schema 11 prior to sending.
2023-01-18 03:43:46 +01:00
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Thread parking and unparking"
},
{
"name": "parking_lot",
2022-09-24 04:39:21 +02:00
"version": "0.12.1",
"authors": "Amanieu d'Antras <amanieu@gmail.com>",
"repository": "https://github.com/Amanieu/parking_lot",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "More compact and efficient implementations of the standard synchronization primitives."
},
{
"name": "parking_lot_core",
2023-10-25 01:28:10 +02:00
"version": "0.9.9",
"authors": "Amanieu d'Antras <amanieu@gmail.com>",
"repository": "https://github.com/Amanieu/parking_lot",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "An advanced API for creating custom synchronization primitives."
},
{
"name": "password-hash",
"version": "0.4.2",
"authors": "RustCrypto Developers",
"repository": "https://github.com/RustCrypto/traits/tree/master/password-hash",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Traits which describe the functionality of password hashing algorithms, as well as a `no_std`-friendly implementation of the PHC string format (a well-defined subset of the Modular Crypt Format a.k.a. MCF)"
},
{
"name": "paste",
"version": "1.0.14",
"authors": "David Tolnay <dtolnay@gmail.com>",
"repository": "https://github.com/dtolnay/paste",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Macros for all your token pasting needs"
},
{
"name": "pbkdf2",
"version": "0.11.0",
"authors": "RustCrypto Developers",
"repository": "https://github.com/RustCrypto/password-hashes/tree/master/pbkdf2",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Generic implementation of PBKDF2"
},
{
"name": "percent-encoding",
"version": "2.3.1",
"authors": "The rust-url developers",
"repository": "https://github.com/servo/rust-url/",
2020-12-15 08:10:25 +01:00
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Percent encoding and decoding"
},
{
2023-05-29 09:54:00 +02:00
"name": "percent-encoding-iri",
"version": "2.2.0",
"authors": "The rust-url developers",
"repository": "https://github.com/servo/rust-url/",
"license": "Apache-2.0 OR MIT",
"license_file": null,
2023-05-29 09:54:00 +02:00
"description": "Percent encoding and decoding, preserving non-Latin characters."
},
{
"name": "petgraph",
2023-08-23 03:41:30 +02:00
"version": "0.6.4",
"authors": "bluss|mitchmindtree",
"repository": "https://github.com/petgraph/petgraph",
2020-12-15 08:10:25 +01:00
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Graph data structure library. Provides graph types and graph algorithms."
},
{
"name": "phf",
2022-09-24 04:39:21 +02:00
"version": "0.10.1",
"authors": "Steven Fackler <sfackler@gmail.com>",
"repository": "https://github.com/sfackler/rust-phf",
"license": "MIT",
"license_file": null,
"description": "Runtime support for perfect hash function data structures"
},
2021-06-25 07:35:25 +02:00
{
"name": "phf",
"version": "0.11.2",
2021-06-25 07:35:25 +02:00
"authors": "Steven Fackler <sfackler@gmail.com>",
2022-09-24 04:39:21 +02:00
"repository": "https://github.com/rust-phf/rust-phf",
2021-06-25 07:35:25 +02:00
"license": "MIT",
"license_file": null,
"description": "Runtime support for perfect hash function data structures"
},
{
"name": "phf_codegen",
2022-09-24 04:39:21 +02:00
"version": "0.10.0",
"authors": "Steven Fackler <sfackler@gmail.com>",
"repository": "https://github.com/sfackler/rust-phf",
"license": "MIT",
"license_file": null,
"description": "Codegen library for PHF types"
},
{
"name": "phf_generator",
2022-09-24 04:39:21 +02:00
"version": "0.10.0",
"authors": "Steven Fackler <sfackler@gmail.com>",
"repository": "https://github.com/sfackler/rust-phf",
"license": "MIT",
"license_file": null,
"description": "PHF generation logic"
},
2021-06-25 07:35:25 +02:00
{
"name": "phf_generator",
"version": "0.11.2",
2021-06-25 07:35:25 +02:00
"authors": "Steven Fackler <sfackler@gmail.com>",
2022-09-24 04:39:21 +02:00
"repository": "https://github.com/rust-phf/rust-phf",
2021-06-25 07:35:25 +02:00
"license": "MIT",
"license_file": null,
"description": "PHF generation logic"
},
2021-07-23 11:39:40 +02:00
{
"name": "phf_macros",
"version": "0.11.2",
2021-07-23 11:39:40 +02:00
"authors": "Steven Fackler <sfackler@gmail.com>",
2022-09-24 04:39:21 +02:00
"repository": "https://github.com/rust-phf/rust-phf",
"license": "MIT",
"license_file": null,
"description": "Macros to generate types in the phf crate"
},
{
"name": "phf_shared",
2022-09-24 04:39:21 +02:00
"version": "0.10.0",
"authors": "Steven Fackler <sfackler@gmail.com>",
"repository": "https://github.com/sfackler/rust-phf",
"license": "MIT",
"license_file": null,
"description": "Support code shared by PHF libraries"
},
2021-06-25 07:35:25 +02:00
{
"name": "phf_shared",
"version": "0.11.2",
2021-06-25 07:35:25 +02:00
"authors": "Steven Fackler <sfackler@gmail.com>",
2022-09-24 04:39:21 +02:00
"repository": "https://github.com/rust-phf/rust-phf",
2021-06-25 07:35:25 +02:00
"license": "MIT",
"license_file": null,
"description": "Support code shared by PHF libraries"
},
{
"name": "pin-project",
2023-08-23 03:41:30 +02:00
"version": "1.1.3",
2022-01-15 05:59:43 +01:00
"authors": null,
"repository": "https://github.com/taiki-e/pin-project",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "A crate for safe and ergonomic pin-projection."
},
{
"name": "pin-project-internal",
2023-08-23 03:41:30 +02:00
"version": "1.1.3",
2022-01-15 05:59:43 +01:00
"authors": null,
"repository": "https://github.com/taiki-e/pin-project",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Implementation detail of the `pin-project` crate."
},
2020-11-24 07:57:37 +01:00
{
"name": "pin-project-lite",
"version": "0.2.13",
2022-01-15 05:59:43 +01:00
"authors": null,
2020-11-24 07:57:37 +01:00
"repository": "https://github.com/taiki-e/pin-project-lite",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "A lightweight version of pin-project written with declarative macros."
},
{
"name": "pin-utils",
"version": "0.1.0",
"authors": "Josef Brandl <mail@josefbrandl.de>",
"repository": "https://github.com/rust-lang-nursery/pin-utils",
2020-12-15 08:10:25 +01:00
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Utilities for pinning"
},
{
"name": "pkg-config",
"version": "0.3.27",
"authors": "Alex Crichton <alex@alexcrichton.com>",
"repository": "https://github.com/rust-lang/pkg-config-rs",
2020-12-15 08:10:25 +01:00
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "A library to run the pkg-config system tool at build time in order to be used in Cargo build scripts."
},
{
"name": "png",
"version": "0.17.10",
"authors": "The image-rs Developers",
"repository": "https://github.com/image-rs/image-png.git",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "PNG decoding and encoding library in pure Rust"
},
{
"name": "pollster",
"version": "0.3.0",
"authors": "Joshua Barretto <joshua.s.barretto@gmail.com>",
"repository": "https://github.com/zesterer/pollster",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Synchronously block the thread until a future completes"
},
2023-10-25 01:28:10 +02:00
{
"name": "powerfmt",
"version": "0.2.0",
"authors": "Jacob Pratt <jacob@jhpratt.dev>",
"repository": "https://github.com/jhpratt/powerfmt",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "`powerfmt` is a library that provides utilities for formatting values. This crate makes it significantly easier to support filling to a minimum width with alignment, avoid heap allocation, and avoid repetitive calculations."
},
{
"name": "ppv-lite86",
"version": "0.2.17",
"authors": "The CryptoCorrosion Contributors",
"repository": "https://github.com/cryptocorrosion/cryptocorrosion",
2020-12-15 08:10:25 +01:00
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Implementation of the crypto-simd API for x86"
},
{
"name": "precomputed-hash",
"version": "0.1.1",
"authors": "Emilio Cobos Álvarez <emilio@crisal.io>",
"repository": "https://github.com/emilio/precomputed-hash",
"license": "MIT",
"license_file": null,
"description": "A library intending to be a base dependency to expose a precomputed hash"
},
{
"name": "presser",
"version": "0.3.1",
"authors": "Embark <opensource@embark-studios.com>|Gray Olson <gray@grayolson.com",
"repository": "https://github.com/EmbarkStudios/presser",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "A crate to help you copy things into raw buffers without invoking spooky action at a distance (undefined behavior)."
},
Refactor service generation (#2552) * Automatically elide empty inputs and outputs to backend methods * Refactor service generation Despite the fact that the majority of our Protobuf service methods require an open collection, they were not accessible with just a Collection object. To access the methods (e.g. because we haven't gotten around to exposing the correct API in Collection yet), you had to wrap the collection in a Backend object, and pay a mutex-acquisition cost for each call, even if you have exclusive access to the object. This commit migrates the majority of service methods to the Collection, so they can now be used directly, and improves the ergonomics a bit at the same time. The approach taken: - The service generation now happens in rslib instead of anki_proto, which avoids the need for trait constraints and associated types. - Service methods are assumed to be collection-based by default. Instead of implementing the service on Backend, we now implement it on Collection, which means our methods no longer need to use self.with_col(...). - We automatically generate methods in Backend which use self.with_col() to delegate to the Collection method. - For methods that are only appropriate for the backend, we add a flag in the .proto file. The codegen uses this flag to write the method into a BackendFooService instead of FooService, which the backend implements. - The flag can also allows us to define separate implementations for collection and backend, so we can e.g. skip the collection mutex in the i18n service while also providing the service on a collection.
2023-06-19 07:33:40 +02:00
{
"name": "prettyplease",
"version": "0.2.15",
Refactor service generation (#2552) * Automatically elide empty inputs and outputs to backend methods * Refactor service generation Despite the fact that the majority of our Protobuf service methods require an open collection, they were not accessible with just a Collection object. To access the methods (e.g. because we haven't gotten around to exposing the correct API in Collection yet), you had to wrap the collection in a Backend object, and pay a mutex-acquisition cost for each call, even if you have exclusive access to the object. This commit migrates the majority of service methods to the Collection, so they can now be used directly, and improves the ergonomics a bit at the same time. The approach taken: - The service generation now happens in rslib instead of anki_proto, which avoids the need for trait constraints and associated types. - Service methods are assumed to be collection-based by default. Instead of implementing the service on Backend, we now implement it on Collection, which means our methods no longer need to use self.with_col(...). - We automatically generate methods in Backend which use self.with_col() to delegate to the Collection method. - For methods that are only appropriate for the backend, we add a flag in the .proto file. The codegen uses this flag to write the method into a BackendFooService instead of FooService, which the backend implements. - The flag can also allows us to define separate implementations for collection and backend, so we can e.g. skip the collection mutex in the i18n service while also providing the service on a collection.
2023-06-19 07:33:40 +02:00
"authors": "David Tolnay <dtolnay@gmail.com>",
"repository": "https://github.com/dtolnay/prettyplease",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "A minimal `syn` syntax tree pretty-printer"
},
{
"name": "proc-macro-crate",
"version": "2.0.0",
"authors": "Bastian Köcher <git@kchr.de>",
"repository": "https://github.com/bkchr/proc-macro-crate",
2020-12-15 08:10:25 +01:00
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Replacement for crate (macro_rules keyword) in proc-macros"
},
{
"name": "proc-macro2",
"version": "1.0.70",
2021-11-18 11:54:00 +01:00
"authors": "David Tolnay <dtolnay@gmail.com>|Alex Crichton <alex@alexcrichton.com>",
"repository": "https://github.com/dtolnay/proc-macro2",
2020-12-15 08:10:25 +01:00
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "A substitute implementation of the compiler's `proc_macro` API to decouple token-based libraries from the procedural macro use case."
},
{
"name": "profiling",
"version": "1.0.11",
"authors": "Philip Degarmo <aclysma@gmail.com>",
"repository": "https://github.com/aclysma/profiling",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "This crate provides a very thin abstraction over other profiler crates."
},
{
"name": "prost",
"version": "0.12.3",
2022-09-24 04:39:21 +02:00
"authors": "Dan Burkert <dan@danburkert.com>|Lucio Franco <luciofranco14@gmail.com|Tokio Contributors <team@tokio.rs>",
2021-10-02 12:42:03 +02:00
"repository": "https://github.com/tokio-rs/prost",
"license": "Apache-2.0",
"license_file": null,
"description": "A Protocol Buffers implementation for the Rust Language."
},
{
"name": "prost-build",
"version": "0.12.3",
2022-09-24 04:39:21 +02:00
"authors": "Dan Burkert <dan@danburkert.com>|Lucio Franco <luciofranco14@gmail.com>|Tokio Contributors <team@tokio.rs>",
2021-10-02 12:42:03 +02:00
"repository": "https://github.com/tokio-rs/prost",
"license": "Apache-2.0",
"license_file": null,
"description": "A Protocol Buffers implementation for the Rust Language."
},
{
"name": "prost-derive",
"version": "0.12.3",
2022-09-24 04:39:21 +02:00
"authors": "Dan Burkert <dan@danburkert.com>|Lucio Franco <luciofranco14@gmail.com>|Tokio Contributors <team@tokio.rs>",
2021-10-02 12:42:03 +02:00
"repository": "https://github.com/tokio-rs/prost",
"license": "Apache-2.0",
"license_file": null,
"description": "A Protocol Buffers implementation for the Rust Language."
},
{
"name": "prost-reflect",
2023-09-28 01:55:52 +02:00
"version": "0.12.0",
"authors": "Andrew Hickman <andrew.hickman1@sky.com>",
"repository": "https://github.com/andrewhickman/prost-reflect",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "A protobuf library extending prost with reflection support and dynamic messages."
},
{
"name": "prost-types",
"version": "0.12.3",
2022-09-24 04:39:21 +02:00
"authors": "Dan Burkert <dan@danburkert.com>|Lucio Franco <luciofranco14@gmail.com|Tokio Contributors <team@tokio.rs>",
2021-10-02 12:42:03 +02:00
"repository": "https://github.com/tokio-rs/prost",
"license": "Apache-2.0",
"license_file": null,
"description": "A Protocol Buffers implementation for the Rust Language."
},
{
"name": "pulldown-cmark",
"version": "0.9.3",
"authors": "Raph Levien <raph.levien@gmail.com>|Marcus Klaas de Vries <mail@marcusklaas.nl>",
"repository": "https://github.com/raphlinus/pulldown-cmark",
"license": "MIT",
"license_file": null,
"description": "A pull parser for CommonMark"
},
{
"name": "pulp",
"version": "0.18.6",
"authors": "sarah <>",
"repository": "https://github.com/sarah-ek/pulp/",
"license": "MIT",
"license_file": null,
"description": "Safe generic simd"
},
{
"name": "qoi",
"version": "0.4.1",
"authors": "Ivan Smirnov <rust@ivan.smirnov.ie>",
"repository": "https://github.com/aldanor/qoi-rust",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "VERY fast encoder/decoder for QOI (Quite Okay Image) format"
},
{
"name": "quote",
2023-08-23 03:41:30 +02:00
"version": "1.0.33",
"authors": "David Tolnay <dtolnay@gmail.com>",
"repository": "https://github.com/dtolnay/quote",
2020-12-15 08:10:25 +01:00
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Quasi-quoting macro quote!(...)"
},
{
"name": "r2d2",
"version": "0.8.10",
"authors": "Steven Fackler <sfackler@gmail.com>",
"repository": "https://github.com/sfackler/r2d2",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "A generic connection pool"
},
{
"name": "r2d2_sqlite",
"version": "0.23.0",
"authors": "Jovansonlee Cesar <ivanceras@gmail.com>|Hugo Woesthuis <hugo@woesthuis.eu>|Jerebtw <jeremialp41@gmail.com>",
"repository": "https://github.com/ivanceras/r2d2-sqlite",
"license": "MIT",
"license_file": null,
"description": "SQLite and SQLCipher support for the r2d2 connection pool"
},
Rework syncing code, and replace local sync server (#2329) This PR replaces the existing Python-driven sync server with a new one in Rust. The new server supports both collection and media syncing, and is compatible with both the new protocol mentioned below, and older clients. A setting has been added to the preferences screen to point Anki to a local server, and a similar setting is likely to come to AnkiMobile soon. Documentation is available here: <https://docs.ankiweb.net/sync-server.html> In addition to the new server and refactoring, this PR also makes changes to the sync protocol. The existing sync protocol places payloads and metadata inside a multipart POST body, which causes a few headaches: - Legacy clients build the request in a non-deterministic order, meaning the entire request needs to be scanned to extract the metadata. - Reqwest's multipart API directly writes the multipart body, without exposing the resulting stream to us, making it harder to track the progress of the transfer. We've been relying on a patched version of reqwest for timeouts, which is a pain to keep up to date. To address these issues, the metadata is now sent in a HTTP header, with the data payload sent directly in the body. Instead of the slower gzip, we now use zstd. The old timeout handling code has been replaced with a new implementation that wraps the request and response body streams to track progress, allowing us to drop the git dependencies for reqwest, hyper-timeout and tokio-io-timeout. The main other change to the protocol is that one-way syncs no longer need to downgrade the collection to schema 11 prior to sending.
2023-01-18 03:43:46 +01:00
{
"name": "rand",
"version": "0.7.3",
"authors": "The Rand Project Developers|The Rust Project Developers",
"repository": "https://github.com/rust-random/rand",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Random number generators and other randomness functionality."
},
2021-02-03 11:29:48 +01:00
{
"name": "rand",
"version": "0.8.5",
2021-02-03 11:29:48 +01:00
"authors": "The Rand Project Developers|The Rust Project Developers",
"repository": "https://github.com/rust-random/rand",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Random number generators and other randomness functionality."
},
Rework syncing code, and replace local sync server (#2329) This PR replaces the existing Python-driven sync server with a new one in Rust. The new server supports both collection and media syncing, and is compatible with both the new protocol mentioned below, and older clients. A setting has been added to the preferences screen to point Anki to a local server, and a similar setting is likely to come to AnkiMobile soon. Documentation is available here: <https://docs.ankiweb.net/sync-server.html> In addition to the new server and refactoring, this PR also makes changes to the sync protocol. The existing sync protocol places payloads and metadata inside a multipart POST body, which causes a few headaches: - Legacy clients build the request in a non-deterministic order, meaning the entire request needs to be scanned to extract the metadata. - Reqwest's multipart API directly writes the multipart body, without exposing the resulting stream to us, making it harder to track the progress of the transfer. We've been relying on a patched version of reqwest for timeouts, which is a pain to keep up to date. To address these issues, the metadata is now sent in a HTTP header, with the data payload sent directly in the body. Instead of the slower gzip, we now use zstd. The old timeout handling code has been replaced with a new implementation that wraps the request and response body streams to track progress, allowing us to drop the git dependencies for reqwest, hyper-timeout and tokio-io-timeout. The main other change to the protocol is that one-way syncs no longer need to downgrade the collection to schema 11 prior to sending.
2023-01-18 03:43:46 +01:00
{
"name": "rand_chacha",
"version": "0.2.2",
"authors": "The Rand Project Developers|The Rust Project Developers|The CryptoCorrosion Contributors",
"repository": "https://github.com/rust-random/rand",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "ChaCha random number generator"
},
2021-02-03 11:29:48 +01:00
{
"name": "rand_chacha",
2021-06-16 08:10:57 +02:00
"version": "0.3.1",
2021-02-03 11:29:48 +01:00
"authors": "The Rand Project Developers|The Rust Project Developers|The CryptoCorrosion Contributors",
"repository": "https://github.com/rust-random/rand",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "ChaCha random number generator"
},
Rework syncing code, and replace local sync server (#2329) This PR replaces the existing Python-driven sync server with a new one in Rust. The new server supports both collection and media syncing, and is compatible with both the new protocol mentioned below, and older clients. A setting has been added to the preferences screen to point Anki to a local server, and a similar setting is likely to come to AnkiMobile soon. Documentation is available here: <https://docs.ankiweb.net/sync-server.html> In addition to the new server and refactoring, this PR also makes changes to the sync protocol. The existing sync protocol places payloads and metadata inside a multipart POST body, which causes a few headaches: - Legacy clients build the request in a non-deterministic order, meaning the entire request needs to be scanned to extract the metadata. - Reqwest's multipart API directly writes the multipart body, without exposing the resulting stream to us, making it harder to track the progress of the transfer. We've been relying on a patched version of reqwest for timeouts, which is a pain to keep up to date. To address these issues, the metadata is now sent in a HTTP header, with the data payload sent directly in the body. Instead of the slower gzip, we now use zstd. The old timeout handling code has been replaced with a new implementation that wraps the request and response body streams to track progress, allowing us to drop the git dependencies for reqwest, hyper-timeout and tokio-io-timeout. The main other change to the protocol is that one-way syncs no longer need to downgrade the collection to schema 11 prior to sending.
2023-01-18 03:43:46 +01:00
{
"name": "rand_core",
"version": "0.5.1",
"authors": "The Rand Project Developers|The Rust Project Developers",
"repository": "https://github.com/rust-random/rand",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Core random number generator traits and tools for implementation."
},
{
"name": "rand_core",
2022-09-24 04:39:21 +02:00
"version": "0.6.4",
2021-02-03 11:29:48 +01:00
"authors": "The Rand Project Developers|The Rust Project Developers",
"repository": "https://github.com/rust-random/rand",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Core random number generator traits and tools for implementation."
},
{
"name": "rand_distr",
"version": "0.4.3",
"authors": "The Rand Project Developers",
"repository": "https://github.com/rust-random/rand",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Sampling from random number distributions"
},
Rework syncing code, and replace local sync server (#2329) This PR replaces the existing Python-driven sync server with a new one in Rust. The new server supports both collection and media syncing, and is compatible with both the new protocol mentioned below, and older clients. A setting has been added to the preferences screen to point Anki to a local server, and a similar setting is likely to come to AnkiMobile soon. Documentation is available here: <https://docs.ankiweb.net/sync-server.html> In addition to the new server and refactoring, this PR also makes changes to the sync protocol. The existing sync protocol places payloads and metadata inside a multipart POST body, which causes a few headaches: - Legacy clients build the request in a non-deterministic order, meaning the entire request needs to be scanned to extract the metadata. - Reqwest's multipart API directly writes the multipart body, without exposing the resulting stream to us, making it harder to track the progress of the transfer. We've been relying on a patched version of reqwest for timeouts, which is a pain to keep up to date. To address these issues, the metadata is now sent in a HTTP header, with the data payload sent directly in the body. Instead of the slower gzip, we now use zstd. The old timeout handling code has been replaced with a new implementation that wraps the request and response body streams to track progress, allowing us to drop the git dependencies for reqwest, hyper-timeout and tokio-io-timeout. The main other change to the protocol is that one-way syncs no longer need to downgrade the collection to schema 11 prior to sending.
2023-01-18 03:43:46 +01:00
{
"name": "rand_hc",
"version": "0.2.0",
"authors": "The Rand Project Developers",
"repository": "https://github.com/rust-random/rand",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "HC128 random number generator"
},
{
"name": "range-alloc",
"version": "0.1.3",
"authors": "the gfx-rs Developers",
"repository": "https://github.com/gfx-rs/range-alloc",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Generic range allocator"
},
{
"name": "raw-cpuid",
"version": "10.7.0",
"authors": "Gerd Zellweger <mail@gerdzellweger.com>",
"repository": "https://github.com/gz/rust-cpuid",
"license": "MIT",
"license_file": null,
"description": "A library to parse the x86 CPUID instruction, written in rust with no external dependencies. The implementation closely resembles the Intel CPUID manual description. The library does only depend on libcore."
},
{
"name": "raw-window-handle",
"version": "0.5.2",
"authors": "Osspial <osspial@gmail.com>",
"repository": "https://github.com/rust-windowing/raw-window-handle",
"license": "Apache-2.0 OR MIT OR Zlib",
"license_file": null,
"description": "Interoperability library for Rust Windowing applications."
},
{
"name": "rawpointer",
"version": "0.2.1",
"authors": "bluss",
"repository": "https://github.com/bluss/rawpointer/",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Extra methods for raw pointers and `NonNull<T>`. For example `.post_inc()` and `.pre_dec()` (c.f. `ptr++` and `--ptr`), `offset` and `add` for `NonNull<T>`, and the function `ptrdistance`."
},
{
"name": "rayon",
"version": "1.8.0",
"authors": "Niko Matsakis <niko@alum.mit.edu>|Josh Stone <cuviper@gmail.com>",
"repository": "https://github.com/rayon-rs/rayon",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Simple work-stealing parallelism for Rust"
},
{
"name": "rayon-core",
"version": "1.12.0",
"authors": "Niko Matsakis <niko@alum.mit.edu>|Josh Stone <cuviper@gmail.com>",
"repository": "https://github.com/rayon-rs/rayon",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Core APIs for Rayon"
},
{
"name": "reborrow",
"version": "0.5.5",
"authors": "sarah <>",
"repository": "https://github.com/sarah-ek/reborrow/",
"license": "MIT",
"license_file": null,
"description": "Emulate reborrowing for user types."
},
2023-10-25 01:28:10 +02:00
{
"name": "redox_syscall",
"version": "0.4.1",
"authors": "Jeremy Soller <jackpot51@gmail.com>",
"repository": "https://gitlab.redox-os.org/redox-os/syscall",
"license": "MIT",
"license_file": null,
"description": "A Rust library to access raw Redox system calls"
},
{
"name": "redox_users",
"version": "0.4.4",
"authors": "Jose Narvaez <goyox86@gmail.com>|Wesley Hershberger <mggmugginsmc@gmail.com>",
"repository": "https://gitlab.redox-os.org/redox-os/users",
"license": "MIT",
"license_file": null,
"description": "A Rust library to access Redox users and groups functionality"
},
{
"name": "regex",
2023-10-25 01:28:10 +02:00
"version": "1.10.2",
"authors": "The Rust Project Developers|Andrew Gallant <jamslam@gmail.com>",
"repository": "https://github.com/rust-lang/regex",
2020-12-15 08:10:25 +01:00
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "An implementation of regular expressions for Rust. This implementation uses finite automata and guarantees linear time matching on all inputs."
},
Plaintext import/export (#1850) * Add crate csv * Add start of csv importing on backend * Add Menomosyne serializer * Add csv and json importing on backend * Add plaintext importing on frontend * Add csv metadata extraction on backend * Add csv importing with GUI * Fix missing dfa file in build Added compile_data_attr, then re-ran cargo/update.py. * Don't use doubly buffered reader in csv * Escape HTML entities if CSV is not HTML Also use name 'is_html' consistently. * Use decimal number as foreign ease (like '2.5') * ForeignCard.ivl → ForeignCard.interval * Only allow fixed set of CSV delimiters * Map timestamp of ForeignCard to native due time * Don't trim CSV records * Document use of empty strings for defaults * Avoid creating CardGenContexts for every note This requires CardGenContext to be generic, so it works both with an owned and borrowed notetype. * Show all accepted file types in import file picker * Add import_json_file() * factor → ease_factor * delimter_from_value → delimiter_from_value * Map columns to fields, not the other way around * Fallback to current config for csv metadata * Add start of new import csv screen * Temporary fix for compilation issue on Linux/Mac * Disable jest bazel action for import-csv Jest fails with an error code if no tests are available, but this would not be noticable on Windows as Jest is not run there. * Fix field mapping issue * Revert "Temporary fix for compilation issue on Linux/Mac" This reverts commit 21f8a261408cdae49ec031aa21a1b659c4f66d82. * Add HtmlSwitch and move Switch to components * Fix spacing and make selectors consistent * Fix shortcut tooltip * Place import button at the top with path * Fix meta column indices * Remove NotetypeForString * Fix queue and type of foreign cards * Support different dupe resolution strategies * Allow dupe resolution selection when importing CSV * Test import of unnormalized text Close #1863. * Fix logging of foreign notes * Implement CSV exports * Use db_scalar() in notes_table_len() * Rework CSV metadata - Notetypes and decks are either defined by a global id or by a column. - If a notetype id is provided, its field map must also be specified. - If a notetype column is provided, fields are now mapped by index instead of name at import time. So the first non-meta column is used for the first field of every note, regardless of notetype. This makes importing easier and should improve compatiblity with files without a notetype column. - Ensure first field can be mapped to a column. - Meta columns must be defined as `#[meta name]:[column index]` instead of in the `#columns` tag. - Column labels contain the raw names defined by the file and must be prettified by the frontend. * Adjust frontend to new backend column mapping * Add force flags for is_html and delimiter * Detect if CSV is HTML by field content * Update dupe resolution labels * Simplify selectors * Fix coalescence of oneofs in TS * Disable meta columns from selection Plus a lot of refactoring. * Make import button stick to the bottom * Write delimiter and html flag into csv * Refetch field map after notetype change * Fix log labels for csv import * Log notes whose deck/notetype was missing * Fix hiding of empty log queues * Implement adding tags to all notes of a csv * Fix dupe resolution not being set in log * Implement adding tags to updated notes of a csv * Check first note field is not empty * Temporary fix for build on Linux/Mac * Fix inverted html check (dae) * Remove unused ftl string * Delimiter → Separator * Remove commented-out line * Don't accept .json files * Tweak tag ftl strings * Remove redundant blur call * Strip sound and add spaces in csv export * Export HTML by default * Fix unset deck in Mnemosyne import Also accept both numbers and strings for notetypes and decks in JSON. * Make DupeResolution::Update the default * Fix missing dot in extension * Make column indices 1-based * Remove StickContainer from TagEditor Fixes line breaking, border and z index on ImportCsvPage. * Assign different key combos to tag editors * Log all updated duplicates Add a log field for the true number of found notes. * Show identical notes as skipped * Split tag-editor into separate ts module (dae) * Add progress for CSV export * Add progress for text import * Tidy-ups after tag-editor split (dae) - import-csv no longer depends on editor - remove some commented lines
2022-06-01 12:26:16 +02:00
{
"name": "regex-automata",
"version": "0.1.10",
"authors": "Andrew Gallant <jamslam@gmail.com>",
"repository": "https://github.com/BurntSushi/regex-automata",
"license": "MIT OR Unlicense",
"license_file": null,
"description": "Automata construction and matching using regular expressions."
},
{
"name": "regex-automata",
2023-10-25 01:28:10 +02:00
"version": "0.4.3",
"authors": "The Rust Project Developers|Andrew Gallant <jamslam@gmail.com>",
"repository": "https://github.com/rust-lang/regex/tree/master/regex-automata",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Automata construction and matching using regular expressions."
},
{
"name": "regex-syntax",
"version": "0.6.29",
"authors": "The Rust Project Developers",
"repository": "https://github.com/rust-lang/regex",
2020-12-15 08:10:25 +01:00
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "A regular expression parser."
},
{
"name": "regex-syntax",
2023-10-25 01:28:10 +02:00
"version": "0.8.2",
"authors": "The Rust Project Developers|Andrew Gallant <jamslam@gmail.com>",
"repository": "https://github.com/rust-lang/regex/tree/master/regex-syntax",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "A regular expression parser."
},
{
"name": "renderdoc-sys",
"version": "1.0.0",
"authors": "Eyal Kalderon <ebkalderon@gmail.com>",
"repository": "https://github.com/ebkalderon/renderdoc-rs",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Low-level bindings to the RenderDoc API"
},
{
"name": "reqwest",
2023-10-25 01:28:10 +02:00
"version": "0.11.22",
"authors": "Sean McArthur <sean@seanmonstar.com>",
"repository": "https://github.com/seanmonstar/reqwest",
2020-12-15 08:10:25 +01:00
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "higher level HTTP client library"
},
Rework syncing code, and replace local sync server (#2329) This PR replaces the existing Python-driven sync server with a new one in Rust. The new server supports both collection and media syncing, and is compatible with both the new protocol mentioned below, and older clients. A setting has been added to the preferences screen to point Anki to a local server, and a similar setting is likely to come to AnkiMobile soon. Documentation is available here: <https://docs.ankiweb.net/sync-server.html> In addition to the new server and refactoring, this PR also makes changes to the sync protocol. The existing sync protocol places payloads and metadata inside a multipart POST body, which causes a few headaches: - Legacy clients build the request in a non-deterministic order, meaning the entire request needs to be scanned to extract the metadata. - Reqwest's multipart API directly writes the multipart body, without exposing the resulting stream to us, making it harder to track the progress of the transfer. We've been relying on a patched version of reqwest for timeouts, which is a pain to keep up to date. To address these issues, the metadata is now sent in a HTTP header, with the data payload sent directly in the body. Instead of the slower gzip, we now use zstd. The old timeout handling code has been replaced with a new implementation that wraps the request and response body streams to track progress, allowing us to drop the git dependencies for reqwest, hyper-timeout and tokio-io-timeout. The main other change to the protocol is that one-way syncs no longer need to downgrade the collection to schema 11 prior to sending.
2023-01-18 03:43:46 +01:00
{
"name": "retain_mut",
"version": "0.1.9",
"authors": "Xidorn Quan <me@upsuper.org>",
"repository": "https://github.com/upsuper/retain_mut",
"license": "MIT",
"license_file": null,
"description": "Provide retain_mut method that has the same functionality as retain but gives mutable borrow to the predicate."
},
{
"name": "ring",
"version": "0.17.7",
"authors": "Brian Smith <brian@briansmith.org>",
"repository": "https://github.com/briansmith/ring",
"license": null,
"license_file": "LICENSE",
"description": "Safe, fast, small crypto using Rust."
},
{
"name": "rmp",
"version": "0.8.12",
"authors": "Evgeny Safronov <division494@gmail.com>",
"repository": "https://github.com/3Hren/msgpack-rust",
"license": "MIT",
"license_file": null,
"description": "Pure Rust MessagePack serialization implementation"
},
{
"name": "rmp-serde",
"version": "1.1.2",
"authors": "Evgeny Safronov <division494@gmail.com>",
"repository": "https://github.com/3Hren/msgpack-rust",
"license": "MIT",
"license_file": null,
"description": "Serde bindings for RMP"
},
{
"name": "rusqlite",
"version": "0.30.0",
"authors": "The rusqlite developers",
"repository": "https://github.com/rusqlite/rusqlite",
"license": "MIT",
"license_file": null,
"description": "Ergonomic wrapper for SQLite"
},
{
"name": "rustc-demangle",
"version": "0.1.23",
"authors": "Alex Crichton <alex@alexcrichton.com>",
"repository": "https://github.com/alexcrichton/rustc-demangle",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Rust compiler symbol demangling."
},
2021-02-03 11:29:48 +01:00
{
"name": "rustc-hash",
"version": "1.1.0",
"authors": "The Rust Project Developers",
"repository": "https://github.com/rust-lang-nursery/rustc-hash",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "speed, non-cryptographic hash used in rustc"
},
{
"name": "rustix",
"version": "0.38.26",
"authors": "Dan Gohman <dev@sunfishcode.online>|Jakub Konka <kubkon@jakubkonka.com>",
"repository": "https://github.com/bytecodealliance/rustix",
"license": "Apache-2.0 OR Apache-2.0 WITH LLVM-exception OR MIT",
"license_file": null,
"description": "Safe Rust bindings to POSIX/Unix/Linux/Winsock2-like syscalls"
},
{
"name": "rustls",
"version": "0.21.9",
Rework syncing code, and replace local sync server (#2329) This PR replaces the existing Python-driven sync server with a new one in Rust. The new server supports both collection and media syncing, and is compatible with both the new protocol mentioned below, and older clients. A setting has been added to the preferences screen to point Anki to a local server, and a similar setting is likely to come to AnkiMobile soon. Documentation is available here: <https://docs.ankiweb.net/sync-server.html> In addition to the new server and refactoring, this PR also makes changes to the sync protocol. The existing sync protocol places payloads and metadata inside a multipart POST body, which causes a few headaches: - Legacy clients build the request in a non-deterministic order, meaning the entire request needs to be scanned to extract the metadata. - Reqwest's multipart API directly writes the multipart body, without exposing the resulting stream to us, making it harder to track the progress of the transfer. We've been relying on a patched version of reqwest for timeouts, which is a pain to keep up to date. To address these issues, the metadata is now sent in a HTTP header, with the data payload sent directly in the body. Instead of the slower gzip, we now use zstd. The old timeout handling code has been replaced with a new implementation that wraps the request and response body streams to track progress, allowing us to drop the git dependencies for reqwest, hyper-timeout and tokio-io-timeout. The main other change to the protocol is that one-way syncs no longer need to downgrade the collection to schema 11 prior to sending.
2023-01-18 03:43:46 +01:00
"authors": null,
"repository": "https://github.com/rustls/rustls",
2020-12-15 08:10:25 +01:00
"license": "Apache-2.0 OR ISC OR MIT",
"license_file": null,
"description": "Rustls is a modern TLS library written in Rust."
},
2021-06-18 10:15:41 +02:00
{
"name": "rustls-native-certs",
"version": "0.6.3",
"authors": null,
2021-06-18 10:15:41 +02:00
"repository": "https://github.com/ctz/rustls-native-certs",
"license": "Apache-2.0 OR ISC OR MIT",
"license_file": null,
"description": "rustls-native-certs allows rustls to use the platform native certificate store"
},
Rework syncing code, and replace local sync server (#2329) This PR replaces the existing Python-driven sync server with a new one in Rust. The new server supports both collection and media syncing, and is compatible with both the new protocol mentioned below, and older clients. A setting has been added to the preferences screen to point Anki to a local server, and a similar setting is likely to come to AnkiMobile soon. Documentation is available here: <https://docs.ankiweb.net/sync-server.html> In addition to the new server and refactoring, this PR also makes changes to the sync protocol. The existing sync protocol places payloads and metadata inside a multipart POST body, which causes a few headaches: - Legacy clients build the request in a non-deterministic order, meaning the entire request needs to be scanned to extract the metadata. - Reqwest's multipart API directly writes the multipart body, without exposing the resulting stream to us, making it harder to track the progress of the transfer. We've been relying on a patched version of reqwest for timeouts, which is a pain to keep up to date. To address these issues, the metadata is now sent in a HTTP header, with the data payload sent directly in the body. Instead of the slower gzip, we now use zstd. The old timeout handling code has been replaced with a new implementation that wraps the request and response body streams to track progress, allowing us to drop the git dependencies for reqwest, hyper-timeout and tokio-io-timeout. The main other change to the protocol is that one-way syncs no longer need to downgrade the collection to schema 11 prior to sending.
2023-01-18 03:43:46 +01:00
{
"name": "rustls-pemfile",
"version": "1.0.4",
Rework syncing code, and replace local sync server (#2329) This PR replaces the existing Python-driven sync server with a new one in Rust. The new server supports both collection and media syncing, and is compatible with both the new protocol mentioned below, and older clients. A setting has been added to the preferences screen to point Anki to a local server, and a similar setting is likely to come to AnkiMobile soon. Documentation is available here: <https://docs.ankiweb.net/sync-server.html> In addition to the new server and refactoring, this PR also makes changes to the sync protocol. The existing sync protocol places payloads and metadata inside a multipart POST body, which causes a few headaches: - Legacy clients build the request in a non-deterministic order, meaning the entire request needs to be scanned to extract the metadata. - Reqwest's multipart API directly writes the multipart body, without exposing the resulting stream to us, making it harder to track the progress of the transfer. We've been relying on a patched version of reqwest for timeouts, which is a pain to keep up to date. To address these issues, the metadata is now sent in a HTTP header, with the data payload sent directly in the body. Instead of the slower gzip, we now use zstd. The old timeout handling code has been replaced with a new implementation that wraps the request and response body streams to track progress, allowing us to drop the git dependencies for reqwest, hyper-timeout and tokio-io-timeout. The main other change to the protocol is that one-way syncs no longer need to downgrade the collection to schema 11 prior to sending.
2023-01-18 03:43:46 +01:00
"authors": null,
"repository": "https://github.com/rustls/pemfile",
"license": "Apache-2.0 OR ISC OR MIT",
"license_file": null,
"description": "Basic .pem file parser for keys and certificates"
},
{
"name": "rustls-webpki",
2023-10-25 01:28:10 +02:00
"version": "0.101.7",
"authors": null,
"repository": "https://github.com/rustls/webpki",
2023-08-23 03:41:30 +02:00
"license": "ISC",
"license_file": null,
"description": "Web PKI X.509 Certificate Verification."
},
2021-10-02 12:42:03 +02:00
{
"name": "rustversion",
2023-08-23 03:41:30 +02:00
"version": "1.0.14",
2021-10-02 12:42:03 +02:00
"authors": "David Tolnay <dtolnay@gmail.com>",
"repository": "https://github.com/dtolnay/rustversion",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Conditional compilation according to rustc compiler version"
},
{
"name": "ryu",
2023-08-23 03:41:30 +02:00
"version": "1.0.15",
"authors": "David Tolnay <dtolnay@gmail.com>",
"repository": "https://github.com/dtolnay/ryu",
"license": "Apache-2.0 OR BSL-1.0",
"license_file": null,
"description": "Fast floating point to string conversion"
},
{
"name": "safetensors",
"version": "0.3.3",
"authors": null,
"repository": "https://github.com/huggingface/safetensors",
"license": "Apache-2.0",
"license_file": null,
"description": "Provides functions to read and write safetensors which aim to be safer than their PyTorch counterpart. The format is 8 bytes which is an unsized int, being the size of a JSON header, the JSON header refers the `dtype` the `shape` and `data_offsets` which are the offsets for the values in the rest of the file."
},
{
"name": "same-file",
"version": "1.0.6",
"authors": "Andrew Gallant <jamslam@gmail.com>",
"repository": "https://github.com/BurntSushi/same-file",
"license": "MIT OR Unlicense",
"license_file": null,
"description": "A simple crate for determining whether two file paths point to the same file."
},
{
"name": "sanitize-filename",
"version": "0.5.0",
"authors": "Jacob Brown <kardeiz@gmail.com>",
"repository": "https://github.com/kardeiz/sanitize-filename",
"license": "MIT",
"license_file": null,
"description": "A simple filename sanitizer, based on Node's sanitize-filename"
},
{
"name": "schannel",
2023-08-23 03:41:30 +02:00
"version": "0.1.22",
"authors": "Steven Fackler <sfackler@gmail.com>|Steffen Butzer <steffen.butzer@outlook.com>",
"repository": "https://github.com/steffengy/schannel-rs",
"license": "MIT",
"license_file": null,
"description": "Schannel bindings for rust, allowing SSL/TLS (e.g. https) without openssl"
},
{
"name": "scheduled-thread-pool",
"version": "0.2.7",
"authors": "Steven Fackler <sfackler@gmail.com>",
"repository": "https://github.com/sfackler/scheduled-thread-pool",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "A scheduled thread pool"
},
{
"name": "scopeguard",
2023-08-23 03:41:30 +02:00
"version": "1.2.0",
"authors": "bluss",
"repository": "https://github.com/bluss/scopeguard",
2020-12-15 08:10:25 +01:00
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "A RAII scope guard that will run a given closure when it goes out of scope, even if the code between panics (assuming unwinding panic). Defines the macros `defer!`, `defer_on_unwind!`, `defer_on_success!` as shorthands for guards with one of the implemented strategies."
},
{
"name": "sct",
2023-10-25 01:28:10 +02:00
"version": "0.7.1",
"authors": "Joseph Birr-Pixton <jpixton@gmail.com>",
2023-10-25 01:28:10 +02:00
"repository": "https://github.com/rustls/sct.rs",
2020-12-15 08:10:25 +01:00
"license": "Apache-2.0 OR ISC OR MIT",
"license_file": null,
"description": "Certificate transparency SCT verification library"
},
{
"name": "security-framework",
2023-08-23 03:41:30 +02:00
"version": "2.9.2",
"authors": "Steven Fackler <sfackler@gmail.com>|Kornel <kornel@geekhood.net>",
"repository": "https://github.com/kornelski/rust-security-framework",
2020-12-15 08:10:25 +01:00
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Security.framework bindings for macOS and iOS"
},
{
"name": "security-framework-sys",
2023-08-23 03:41:30 +02:00
"version": "2.9.1",
"authors": "Steven Fackler <sfackler@gmail.com>|Kornel <kornel@geekhood.net>",
"repository": "https://github.com/kornelski/rust-security-framework",
2020-12-15 08:10:25 +01:00
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Apple `Security.framework` low-level FFI bindings"
},
{
"name": "self_cell",
2023-11-12 01:39:42 +01:00
"version": "0.10.3",
"authors": "Lukas Bergdoll <lukas.bergdoll@gmail.com>",
"repository": "https://github.com/Voultapher/self_cell",
"license": "Apache-2.0",
"license_file": null,
"description": "Safe-to-use proc-macro-free self-referential structs in stable Rust."
},
{
"name": "self_cell",
"version": "1.0.2",
"authors": "Lukas Bergdoll <lukas.bergdoll@gmail.com>",
"repository": "https://github.com/Voultapher/self_cell",
"license": "Apache-2.0",
"license_file": null,
"description": "Safe-to-use proc-macro-free self-referential structs in stable Rust."
},
{
"name": "seq-macro",
"version": "0.3.5",
"authors": "David Tolnay <dtolnay@gmail.com>",
"repository": "https://github.com/dtolnay/seq-macro",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Macro to repeat sequentially indexed copies of a fragment of code."
},
{
"name": "serde",
"version": "1.0.193",
"authors": "Erick Tryzelaar <erick.tryzelaar@gmail.com>|David Tolnay <dtolnay@gmail.com>",
"repository": "https://github.com/serde-rs/serde",
2020-12-15 08:10:25 +01:00
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "A generic serialization/deserialization framework"
},
{
"name": "serde-aux",
"version": "4.3.1",
"authors": "Victor Polevoy <maintainer@vpolevoy.com>",
"repository": "https://github.com/iddm/serde-aux",
"license": "MIT",
"license_file": null,
"description": "A serde crate's auxiliary library"
},
{
"name": "serde_derive",
"version": "1.0.193",
"authors": "Erick Tryzelaar <erick.tryzelaar@gmail.com>|David Tolnay <dtolnay@gmail.com>",
"repository": "https://github.com/serde-rs/serde",
2020-12-15 08:10:25 +01:00
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Macros 1.1 implementation of #[derive(Serialize, Deserialize)]"
},
{
"name": "serde_json",
"version": "1.0.108",
"authors": "Erick Tryzelaar <erick.tryzelaar@gmail.com>|David Tolnay <dtolnay@gmail.com>",
"repository": "https://github.com/serde-rs/json",
2020-12-15 08:10:25 +01:00
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "A JSON serialization file format"
},
Rework syncing code, and replace local sync server (#2329) This PR replaces the existing Python-driven sync server with a new one in Rust. The new server supports both collection and media syncing, and is compatible with both the new protocol mentioned below, and older clients. A setting has been added to the preferences screen to point Anki to a local server, and a similar setting is likely to come to AnkiMobile soon. Documentation is available here: <https://docs.ankiweb.net/sync-server.html> In addition to the new server and refactoring, this PR also makes changes to the sync protocol. The existing sync protocol places payloads and metadata inside a multipart POST body, which causes a few headaches: - Legacy clients build the request in a non-deterministic order, meaning the entire request needs to be scanned to extract the metadata. - Reqwest's multipart API directly writes the multipart body, without exposing the resulting stream to us, making it harder to track the progress of the transfer. We've been relying on a patched version of reqwest for timeouts, which is a pain to keep up to date. To address these issues, the metadata is now sent in a HTTP header, with the data payload sent directly in the body. Instead of the slower gzip, we now use zstd. The old timeout handling code has been replaced with a new implementation that wraps the request and response body streams to track progress, allowing us to drop the git dependencies for reqwest, hyper-timeout and tokio-io-timeout. The main other change to the protocol is that one-way syncs no longer need to downgrade the collection to schema 11 prior to sending.
2023-01-18 03:43:46 +01:00
{
"name": "serde_path_to_error",
2023-08-23 03:41:30 +02:00
"version": "0.1.14",
Rework syncing code, and replace local sync server (#2329) This PR replaces the existing Python-driven sync server with a new one in Rust. The new server supports both collection and media syncing, and is compatible with both the new protocol mentioned below, and older clients. A setting has been added to the preferences screen to point Anki to a local server, and a similar setting is likely to come to AnkiMobile soon. Documentation is available here: <https://docs.ankiweb.net/sync-server.html> In addition to the new server and refactoring, this PR also makes changes to the sync protocol. The existing sync protocol places payloads and metadata inside a multipart POST body, which causes a few headaches: - Legacy clients build the request in a non-deterministic order, meaning the entire request needs to be scanned to extract the metadata. - Reqwest's multipart API directly writes the multipart body, without exposing the resulting stream to us, making it harder to track the progress of the transfer. We've been relying on a patched version of reqwest for timeouts, which is a pain to keep up to date. To address these issues, the metadata is now sent in a HTTP header, with the data payload sent directly in the body. Instead of the slower gzip, we now use zstd. The old timeout handling code has been replaced with a new implementation that wraps the request and response body streams to track progress, allowing us to drop the git dependencies for reqwest, hyper-timeout and tokio-io-timeout. The main other change to the protocol is that one-way syncs no longer need to downgrade the collection to schema 11 prior to sending.
2023-01-18 03:43:46 +01:00
"authors": "David Tolnay <dtolnay@gmail.com>",
"repository": "https://github.com/dtolnay/path-to-error",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Path to the element that failed to deserialize"
},
{
"name": "serde_qs",
"version": "0.8.5",
"authors": "Sam Scott <sam@osohq.com>",
"repository": "https://github.com/samscott89/serde_qs",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Querystrings for Serde"
},
{
"name": "serde_repr",
"version": "0.1.17",
"authors": "David Tolnay <dtolnay@gmail.com>",
"repository": "https://github.com/dtolnay/serde-repr",
2020-12-15 08:10:25 +01:00
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Derive Serialize and Deserialize that delegates to the underlying repr of a C-like enum."
},
{
"name": "serde_rusqlite",
"version": "0.34.0",
"authors": "Pro <twisted.fall@gmail.com>",
"repository": "https://github.com/twistedfall/serde_rusqlite",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Serialize/deserialize rusqlite rows"
},
{
"name": "serde_tuple",
"version": "0.5.0",
"authors": "Jacob Brown <kardeiz@gmail.com>",
"repository": "https://github.com/kardeiz/serde_tuple",
"license": "MIT",
"license_file": null,
"description": "De/serialize structs with named fields as array of values"
},
{
"name": "serde_tuple_macros",
"version": "0.5.0",
"authors": "Jacob Brown <kardeiz@gmail.com>",
"repository": "https://github.com/kardeiz/serde_tuple",
"license": "MIT",
"license_file": null,
"description": "De/serialize structs with named fields as array of values"
},
{
"name": "serde_urlencoded",
"version": "0.7.1",
"authors": "Anthony Ramine <n.oxyde@gmail.com>",
"repository": "https://github.com/nox/serde_urlencoded",
2020-12-15 08:10:25 +01:00
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "`x-www-form-urlencoded` meets Serde"
},
Move away from Bazel (#2202) (for upgrading users, please see the notes at the bottom) Bazel brought a lot of nice things to the table, such as rebuilds based on content changes instead of modification times, caching of build products, detection of incorrect build rules via a sandbox, and so on. Rewriting the build in Bazel was also an opportunity to improve on the Makefile-based build we had prior, which was pretty poor: most dependencies were external or not pinned, and the build graph was poorly defined and mostly serialized. It was not uncommon for fresh checkouts to fail due to floating dependencies, or for things to break when trying to switch to an older commit. For day-to-day development, I think Bazel served us reasonably well - we could generally switch between branches while being confident that builds would be correct and reasonably fast, and not require full rebuilds (except on Windows, where the lack of a sandbox and the TS rules would cause build breakages when TS files were renamed/removed). Bazel achieves that reliability by defining rules for each programming language that define how source files should be turned into outputs. For the rules to work with Bazel's sandboxing approach, they often have to reimplement or partially bypass the standard tools that each programming language provides. The Rust rules call Rust's compiler directly for example, instead of using Cargo, and the Python rules extract each PyPi package into a separate folder that gets added to sys.path. These separate language rules allow proper declaration of inputs and outputs, and offer some advantages such as caching of build products and fine-grained dependency installation. But they also bring some downsides: - The rules don't always support use-cases/platforms that the standard language tools do, meaning they need to be patched to be used. I've had to contribute a number of patches to the Rust, Python and JS rules to unblock various issues. - The dependencies we use with each language sometimes make assumptions that do not hold in Bazel, meaning they either need to be pinned or patched, or the language rules need to be adjusted to accommodate them. I was hopeful that after the initial setup work, things would be relatively smooth-sailing. Unfortunately, that has not proved to be the case. Things frequently broke when dependencies or the language rules were updated, and I began to get frustrated at the amount of Anki development time I was instead spending on build system upkeep. It's now about 2 years since switching to Bazel, and I think it's time to cut losses, and switch to something else that's a better fit. The new build system is based on a small build tool called Ninja, and some custom Rust code in build/. This means that to build Anki, Bazel is no longer required, but Ninja and Rust need to be installed on your system. Python and Node toolchains are automatically downloaded like in Bazel. This new build system should result in faster builds in some cases: - Because we're using cargo to build now, Rust builds are able to take advantage of pipelining and incremental debug builds, which we didn't have with Bazel. It's also easier to override the default linker on Linux/macOS, which can further improve speeds. - External Rust crates are now built with opt=1, which improves performance of debug builds. - Esbuild is now used to transpile TypeScript, instead of invoking the TypeScript compiler. This results in faster builds, by deferring typechecking to test/check time, and by allowing more work to happen in parallel. As an example of the differences, when testing with the mold linker on Linux, adding a new message to tags.proto (which triggers a recompile of the bulk of the Rust and TypeScript code) results in a compile that goes from about 22s on Bazel to about 7s in the new system. With the standard linker, it's about 9s. Some other changes of note: - Our Rust workspace now uses cargo-hakari to ensure all packages agree on available features, preventing unnecessary rebuilds. - pylib/anki is now a PEP420 implicit namespace, avoiding the need to merge source files and generated files into a single folder for running. By telling VSCode about the extra search path, code completion now works with generated files without needing to symlink them into the source folder. - qt/aqt can't use PEP420 as it's difficult to get rid of aqt/__init__.py. Instead, the generated files are now placed in a separate _aqt package that's added to the path. - ts/lib is now exposed as @tslib, so the source code and generated code can be provided under the same namespace without a merging step. - MyPy and PyLint are now invoked once for the entire codebase. - dprint will be used to format TypeScript/json files in the future instead of the slower prettier (currently turned off to avoid causing conflicts). It can automatically defer to prettier when formatting Svelte files. - svelte-check is now used for typechecking our Svelte code, which revealed a few typing issues that went undetected with the old system. - The Jest unit tests now work on Windows as well. If you're upgrading from Bazel, updated usage instructions are in docs/development.md and docs/build.md. A summary of the changes: - please remove node_modules and .bazel - install rustup (https://rustup.rs/) - install rsync if not already installed (on windows, use pacman - see docs/windows.md) - install Ninja (unzip from https://github.com/ninja-build/ninja/releases/tag/v1.11.1 and place on your path, or from your distro/homebrew if it's 1.10+) - update .vscode/settings.json from .vscode.dist
2022-11-27 06:24:20 +01:00
{
"name": "sha1",
"version": "0.10.6",
Move away from Bazel (#2202) (for upgrading users, please see the notes at the bottom) Bazel brought a lot of nice things to the table, such as rebuilds based on content changes instead of modification times, caching of build products, detection of incorrect build rules via a sandbox, and so on. Rewriting the build in Bazel was also an opportunity to improve on the Makefile-based build we had prior, which was pretty poor: most dependencies were external or not pinned, and the build graph was poorly defined and mostly serialized. It was not uncommon for fresh checkouts to fail due to floating dependencies, or for things to break when trying to switch to an older commit. For day-to-day development, I think Bazel served us reasonably well - we could generally switch between branches while being confident that builds would be correct and reasonably fast, and not require full rebuilds (except on Windows, where the lack of a sandbox and the TS rules would cause build breakages when TS files were renamed/removed). Bazel achieves that reliability by defining rules for each programming language that define how source files should be turned into outputs. For the rules to work with Bazel's sandboxing approach, they often have to reimplement or partially bypass the standard tools that each programming language provides. The Rust rules call Rust's compiler directly for example, instead of using Cargo, and the Python rules extract each PyPi package into a separate folder that gets added to sys.path. These separate language rules allow proper declaration of inputs and outputs, and offer some advantages such as caching of build products and fine-grained dependency installation. But they also bring some downsides: - The rules don't always support use-cases/platforms that the standard language tools do, meaning they need to be patched to be used. I've had to contribute a number of patches to the Rust, Python and JS rules to unblock various issues. - The dependencies we use with each language sometimes make assumptions that do not hold in Bazel, meaning they either need to be pinned or patched, or the language rules need to be adjusted to accommodate them. I was hopeful that after the initial setup work, things would be relatively smooth-sailing. Unfortunately, that has not proved to be the case. Things frequently broke when dependencies or the language rules were updated, and I began to get frustrated at the amount of Anki development time I was instead spending on build system upkeep. It's now about 2 years since switching to Bazel, and I think it's time to cut losses, and switch to something else that's a better fit. The new build system is based on a small build tool called Ninja, and some custom Rust code in build/. This means that to build Anki, Bazel is no longer required, but Ninja and Rust need to be installed on your system. Python and Node toolchains are automatically downloaded like in Bazel. This new build system should result in faster builds in some cases: - Because we're using cargo to build now, Rust builds are able to take advantage of pipelining and incremental debug builds, which we didn't have with Bazel. It's also easier to override the default linker on Linux/macOS, which can further improve speeds. - External Rust crates are now built with opt=1, which improves performance of debug builds. - Esbuild is now used to transpile TypeScript, instead of invoking the TypeScript compiler. This results in faster builds, by deferring typechecking to test/check time, and by allowing more work to happen in parallel. As an example of the differences, when testing with the mold linker on Linux, adding a new message to tags.proto (which triggers a recompile of the bulk of the Rust and TypeScript code) results in a compile that goes from about 22s on Bazel to about 7s in the new system. With the standard linker, it's about 9s. Some other changes of note: - Our Rust workspace now uses cargo-hakari to ensure all packages agree on available features, preventing unnecessary rebuilds. - pylib/anki is now a PEP420 implicit namespace, avoiding the need to merge source files and generated files into a single folder for running. By telling VSCode about the extra search path, code completion now works with generated files without needing to symlink them into the source folder. - qt/aqt can't use PEP420 as it's difficult to get rid of aqt/__init__.py. Instead, the generated files are now placed in a separate _aqt package that's added to the path. - ts/lib is now exposed as @tslib, so the source code and generated code can be provided under the same namespace without a merging step. - MyPy and PyLint are now invoked once for the entire codebase. - dprint will be used to format TypeScript/json files in the future instead of the slower prettier (currently turned off to avoid causing conflicts). It can automatically defer to prettier when formatting Svelte files. - svelte-check is now used for typechecking our Svelte code, which revealed a few typing issues that went undetected with the old system. - The Jest unit tests now work on Windows as well. If you're upgrading from Bazel, updated usage instructions are in docs/development.md and docs/build.md. A summary of the changes: - please remove node_modules and .bazel - install rustup (https://rustup.rs/) - install rsync if not already installed (on windows, use pacman - see docs/windows.md) - install Ninja (unzip from https://github.com/ninja-build/ninja/releases/tag/v1.11.1 and place on your path, or from your distro/homebrew if it's 1.10+) - update .vscode/settings.json from .vscode.dist
2022-11-27 06:24:20 +01:00
"authors": "RustCrypto Developers",
"repository": "https://github.com/RustCrypto/hashes",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "SHA-1 hash function"
},
{
"name": "sha2",
"version": "0.10.8",
"authors": "RustCrypto Developers",
"repository": "https://github.com/RustCrypto/hashes",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Pure Rust implementation of the SHA-2 hash function family including SHA-224, SHA-256, SHA-384, and SHA-512."
},
{
"name": "sharded-slab",
2023-10-25 01:28:10 +02:00
"version": "0.1.7",
"authors": "Eliza Weisman <eliza@buoyant.io>",
"repository": "https://github.com/hawkw/sharded-slab",
"license": "MIT",
"license_file": null,
"description": "A lock-free concurrent slab."
},
{
"name": "signal-hook",
"version": "0.3.17",
"authors": "Michal 'vorner' Vaner <vorner@vorner.cz>|Thomas Himmelstoss <thimm@posteo.de>",
"repository": "https://github.com/vorner/signal-hook",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Unix signal handling"
},
{
"name": "signal-hook-registry",
"version": "1.4.1",
"authors": "Michal 'vorner' Vaner <vorner@vorner.cz>|Masaki Hara <ackie.h.gmai@gmail.com>",
"repository": "https://github.com/vorner/signal-hook",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Backend crate for signal-hook"
},
{
"name": "simd-adler32",
"version": "0.3.7",
"authors": "Marvin Countryman <me@maar.vin>",
"repository": "https://github.com/mcountryman/simd-adler32",
"license": "MIT",
"license_file": null,
"description": "A SIMD-accelerated Adler-32 hash algorithm implementation."
},
{
"name": "siphasher",
"version": "0.3.11",
"authors": "Frank Denis <github@pureftpd.org>",
"repository": "https://github.com/jedisct1/rust-siphash",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "SipHash-2-4, SipHash-1-3 and 128-bit variants in pure Rust"
},
{
"name": "slab",
2023-08-23 03:41:30 +02:00
"version": "0.4.9",
"authors": "Carl Lerche <me@carllerche.com>",
"repository": "https://github.com/tokio-rs/slab",
"license": "MIT",
"license_file": null,
"description": "Pre-allocated storage for a uniform data type"
},
{
"name": "slotmap",
"version": "1.0.7",
"authors": "Orson Peters <orsonpeters@gmail.com>",
"repository": "https://github.com/orlp/slotmap",
"license": "Zlib",
"license_file": null,
"description": "Slotmap data structure"
},
{
"name": "smallvec",
"version": "1.11.2",
"authors": "The Servo Project Developers",
"repository": "https://github.com/servo/rust-smallvec",
2020-12-15 08:10:25 +01:00
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "'Small vector' optimization: store up to a small number of items on the stack"
},
{
"name": "snafu",
2023-08-23 03:41:30 +02:00
"version": "0.7.5",
"authors": "Jake Goulding <jake.goulding@gmail.com>",
"repository": "https://github.com/shepmaster/snafu",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "An ergonomic error handling library"
},
{
"name": "snafu-derive",
2023-08-23 03:41:30 +02:00
"version": "0.7.5",
"authors": "Jake Goulding <jake.goulding@gmail.com>",
"repository": "https://github.com/shepmaster/snafu",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "An ergonomic error handling library"
},
V3 parent limits (#1638) * avoid repinning Rust deps by default * add id_tree dependency * Respect intermediate child limits in v3 * Test new behaviour of v3 counts * Rework v3 queue building to respect parent limits * Add missing did field to SQL query * Fix `LimitTreeMap::is_exhausted()` * Rework tree building logic https://github.com/ankitects/anki/pull/1638#discussion_r798328734 * Add timer for build_queues() * `is_exhausted()` -> `limit_reached()` * Move context and limits into `QueueBuilder` This allows for moving more logic into QueueBuilder, so less passing around of arguments. Unfortunately, some tests will require additional work to set up. * Fix stop condition in new_cards_by_position * Fix order gather order of new cards by deck * Add scheduler/queue/builder/burying.rs * Fix bad tree due to unsorted child decks * Fix comment * Fix `cap_new_to_review_rec()` * Add test for new card gathering * Always sort `child_decks()` * Fix deck removal in `cap_new_to_review_rec()` * Fix sibling ordering in new card gathering * Remove limits for deck total count with children * Add random gather order * Remove bad sibling order handling All routines ensure ascending order now. Also do some other minor refactoring. * Remove queue truncating All routines stop now as soon as the root limit is reached. * Move deck fetching into `QueueBuilder::new()` * Rework new card gather and sort options https://github.com/ankitects/anki/pull/1638#issuecomment-1032173013 * Disable new sort order choices ... depending on set gather order. * Use enum instead of numbers * Ensure valid sort order setting * Update new gather and sort order tooltips * Warn about random insertion order with v3 * Revert "Add timer for build_queues()" This reverts commit c9f5fc6ebe87953c17a0c842990b009b5596c69c. * Update rslib/src/storage/card/mod.rs (dae) * minor wording tweaks to the tooltips (dae) + move legacy strings to bottom + consistent capitalization (our leech action still needs fixing, but that will require introducing a new 'suspend card' string as the existing one is used elsewhere as well)
2022-02-10 00:55:43 +01:00
{
"name": "snowflake",
"version": "1.3.0",
"authors": "Steven Allen <steven@stebalien.com>",
"repository": "https://github.com/Stebalien/snowflake",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "A module for generating guaranteed process unique IDs."
},
{
"name": "socket2",
2023-10-25 01:28:10 +02:00
"version": "0.4.10",
"authors": "Alex Crichton <alex@alexcrichton.com>|Thomas de Zeeuw <thomasdezeeuw@gmail.com>",
"repository": "https://github.com/rust-lang/socket2",
2020-12-15 08:10:25 +01:00
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Utilities for handling networking sockets with a maximal amount of configuration possible intended."
},
2023-08-23 03:41:30 +02:00
{
"name": "socket2",
2023-10-25 01:28:10 +02:00
"version": "0.5.5",
2023-08-23 03:41:30 +02:00
"authors": "Alex Crichton <alex@alexcrichton.com>|Thomas de Zeeuw <thomasdezeeuw@gmail.com>",
"repository": "https://github.com/rust-lang/socket2",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Utilities for handling networking sockets with a maximal amount of configuration possible intended."
},
Rework syncing code, and replace local sync server (#2329) This PR replaces the existing Python-driven sync server with a new one in Rust. The new server supports both collection and media syncing, and is compatible with both the new protocol mentioned below, and older clients. A setting has been added to the preferences screen to point Anki to a local server, and a similar setting is likely to come to AnkiMobile soon. Documentation is available here: <https://docs.ankiweb.net/sync-server.html> In addition to the new server and refactoring, this PR also makes changes to the sync protocol. The existing sync protocol places payloads and metadata inside a multipart POST body, which causes a few headaches: - Legacy clients build the request in a non-deterministic order, meaning the entire request needs to be scanned to extract the metadata. - Reqwest's multipart API directly writes the multipart body, without exposing the resulting stream to us, making it harder to track the progress of the transfer. We've been relying on a patched version of reqwest for timeouts, which is a pain to keep up to date. To address these issues, the metadata is now sent in a HTTP header, with the data payload sent directly in the body. Instead of the slower gzip, we now use zstd. The old timeout handling code has been replaced with a new implementation that wraps the request and response body streams to track progress, allowing us to drop the git dependencies for reqwest, hyper-timeout and tokio-io-timeout. The main other change to the protocol is that one-way syncs no longer need to downgrade the collection to schema 11 prior to sending.
2023-01-18 03:43:46 +01:00
{
"name": "spin",
"version": "0.9.8",
Rework syncing code, and replace local sync server (#2329) This PR replaces the existing Python-driven sync server with a new one in Rust. The new server supports both collection and media syncing, and is compatible with both the new protocol mentioned below, and older clients. A setting has been added to the preferences screen to point Anki to a local server, and a similar setting is likely to come to AnkiMobile soon. Documentation is available here: <https://docs.ankiweb.net/sync-server.html> In addition to the new server and refactoring, this PR also makes changes to the sync protocol. The existing sync protocol places payloads and metadata inside a multipart POST body, which causes a few headaches: - Legacy clients build the request in a non-deterministic order, meaning the entire request needs to be scanned to extract the metadata. - Reqwest's multipart API directly writes the multipart body, without exposing the resulting stream to us, making it harder to track the progress of the transfer. We've been relying on a patched version of reqwest for timeouts, which is a pain to keep up to date. To address these issues, the metadata is now sent in a HTTP header, with the data payload sent directly in the body. Instead of the slower gzip, we now use zstd. The old timeout handling code has been replaced with a new implementation that wraps the request and response body streams to track progress, allowing us to drop the git dependencies for reqwest, hyper-timeout and tokio-io-timeout. The main other change to the protocol is that one-way syncs no longer need to downgrade the collection to schema 11 prior to sending.
2023-01-18 03:43:46 +01:00
"authors": "Mathijs van de Nes <git@mathijs.vd-nes.nl>|John Ericson <git@JohnEricson.me>|Joshua Barretto <joshua.s.barretto@gmail.com>",
"repository": "https://github.com/mvdnes/spin-rs.git",
"license": "MIT",
"license_file": null,
"description": "Spin-based synchronization primitives"
},
{
"name": "spirv",
"version": "0.2.0+1.5.4",
"authors": "Lei Zhang <antiagainst@gmail.com>",
"repository": "https://github.com/gfx-rs/rspirv",
"license": "Apache-2.0",
"license_file": null,
"description": "Rust definition of SPIR-V structs and enums"
},
{
"name": "stable_deref_trait",
"version": "1.2.0",
"authors": "Robert Grosse <n210241048576@gmail.com>",
"repository": "https://github.com/storyyeller/stable_deref_trait",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "An unsafe marker trait for types like Box and Rc that dereference to a stable address even when moved, and hence can be used with libraries such as owning_ref and rental."
},
{
"name": "static_assertions",
"version": "1.1.0",
"authors": "Nikolai Vazquez",
"repository": "https://github.com/nvzqz/static-assertions-rs",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Compile-time assertions to ensure that invariants are met."
},
{
"name": "string_cache",
"version": "0.8.7",
"authors": "The Servo Project Developers",
"repository": "https://github.com/servo/string-cache",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "A string interning library for Rust, developed as part of the Servo project."
},
{
"name": "string_cache_codegen",
2022-09-24 04:39:21 +02:00
"version": "0.5.2",
"authors": "The Servo Project Developers",
"repository": "https://github.com/servo/string-cache",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "A codegen library for string-cache, developed as part of the Servo project."
},
2021-03-07 10:08:03 +01:00
{
"name": "strum",
"version": "0.25.0",
2021-03-07 10:08:03 +01:00
"authors": "Peter Glotfelty <peter.glotfelty@microsoft.com>",
"repository": "https://github.com/Peternator7/strum",
"license": "MIT",
"license_file": null,
"description": "Helpful macros for working with enums and strings"
},
{
"name": "strum_macros",
2023-10-25 01:28:10 +02:00
"version": "0.25.3",
2021-03-07 10:08:03 +01:00
"authors": "Peter Glotfelty <peter.glotfelty@microsoft.com>",
"repository": "https://github.com/Peternator7/strum",
"license": "MIT",
"license_file": null,
"description": "Helpful macros for working with enums and strings"
},
2022-01-15 05:59:43 +01:00
{
"name": "subtle",
"version": "2.5.0",
2022-01-15 05:59:43 +01:00
"authors": "Isis Lovecruft <isis@patternsinthevoid.net>|Henry de Valence <hdevalence@hdevalence.ca>",
"repository": "https://github.com/dalek-cryptography/subtle",
"license": "BSD-3-Clause",
"license_file": null,
"description": "Pure-Rust traits and utilities for constant-time cryptographic implementations."
},
{
"name": "syn",
"version": "1.0.109",
"authors": "David Tolnay <dtolnay@gmail.com>",
"repository": "https://github.com/dtolnay/syn",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Parser for Rust source code"
},
{
"name": "syn",
"version": "2.0.39",
"authors": "David Tolnay <dtolnay@gmail.com>",
"repository": "https://github.com/dtolnay/syn",
2020-12-15 08:10:25 +01:00
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Parser for Rust source code"
},
Rework syncing code, and replace local sync server (#2329) This PR replaces the existing Python-driven sync server with a new one in Rust. The new server supports both collection and media syncing, and is compatible with both the new protocol mentioned below, and older clients. A setting has been added to the preferences screen to point Anki to a local server, and a similar setting is likely to come to AnkiMobile soon. Documentation is available here: <https://docs.ankiweb.net/sync-server.html> In addition to the new server and refactoring, this PR also makes changes to the sync protocol. The existing sync protocol places payloads and metadata inside a multipart POST body, which causes a few headaches: - Legacy clients build the request in a non-deterministic order, meaning the entire request needs to be scanned to extract the metadata. - Reqwest's multipart API directly writes the multipart body, without exposing the resulting stream to us, making it harder to track the progress of the transfer. We've been relying on a patched version of reqwest for timeouts, which is a pain to keep up to date. To address these issues, the metadata is now sent in a HTTP header, with the data payload sent directly in the body. Instead of the slower gzip, we now use zstd. The old timeout handling code has been replaced with a new implementation that wraps the request and response body streams to track progress, allowing us to drop the git dependencies for reqwest, hyper-timeout and tokio-io-timeout. The main other change to the protocol is that one-way syncs no longer need to downgrade the collection to schema 11 prior to sending.
2023-01-18 03:43:46 +01:00
{
"name": "sync_wrapper",
"version": "0.1.2",
Rework syncing code, and replace local sync server (#2329) This PR replaces the existing Python-driven sync server with a new one in Rust. The new server supports both collection and media syncing, and is compatible with both the new protocol mentioned below, and older clients. A setting has been added to the preferences screen to point Anki to a local server, and a similar setting is likely to come to AnkiMobile soon. Documentation is available here: <https://docs.ankiweb.net/sync-server.html> In addition to the new server and refactoring, this PR also makes changes to the sync protocol. The existing sync protocol places payloads and metadata inside a multipart POST body, which causes a few headaches: - Legacy clients build the request in a non-deterministic order, meaning the entire request needs to be scanned to extract the metadata. - Reqwest's multipart API directly writes the multipart body, without exposing the resulting stream to us, making it harder to track the progress of the transfer. We've been relying on a patched version of reqwest for timeouts, which is a pain to keep up to date. To address these issues, the metadata is now sent in a HTTP header, with the data payload sent directly in the body. Instead of the slower gzip, we now use zstd. The old timeout handling code has been replaced with a new implementation that wraps the request and response body streams to track progress, allowing us to drop the git dependencies for reqwest, hyper-timeout and tokio-io-timeout. The main other change to the protocol is that one-way syncs no longer need to downgrade the collection to schema 11 prior to sending.
2023-01-18 03:43:46 +01:00
"authors": "Actyx AG <developer@actyx.io>",
"repository": "https://github.com/Actyx/sync_wrapper",
"license": "Apache-2.0",
"license_file": null,
"description": "A tool for enlisting the compilers help in proving the absence of concurrency"
},
{
"name": "synstructure",
"version": "0.13.0",
"authors": "Nika Layzell <nika@thelayzells.com>",
"repository": "https://github.com/mystor/synstructure",
"license": "MIT",
"license_file": null,
"description": "Helper methods and macros for custom derives"
},
2023-10-25 01:28:10 +02:00
{
"name": "system-configuration",
"version": "0.5.1",
"authors": "Mullvad VPN",
"repository": "https://github.com/mullvad/system-configuration-rs",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Bindings to SystemConfiguration framework for macOS"
},
{
"name": "system-configuration-sys",
"version": "0.5.0",
"authors": "Mullvad VPN",
"repository": "https://github.com/mullvad/system-configuration-rs",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Low level bindings to SystemConfiguration framework for macOS"
},
{
"name": "tch",
"version": "0.14.0",
"authors": "Laurent Mazare <lmazare@gmail.com>",
"repository": "https://github.com/LaurentMazare/tch-rs",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Rust wrappers for the PyTorch C++ api (libtorch)."
},
{
"name": "tempfile",
"version": "3.8.1",
"authors": "Steven Allen <steven@stebalien.com>|The Rust Project Developers|Ashley Mannix <ashleymannix@live.com.au>|Jason White <me@jasonwhite.io>",
"repository": "https://github.com/Stebalien/tempfile",
2020-12-15 08:10:25 +01:00
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "A library for managing temporary files and directories."
},
{
"name": "tendril",
2022-09-24 04:39:21 +02:00
"version": "0.4.3",
"authors": "Keegan McAllister <mcallister.keegan@gmail.com>|Simon Sapin <simon.sapin@exyr.org>|Chris Morgan <me@chrismorgan.info>",
"repository": "https://github.com/servo/tendril",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Compact buffer/string type for zero-copy parsing"
},
{
"name": "termcolor",
"version": "1.4.0",
"authors": "Andrew Gallant <jamslam@gmail.com>",
"repository": "https://github.com/BurntSushi/termcolor",
"license": "MIT OR Unlicense",
"license_file": null,
"description": "A simple cross platform library for writing colored text to a terminal."
},
{
"name": "text_placeholder",
"version": "0.5.0",
"authors": "Bernardo Araujo <bernardo.amc@gmail.com>",
"repository": "https://github.com/bernardoamc/text-placeholder",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "A flexible text template engine"
},
{
"name": "thiserror",
2023-10-25 01:28:10 +02:00
"version": "1.0.50",
"authors": "David Tolnay <dtolnay@gmail.com>",
"repository": "https://github.com/dtolnay/thiserror",
2020-12-15 08:10:25 +01:00
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "derive(Error)"
},
{
"name": "thiserror-impl",
2023-10-25 01:28:10 +02:00
"version": "1.0.50",
"authors": "David Tolnay <dtolnay@gmail.com>",
"repository": "https://github.com/dtolnay/thiserror",
2020-12-15 08:10:25 +01:00
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Implementation detail of the `thiserror` crate"
},
{
"name": "thread-tree",
"version": "0.3.3",
"authors": "bluss <>",
"repository": "https://github.com/bluss/thread-tree",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "A tree-structured thread pool for splitting jobs hierarchically on worker threads. The tree structure means that there is no contention between workers when delivering jobs."
},
{
"name": "thread_local",
"version": "1.1.7",
"authors": "Amanieu d'Antras <amanieu@gmail.com>",
"repository": "https://github.com/Amanieu/thread_local-rs",
2020-12-15 08:10:25 +01:00
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Per-object thread-local storage"
},
{
"name": "tiff",
"version": "0.9.0",
"authors": "The image-rs Developers",
"repository": "https://github.com/image-rs/image-tiff",
"license": "MIT",
"license_file": null,
"description": "TIFF decoding and encoding library in pure Rust"
},
{
"name": "time",
2023-10-25 01:28:10 +02:00
"version": "0.3.30",
"authors": "Jacob Pratt <open-source@jhpratt.dev>|Time contributors",
"repository": "https://github.com/time-rs/time",
2020-12-15 08:10:25 +01:00
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Date and time library. Fully interoperable with the standard library. Mostly compatible with #![no_std]."
},
{
"name": "time-core",
"version": "0.1.2",
"authors": "Jacob Pratt <open-source@jhpratt.dev>|Time contributors",
"repository": "https://github.com/time-rs/time",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "This crate is an implementation detail and should not be relied upon directly."
},
{
"name": "time-macros",
"version": "0.2.15",
"authors": "Jacob Pratt <open-source@jhpratt.dev>|Time contributors",
"repository": "https://github.com/time-rs/time",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Procedural macros for the time crate. This crate is an implementation detail and should not be relied upon directly."
},
{
"name": "tinystr",
"version": "0.7.5",
"authors": "The ICU4X Project Developers",
"repository": "https://github.com/unicode-org/icu4x",
"license": null,
"license_file": "LICENSE",
"description": "A small ASCII-only bounded length string representation."
},
{
"name": "tinyvec",
2022-09-24 04:39:21 +02:00
"version": "1.6.0",
"authors": "Lokathor <zefria@gmail.com>",
"repository": "https://github.com/Lokathor/tinyvec",
2020-12-15 08:10:25 +01:00
"license": "Apache-2.0 OR MIT OR Zlib",
"license_file": null,
"description": "`tinyvec` provides 100% safe vec-like data structures."
},
{
"name": "tinyvec_macros",
"version": "0.1.1",
"authors": "Soveu <marx.tomasz@gmail.com>",
"repository": "https://github.com/Soveu/tinyvec_macros",
2020-12-15 08:10:25 +01:00
"license": "Apache-2.0 OR MIT OR Zlib",
"license_file": null,
"description": "Some macros for tiny containers"
},
{
"name": "tokio",
"version": "1.34.0",
"authors": "Tokio Contributors <team@tokio.rs>",
"repository": "https://github.com/tokio-rs/tokio",
"license": "MIT",
"license_file": null,
"description": "An event-driven, non-blocking I/O platform for writing asynchronous I/O backed applications."
},
2021-07-23 11:39:40 +02:00
{
"name": "tokio-macros",
"version": "2.2.0",
2021-07-23 11:39:40 +02:00
"authors": "Tokio Contributors <team@tokio.rs>",
"repository": "https://github.com/tokio-rs/tokio",
"license": "MIT",
"license_file": null,
"description": "Tokio's proc macros."
},
{
"name": "tokio-native-tls",
"version": "0.3.1",
"authors": "Tokio Contributors <team@tokio.rs>",
"repository": "https://github.com/tokio-rs/tls",
"license": "MIT",
"license_file": null,
"description": "An implementation of TLS/SSL streams for Tokio using native-tls giving an implementation of TLS for nonblocking I/O streams."
},
{
"name": "tokio-rustls",
"version": "0.24.1",
"authors": null,
"repository": "https://github.com/rustls/tokio-rustls",
2020-12-15 08:10:25 +01:00
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Asynchronous TLS/SSL streams for Tokio using Rustls."
},
{
"name": "tokio-socks",
"version": "0.5.1",
"authors": "Yilin Chen <sticnarf@gmail.com>",
"repository": "https://github.com/sticnarf/tokio-socks",
"license": "MIT",
"license_file": null,
"description": "Asynchronous SOCKS proxy support for Rust."
},
{
"name": "tokio-util",
"version": "0.7.10",
"authors": "Tokio Contributors <team@tokio.rs>",
"repository": "https://github.com/tokio-rs/tokio",
"license": "MIT",
"license_file": null,
"description": "Additional utilities for working with Tokio."
},
{
"name": "toml",
"version": "0.5.11",
"authors": "Alex Crichton <alex@alexcrichton.com>",
"repository": "https://github.com/toml-rs/toml",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "A native Rust encoder and decoder of TOML-formatted files and streams. Provides implementations of the standard Serialize/Deserialize traits for TOML data to facilitate deserializing and serializing Rust structures."
},
{
"name": "toml_datetime",
2023-10-25 01:28:10 +02:00
"version": "0.6.5",
"authors": "Alex Crichton <alex@alexcrichton.com>",
"repository": "https://github.com/toml-rs/toml",
2020-12-15 08:10:25 +01:00
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "A TOML-compatible datetime type"
},
{
"name": "toml_edit",
"version": "0.20.7",
"authors": "Andronik Ordian <write@reusable.software>|Ed Page <eopage@gmail.com>",
"repository": "https://github.com/toml-rs/toml",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Yet another format-preserving TOML parser."
},
{
"name": "torch-sys",
"version": "0.14.0",
"authors": "Laurent Mazare <lmazare@gmail.com>",
"repository": "https://github.com/LaurentMazare/tch-rs",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Low-level FFI bindings for the PyTorch C++ api (libtorch)."
},
Rework syncing code, and replace local sync server (#2329) This PR replaces the existing Python-driven sync server with a new one in Rust. The new server supports both collection and media syncing, and is compatible with both the new protocol mentioned below, and older clients. A setting has been added to the preferences screen to point Anki to a local server, and a similar setting is likely to come to AnkiMobile soon. Documentation is available here: <https://docs.ankiweb.net/sync-server.html> In addition to the new server and refactoring, this PR also makes changes to the sync protocol. The existing sync protocol places payloads and metadata inside a multipart POST body, which causes a few headaches: - Legacy clients build the request in a non-deterministic order, meaning the entire request needs to be scanned to extract the metadata. - Reqwest's multipart API directly writes the multipart body, without exposing the resulting stream to us, making it harder to track the progress of the transfer. We've been relying on a patched version of reqwest for timeouts, which is a pain to keep up to date. To address these issues, the metadata is now sent in a HTTP header, with the data payload sent directly in the body. Instead of the slower gzip, we now use zstd. The old timeout handling code has been replaced with a new implementation that wraps the request and response body streams to track progress, allowing us to drop the git dependencies for reqwest, hyper-timeout and tokio-io-timeout. The main other change to the protocol is that one-way syncs no longer need to downgrade the collection to schema 11 prior to sending.
2023-01-18 03:43:46 +01:00
{
"name": "tower",
"version": "0.4.13",
"authors": "Tower Maintainers <team@tower-rs.com>",
"repository": "https://github.com/tower-rs/tower",
"license": "MIT",
"license_file": null,
"description": "Tower is a library of modular and reusable components for building robust clients and servers."
},
{
"name": "tower-http",
"version": "0.4.4",
Rework syncing code, and replace local sync server (#2329) This PR replaces the existing Python-driven sync server with a new one in Rust. The new server supports both collection and media syncing, and is compatible with both the new protocol mentioned below, and older clients. A setting has been added to the preferences screen to point Anki to a local server, and a similar setting is likely to come to AnkiMobile soon. Documentation is available here: <https://docs.ankiweb.net/sync-server.html> In addition to the new server and refactoring, this PR also makes changes to the sync protocol. The existing sync protocol places payloads and metadata inside a multipart POST body, which causes a few headaches: - Legacy clients build the request in a non-deterministic order, meaning the entire request needs to be scanned to extract the metadata. - Reqwest's multipart API directly writes the multipart body, without exposing the resulting stream to us, making it harder to track the progress of the transfer. We've been relying on a patched version of reqwest for timeouts, which is a pain to keep up to date. To address these issues, the metadata is now sent in a HTTP header, with the data payload sent directly in the body. Instead of the slower gzip, we now use zstd. The old timeout handling code has been replaced with a new implementation that wraps the request and response body streams to track progress, allowing us to drop the git dependencies for reqwest, hyper-timeout and tokio-io-timeout. The main other change to the protocol is that one-way syncs no longer need to downgrade the collection to schema 11 prior to sending.
2023-01-18 03:43:46 +01:00
"authors": "Tower Maintainers <team@tower-rs.com>",
"repository": "https://github.com/tower-rs/tower-http",
"license": "MIT",
"license_file": null,
"description": "Tower middleware and utilities for HTTP clients and servers"
},
{
"name": "tower-layer",
"version": "0.3.2",
"authors": "Tower Maintainers <team@tower-rs.com>",
"repository": "https://github.com/tower-rs/tower",
"license": "MIT",
"license_file": null,
"description": "Decorates a `Service` to allow easy composition between `Service`s."
},
{
"name": "tower-service",
2022-09-24 04:39:21 +02:00
"version": "0.3.2",
"authors": "Tower Maintainers <team@tower-rs.com>",
"repository": "https://github.com/tower-rs/tower",
"license": "MIT",
"license_file": null,
"description": "Trait representing an asynchronous, request / response based, client or server."
},
{
"name": "tracing",
2023-10-25 01:28:10 +02:00
"version": "0.1.40",
"authors": "Eliza Weisman <eliza@buoyant.io>|Tokio Contributors <team@tokio.rs>",
"repository": "https://github.com/tokio-rs/tracing",
"license": "MIT",
"license_file": null,
"description": "Application-level tracing for Rust."
},
{
"name": "tracing-appender",
"version": "0.2.3",
"authors": "Zeki Sherif <zekshi@amazon.com>|Tokio Contributors <team@tokio.rs>",
"repository": "https://github.com/tokio-rs/tracing",
"license": "MIT",
"license_file": null,
"description": "Provides utilities for file appenders and making non-blocking writers."
},
{
"name": "tracing-attributes",
2023-10-25 01:28:10 +02:00
"version": "0.1.27",
"authors": "Tokio Contributors <team@tokio.rs>|Eliza Weisman <eliza@buoyant.io>|David Barsky <dbarsky@amazon.com>",
"repository": "https://github.com/tokio-rs/tracing",
"license": "MIT",
"license_file": null,
"description": "Procedural macro attributes for automatically instrumenting functions."
},
{
"name": "tracing-core",
2023-10-25 01:28:10 +02:00
"version": "0.1.32",
"authors": "Tokio Contributors <team@tokio.rs>",
"repository": "https://github.com/tokio-rs/tracing",
"license": "MIT",
"license_file": null,
"description": "Core primitives for application-level tracing."
},
{
"name": "tracing-log",
"version": "0.2.0",
"authors": "Tokio Contributors <team@tokio.rs>",
"repository": "https://github.com/tokio-rs/tracing",
"license": "MIT",
"license_file": null,
"description": "Provides compatibility between `tracing` and the `log` crate."
},
{
"name": "tracing-subscriber",
"version": "0.3.18",
"authors": "Eliza Weisman <eliza@buoyant.io>|David Barsky <me@davidbarsky.com>|Tokio Contributors <team@tokio.rs>",
"repository": "https://github.com/tokio-rs/tracing",
"license": "MIT",
"license_file": null,
"description": "Utilities for implementing and composing `tracing` subscribers."
},
{
"name": "try-lock",
"version": "0.2.4",
"authors": "Sean McArthur <sean@seanmonstar.com>",
"repository": "https://github.com/seanmonstar/try-lock",
"license": "MIT",
"license_file": null,
"description": "A lightweight atomic lock."
},
{
"name": "type-map",
2021-02-03 11:29:48 +01:00
"version": "0.4.0",
"authors": "Jacob Brown <kardeiz@gmail.com>",
"repository": "https://github.com/kardeiz/type-map",
2020-12-15 08:10:25 +01:00
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Provides a typemap container with FxHashMap"
},
{
"name": "typenum",
"version": "1.17.0",
"authors": "Paho Lurie-Gregg <paho@paholg.com>|Andre Bogus <bogusandre@gmail.com>",
"repository": "https://github.com/paholg/typenum",
2020-12-15 08:10:25 +01:00
"license": "Apache-2.0 OR MIT",
"license_file": null,
2021-03-27 05:47:16 +01:00
"description": "Typenum is a Rust library for type-level numbers evaluated at compile time. It currently supports bits, unsigned integers, and signed integers. It also provides a type-level array of type-level numbers, but its implementation is incomplete."
},
{
"name": "unic-char-property",
"version": "0.9.0",
"authors": "The UNIC Project Developers",
"repository": "https://github.com/open-i18n/rust-unic/",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "UNIC — Unicode Character Tools — Character Property taxonomy, contracts and build macros"
},
{
"name": "unic-char-range",
"version": "0.9.0",
"authors": "The UNIC Project Developers",
"repository": "https://github.com/open-i18n/rust-unic/",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "UNIC — Unicode Character Tools — Character Range and Iteration"
},
{
"name": "unic-common",
"version": "0.9.0",
"authors": "The UNIC Project Developers",
"repository": "https://github.com/open-i18n/rust-unic/",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "UNIC — Common Utilities"
},
{
"name": "unic-langid",
"version": "0.9.3",
"authors": "Zibi Braniecki <gandalf@mozilla.com>",
"repository": "https://github.com/zbraniecki/unic-locale",
2020-12-15 08:10:25 +01:00
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "API for managing Unicode Language Identifiers"
},
{
"name": "unic-langid-impl",
"version": "0.9.3",
"authors": "Zibi Braniecki <gandalf@mozilla.com>",
"repository": "https://github.com/zbraniecki/unic-locale",
2020-12-15 08:10:25 +01:00
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "API for managing Unicode Language Identifiers"
},
{
"name": "unic-langid-macros",
"version": "0.9.3",
"authors": "Manish Goregaokar <manishsmail@gmail.com>|Zibi Braniecki <gandalf@mozilla.com>",
"repository": "https://github.com/zbraniecki/unic-locale",
2020-12-15 08:10:25 +01:00
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "API for managing Unicode Language Identifiers"
},
{
"name": "unic-langid-macros-impl",
"version": "0.9.3",
"authors": "Manish Goregaokar <manishsmail@gmail.com>|Zibi Braniecki <gandalf@mozilla.com>",
"repository": "https://github.com/zbraniecki/unic-locale",
2020-12-15 08:10:25 +01:00
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "API for managing Unicode Language Identifiers"
},
{
"name": "unic-ucd-category",
"version": "0.9.0",
"authors": "The UNIC Project Developers",
"repository": "https://github.com/open-i18n/rust-unic/",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "UNIC — Unicode Character Database — General Category"
},
{
"name": "unic-ucd-version",
"version": "0.9.0",
"authors": "The UNIC Project Developers",
"repository": "https://github.com/open-i18n/rust-unic/",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "UNIC — Unicode Character Database — Version"
},
{
"name": "unicase",
"version": "2.6.0",
"authors": "Sean McArthur <sean@seanmonstar.com>",
"repository": "https://github.com/seanmonstar/unicase",
2020-12-15 08:10:25 +01:00
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "A case-insensitive wrapper around strings."
},
{
"name": "unicode-bidi",
"version": "0.3.13",
"authors": "The Servo Project Developers",
"repository": "https://github.com/servo/unicode-bidi",
2020-12-15 08:10:25 +01:00
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Implementation of the Unicode Bidirectional Algorithm"
},
{
2022-09-24 04:39:21 +02:00
"name": "unicode-ident",
"version": "1.0.12",
2022-09-24 04:39:21 +02:00
"authors": "David Tolnay <dtolnay@gmail.com>",
"repository": "https://github.com/dtolnay/unicode-ident",
"license": "(MIT OR Apache-2.0) AND Unicode-DFS-2016",
"license_file": null,
2022-09-24 04:39:21 +02:00
"description": "Determine whether characters have the XID_Start or XID_Continue properties according to Unicode Standard Annex #31"
},
{
2022-09-24 04:39:21 +02:00
"name": "unicode-normalization",
"version": "0.1.22",
"authors": "kwantam <kwantam@gmail.com>|Manish Goregaokar <manishsmail@gmail.com>",
2022-09-24 04:39:21 +02:00
"repository": "https://github.com/unicode-rs/unicode-normalization",
2020-12-15 08:10:25 +01:00
"license": "Apache-2.0 OR MIT",
"license_file": null,
2022-09-24 04:39:21 +02:00
"description": "This crate provides functions for normalization of Unicode strings, including Canonical and Compatible Decomposition and Recomposition, as described in Unicode Standard Annex #15."
},
{
"name": "unicode-segmentation",
"version": "1.10.1",
"authors": "kwantam <kwantam@gmail.com>|Manish Goregaokar <manishsmail@gmail.com>",
"repository": "https://github.com/unicode-rs/unicode-segmentation",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "This crate provides Grapheme Cluster, Word and Sentence boundaries according to Unicode Standard Annex #29 rules."
},
{
"name": "unicode-width",
"version": "0.1.11",
"authors": "kwantam <kwantam@gmail.com>|Manish Goregaokar <manishsmail@gmail.com>",
"repository": "https://github.com/unicode-rs/unicode-width",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Determine displayed width of `char` and `str` types according to Unicode Standard Annex #11 rules."
},
{
"name": "unicode-xid",
"version": "0.2.4",
"authors": "erick.tryzelaar <erick.tryzelaar@gmail.com>|kwantam <kwantam@gmail.com>|Manish Goregaokar <manishsmail@gmail.com>",
"repository": "https://github.com/unicode-rs/unicode-xid",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Determine whether characters have the XID_Start or XID_Continue properties according to Unicode Standard Annex #31."
},
{
"name": "untrusted",
2023-10-25 01:28:10 +02:00
"version": "0.9.0",
"authors": "Brian Smith <brian@briansmith.org>",
"repository": "https://github.com/briansmith/untrusted",
"license": "ISC",
"license_file": null,
"description": "Safe, fast, zero-panic, zero-crashing, zero-allocation parsing of untrusted inputs in Rust."
},
{
"name": "ureq",
"version": "2.9.1",
"authors": "Martin Algesten <martin@algesten.se>|Jacob Hoffman-Andrews <ureq@hoffman-andrews.com>",
"repository": "https://github.com/algesten/ureq",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Simple, safe HTTP client"
},
{
"name": "url",
"version": "2.5.0",
"authors": "The rust-url developers",
"repository": "https://github.com/servo/rust-url",
2020-12-15 08:10:25 +01:00
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "URL library for Rust, based on the WHATWG URL Standard"
},
{
"name": "utf-8",
"version": "0.7.6",
"authors": "Simon Sapin <simon.sapin@exyr.org>",
"repository": "https://github.com/SimonSapin/rust-utf8",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Incremental, zero-copy UTF-8 decoding with error handling"
},
{
"name": "utime",
"version": "0.3.1",
"authors": "Hyeon Kim <simnalamburt@gmail.com>",
"repository": "https://github.com/simnalamburt/utime",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "A missing utime function for Rust."
},
{
"name": "uuid",
"version": "1.6.1",
"authors": "Ashley Mannix<ashleymannix@live.com.au>|Christopher Armstrong|Dylan DPC<dylan.dpc@gmail.com>|Hunar Roop Kahlon<hunar.roop@gmail.com>",
"repository": "https://github.com/uuid-rs/uuid",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "A library to generate and parse UUIDs."
},
{
"name": "valuable",
"version": "0.1.0",
"authors": null,
"repository": "https://github.com/tokio-rs/valuable",
"license": "MIT",
"license_file": null,
"description": "Object-safe value inspection, used to pass un-typed structured data across trait-object boundaries."
},
{
"name": "vcpkg",
2021-06-25 07:35:25 +02:00
"version": "0.2.15",
"authors": "Jim McGrath <jimmc2@gmail.com>",
"repository": "https://github.com/mcgoo/vcpkg-rs",
2020-12-15 08:10:25 +01:00
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "A library to find native dependencies in a vcpkg tree at build time in order to be used in Cargo build scripts."
},
{
"name": "version_check",
2022-01-15 05:59:43 +01:00
"version": "0.9.4",
"authors": "Sergio Benitez <sb@sergio.bz>",
"repository": "https://github.com/SergioBenitez/version_check",
2020-12-15 08:10:25 +01:00
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Tiny crate to check the version of the installed/running rustc."
},
Rework syncing code, and replace local sync server (#2329) This PR replaces the existing Python-driven sync server with a new one in Rust. The new server supports both collection and media syncing, and is compatible with both the new protocol mentioned below, and older clients. A setting has been added to the preferences screen to point Anki to a local server, and a similar setting is likely to come to AnkiMobile soon. Documentation is available here: <https://docs.ankiweb.net/sync-server.html> In addition to the new server and refactoring, this PR also makes changes to the sync protocol. The existing sync protocol places payloads and metadata inside a multipart POST body, which causes a few headaches: - Legacy clients build the request in a non-deterministic order, meaning the entire request needs to be scanned to extract the metadata. - Reqwest's multipart API directly writes the multipart body, without exposing the resulting stream to us, making it harder to track the progress of the transfer. We've been relying on a patched version of reqwest for timeouts, which is a pain to keep up to date. To address these issues, the metadata is now sent in a HTTP header, with the data payload sent directly in the body. Instead of the slower gzip, we now use zstd. The old timeout handling code has been replaced with a new implementation that wraps the request and response body streams to track progress, allowing us to drop the git dependencies for reqwest, hyper-timeout and tokio-io-timeout. The main other change to the protocol is that one-way syncs no longer need to downgrade the collection to schema 11 prior to sending.
2023-01-18 03:43:46 +01:00
{
"name": "waker-fn",
"version": "1.1.1",
Rework syncing code, and replace local sync server (#2329) This PR replaces the existing Python-driven sync server with a new one in Rust. The new server supports both collection and media syncing, and is compatible with both the new protocol mentioned below, and older clients. A setting has been added to the preferences screen to point Anki to a local server, and a similar setting is likely to come to AnkiMobile soon. Documentation is available here: <https://docs.ankiweb.net/sync-server.html> In addition to the new server and refactoring, this PR also makes changes to the sync protocol. The existing sync protocol places payloads and metadata inside a multipart POST body, which causes a few headaches: - Legacy clients build the request in a non-deterministic order, meaning the entire request needs to be scanned to extract the metadata. - Reqwest's multipart API directly writes the multipart body, without exposing the resulting stream to us, making it harder to track the progress of the transfer. We've been relying on a patched version of reqwest for timeouts, which is a pain to keep up to date. To address these issues, the metadata is now sent in a HTTP header, with the data payload sent directly in the body. Instead of the slower gzip, we now use zstd. The old timeout handling code has been replaced with a new implementation that wraps the request and response body streams to track progress, allowing us to drop the git dependencies for reqwest, hyper-timeout and tokio-io-timeout. The main other change to the protocol is that one-way syncs no longer need to downgrade the collection to schema 11 prior to sending.
2023-01-18 03:43:46 +01:00
"authors": "Stjepan Glavina <stjepang@gmail.com>",
"repository": "https://github.com/smol-rs/waker-fn",
Rework syncing code, and replace local sync server (#2329) This PR replaces the existing Python-driven sync server with a new one in Rust. The new server supports both collection and media syncing, and is compatible with both the new protocol mentioned below, and older clients. A setting has been added to the preferences screen to point Anki to a local server, and a similar setting is likely to come to AnkiMobile soon. Documentation is available here: <https://docs.ankiweb.net/sync-server.html> In addition to the new server and refactoring, this PR also makes changes to the sync protocol. The existing sync protocol places payloads and metadata inside a multipart POST body, which causes a few headaches: - Legacy clients build the request in a non-deterministic order, meaning the entire request needs to be scanned to extract the metadata. - Reqwest's multipart API directly writes the multipart body, without exposing the resulting stream to us, making it harder to track the progress of the transfer. We've been relying on a patched version of reqwest for timeouts, which is a pain to keep up to date. To address these issues, the metadata is now sent in a HTTP header, with the data payload sent directly in the body. Instead of the slower gzip, we now use zstd. The old timeout handling code has been replaced with a new implementation that wraps the request and response body streams to track progress, allowing us to drop the git dependencies for reqwest, hyper-timeout and tokio-io-timeout. The main other change to the protocol is that one-way syncs no longer need to downgrade the collection to schema 11 prior to sending.
2023-01-18 03:43:46 +01:00
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Convert closures into wakers"
},
{
"name": "walkdir",
"version": "2.4.0",
"authors": "Andrew Gallant <jamslam@gmail.com>",
"repository": "https://github.com/BurntSushi/walkdir",
"license": "MIT OR Unlicense",
"license_file": null,
"description": "Recursively walk a directory."
},
{
"name": "want",
"version": "0.3.1",
"authors": "Sean McArthur <sean@seanmonstar.com>",
"repository": "https://github.com/seanmonstar/want",
"license": "MIT",
"license_file": null,
"description": "Detect when another Future wants a result."
},
Rework syncing code, and replace local sync server (#2329) This PR replaces the existing Python-driven sync server with a new one in Rust. The new server supports both collection and media syncing, and is compatible with both the new protocol mentioned below, and older clients. A setting has been added to the preferences screen to point Anki to a local server, and a similar setting is likely to come to AnkiMobile soon. Documentation is available here: <https://docs.ankiweb.net/sync-server.html> In addition to the new server and refactoring, this PR also makes changes to the sync protocol. The existing sync protocol places payloads and metadata inside a multipart POST body, which causes a few headaches: - Legacy clients build the request in a non-deterministic order, meaning the entire request needs to be scanned to extract the metadata. - Reqwest's multipart API directly writes the multipart body, without exposing the resulting stream to us, making it harder to track the progress of the transfer. We've been relying on a patched version of reqwest for timeouts, which is a pain to keep up to date. To address these issues, the metadata is now sent in a HTTP header, with the data payload sent directly in the body. Instead of the slower gzip, we now use zstd. The old timeout handling code has been replaced with a new implementation that wraps the request and response body streams to track progress, allowing us to drop the git dependencies for reqwest, hyper-timeout and tokio-io-timeout. The main other change to the protocol is that one-way syncs no longer need to downgrade the collection to schema 11 prior to sending.
2023-01-18 03:43:46 +01:00
{
"name": "wasi",
"version": "0.9.0+wasi-snapshot-preview1",
"authors": "The Cranelift Project Developers",
"repository": "https://github.com/bytecodealliance/wasi",
"license": "Apache-2.0 OR Apache-2.0 WITH LLVM-exception OR MIT",
"license_file": null,
"description": "Experimental WASI API bindings for Rust"
},
{
"name": "wasi",
"version": "0.11.0+wasi-snapshot-preview1",
"authors": "The Cranelift Project Developers",
"repository": "https://github.com/bytecodealliance/wasi",
"license": "Apache-2.0 OR Apache-2.0 WITH LLVM-exception OR MIT",
"license_file": null,
"description": "Experimental WASI API bindings for Rust"
},
{
"name": "wasm-bindgen",
"version": "0.2.89",
"authors": "The wasm-bindgen Developers",
"repository": "https://github.com/rustwasm/wasm-bindgen",
2020-12-15 08:10:25 +01:00
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Easy support for interacting between JS and Rust."
},
{
"name": "wasm-bindgen-backend",
"version": "0.2.89",
"authors": "The wasm-bindgen Developers",
"repository": "https://github.com/rustwasm/wasm-bindgen/tree/master/crates/backend",
2020-12-15 08:10:25 +01:00
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Backend code generation of the wasm-bindgen tool"
},
{
"name": "wasm-bindgen-futures",
"version": "0.4.39",
"authors": "The wasm-bindgen Developers",
"repository": "https://github.com/rustwasm/wasm-bindgen/tree/master/crates/futures",
2020-12-15 08:10:25 +01:00
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Bridging the gap between Rust Futures and JavaScript Promises"
},
{
"name": "wasm-bindgen-macro",
"version": "0.2.89",
"authors": "The wasm-bindgen Developers",
"repository": "https://github.com/rustwasm/wasm-bindgen/tree/master/crates/macro",
2020-12-15 08:10:25 +01:00
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Definition of the `#[wasm_bindgen]` attribute, an internal dependency"
},
{
"name": "wasm-bindgen-macro-support",
"version": "0.2.89",
"authors": "The wasm-bindgen Developers",
"repository": "https://github.com/rustwasm/wasm-bindgen/tree/master/crates/macro-support",
2020-12-15 08:10:25 +01:00
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "The part of the implementation of the `#[wasm_bindgen]` attribute that is not in the shared backend crate"
},
{
"name": "wasm-bindgen-shared",
"version": "0.2.89",
"authors": "The wasm-bindgen Developers",
"repository": "https://github.com/rustwasm/wasm-bindgen/tree/master/crates/shared",
2020-12-15 08:10:25 +01:00
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Shared support between wasm-bindgen and wasm-bindgen cli, an internal dependency."
},
{
"name": "wasm-streams",
2023-08-23 03:41:30 +02:00
"version": "0.3.0",
"authors": "Mattias Buelens <mattias@buelens.com>",
"repository": "https://github.com/MattiasBuelens/wasm-streams/",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Bridging between web streams and Rust streams using WebAssembly"
},
{
"name": "web-sys",
"version": "0.3.64",
"authors": "The wasm-bindgen Developers",
"repository": "https://github.com/rustwasm/wasm-bindgen/tree/master/crates/web-sys",
2020-12-15 08:10:25 +01:00
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Bindings for all Web APIs, a procedurally generated crate from WebIDL"
},
{
"name": "webpki-roots",
"version": "0.25.3",
2023-08-23 03:41:30 +02:00
"authors": null,
Rework syncing code, and replace local sync server (#2329) This PR replaces the existing Python-driven sync server with a new one in Rust. The new server supports both collection and media syncing, and is compatible with both the new protocol mentioned below, and older clients. A setting has been added to the preferences screen to point Anki to a local server, and a similar setting is likely to come to AnkiMobile soon. Documentation is available here: <https://docs.ankiweb.net/sync-server.html> In addition to the new server and refactoring, this PR also makes changes to the sync protocol. The existing sync protocol places payloads and metadata inside a multipart POST body, which causes a few headaches: - Legacy clients build the request in a non-deterministic order, meaning the entire request needs to be scanned to extract the metadata. - Reqwest's multipart API directly writes the multipart body, without exposing the resulting stream to us, making it harder to track the progress of the transfer. We've been relying on a patched version of reqwest for timeouts, which is a pain to keep up to date. To address these issues, the metadata is now sent in a HTTP header, with the data payload sent directly in the body. Instead of the slower gzip, we now use zstd. The old timeout handling code has been replaced with a new implementation that wraps the request and response body streams to track progress, allowing us to drop the git dependencies for reqwest, hyper-timeout and tokio-io-timeout. The main other change to the protocol is that one-way syncs no longer need to downgrade the collection to schema 11 prior to sending.
2023-01-18 03:43:46 +01:00
"repository": "https://github.com/rustls/webpki-roots",
"license": "MPL-2.0",
"license_file": null,
"description": "Mozilla's CA root certificates for use with webpki"
},
{
"name": "weezl",
"version": "0.1.7",
"authors": "HeroicKatora <andreas.molzer@gmx.de>",
"repository": "https://github.com/image-rs/lzw.git",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Fast LZW compression and decompression."
},
{
"name": "wgpu",
"version": "0.18.0",
"authors": "wgpu developers",
"repository": "https://github.com/gfx-rs/wgpu",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Rusty WebGPU API wrapper"
},
{
"name": "wgpu-core",
"version": "0.18.1",
"authors": "wgpu developers",
"repository": "https://github.com/gfx-rs/wgpu",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "WebGPU core logic on wgpu-hal"
},
{
"name": "wgpu-hal",
"version": "0.18.1",
"authors": "wgpu developers",
"repository": "https://github.com/gfx-rs/wgpu",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "WebGPU hardware abstraction layer"
},
{
"name": "wgpu-types",
"version": "0.18.0",
"authors": "wgpu developers",
"repository": "https://github.com/gfx-rs/wgpu",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "WebGPU types"
},
{
"name": "which",
"version": "4.4.2",
"authors": "Harry Fei <tiziyuanfang@gmail.com>",
"repository": "https://github.com/harryfei/which-rs.git",
"license": "MIT",
"license_file": null,
"description": "A Rust equivalent of Unix command \"which\". Locate installed executable in cross platforms."
},
{
"name": "widestring",
"version": "1.0.2",
"authors": null,
"repository": "https://github.com/starkat99/widestring-rs",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "A wide string Rust library for converting to and from wide strings, such as those often used in Windows API or other FFI libaries. Both `u16` and `u32` string types are provided, including support for UTF-16 and UTF-32, malformed encoding, C-style strings, etc."
},
{
"name": "winapi",
"version": "0.3.9",
"authors": "Peter Atashian <retep998@gmail.com>",
"repository": "https://github.com/retep998/winapi-rs",
2020-12-15 08:10:25 +01:00
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Raw FFI bindings for all of Windows API."
},
{
"name": "winapi-i686-pc-windows-gnu",
"version": "0.4.0",
"authors": "Peter Atashian <retep998@gmail.com>",
"repository": "https://github.com/retep998/winapi-rs",
2020-12-15 08:10:25 +01:00
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Import libraries for the i686-pc-windows-gnu target. Please don't use this crate directly, depend on winapi instead."
},
{
"name": "winapi-util",
"version": "0.1.6",
"authors": "Andrew Gallant <jamslam@gmail.com>",
"repository": "https://github.com/BurntSushi/winapi-util",
2020-12-15 08:10:25 +01:00
"license": "MIT OR Unlicense",
"license_file": null,
"description": "A dumping ground for high level safe wrappers over winapi."
},
{
"name": "winapi-x86_64-pc-windows-gnu",
"version": "0.4.0",
"authors": "Peter Atashian <retep998@gmail.com>",
"repository": "https://github.com/retep998/winapi-rs",
2020-12-15 08:10:25 +01:00
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Import libraries for the x86_64-pc-windows-gnu target. Please don't use this crate directly, depend on winapi instead."
},
{
"name": "windows",
"version": "0.51.1",
"authors": "Microsoft",
"repository": "https://github.com/microsoft/windows-rs",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Rust for Windows"
},
2023-09-28 01:55:52 +02:00
{
"name": "windows",
"version": "0.52.0",
2023-09-28 01:55:52 +02:00
"authors": "Microsoft",
"repository": "https://github.com/microsoft/windows-rs",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Rust for Windows"
},
{
"name": "windows-core",
"version": "0.51.1",
"authors": "Microsoft",
"repository": "https://github.com/microsoft/windows-rs",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Rust for Windows"
},
{
"name": "windows-core",
"version": "0.52.0",
"authors": "Microsoft",
"repository": "https://github.com/microsoft/windows-rs",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Rust for Windows"
},
2023-05-29 09:54:00 +02:00
{
"name": "windows-sys",
"version": "0.48.0",
"authors": "Microsoft",
"repository": "https://github.com/microsoft/windows-rs",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Rust for Windows"
},
{
"name": "windows-sys",
"version": "0.52.0",
"authors": "Microsoft",
"repository": "https://github.com/microsoft/windows-rs",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Rust for Windows"
},
{
"name": "windows-targets",
2023-08-23 03:41:30 +02:00
"version": "0.48.5",
"authors": "Microsoft",
"repository": "https://github.com/microsoft/windows-rs",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Import libs for Windows"
},
{
"name": "windows-targets",
"version": "0.52.0",
"authors": "Microsoft",
"repository": "https://github.com/microsoft/windows-rs",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Import libs for Windows"
},
{
"name": "windows_aarch64_gnullvm",
2023-08-23 03:41:30 +02:00
"version": "0.48.5",
"authors": "Microsoft",
"repository": "https://github.com/microsoft/windows-rs",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Import lib for Windows"
},
{
"name": "windows_aarch64_gnullvm",
"version": "0.52.0",
"authors": "Microsoft",
"repository": "https://github.com/microsoft/windows-rs",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Import lib for Windows"
},
{
"name": "windows_aarch64_msvc",
2023-08-23 03:41:30 +02:00
"version": "0.48.5",
"authors": "Microsoft",
"repository": "https://github.com/microsoft/windows-rs",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Import lib for Windows"
},
{
"name": "windows_aarch64_msvc",
"version": "0.52.0",
"authors": "Microsoft",
"repository": "https://github.com/microsoft/windows-rs",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Import lib for Windows"
},
{
"name": "windows_i686_gnu",
2023-08-23 03:41:30 +02:00
"version": "0.48.5",
"authors": "Microsoft",
2022-09-24 04:39:21 +02:00
"repository": "https://github.com/microsoft/windows-rs",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Import lib for Windows"
},
{
"name": "windows_i686_gnu",
"version": "0.52.0",
"authors": "Microsoft",
"repository": "https://github.com/microsoft/windows-rs",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Import lib for Windows"
},
{
"name": "windows_i686_msvc",
2023-08-23 03:41:30 +02:00
"version": "0.48.5",
"authors": "Microsoft",
2022-09-24 04:39:21 +02:00
"repository": "https://github.com/microsoft/windows-rs",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Import lib for Windows"
},
{
"name": "windows_i686_msvc",
"version": "0.52.0",
"authors": "Microsoft",
"repository": "https://github.com/microsoft/windows-rs",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Import lib for Windows"
},
{
"name": "windows_x86_64_gnu",
2023-08-23 03:41:30 +02:00
"version": "0.48.5",
"authors": "Microsoft",
"repository": "https://github.com/microsoft/windows-rs",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Import lib for Windows"
},
{
"name": "windows_x86_64_gnu",
"version": "0.52.0",
"authors": "Microsoft",
"repository": "https://github.com/microsoft/windows-rs",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Import lib for Windows"
},
{
"name": "windows_x86_64_gnullvm",
2023-08-23 03:41:30 +02:00
"version": "0.48.5",
"authors": "Microsoft",
"repository": "https://github.com/microsoft/windows-rs",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Import lib for Windows"
},
{
"name": "windows_x86_64_gnullvm",
"version": "0.52.0",
"authors": "Microsoft",
"repository": "https://github.com/microsoft/windows-rs",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Import lib for Windows"
},
{
"name": "windows_x86_64_msvc",
2023-08-23 03:41:30 +02:00
"version": "0.48.5",
"authors": "Microsoft",
"repository": "https://github.com/microsoft/windows-rs",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Import lib for Windows"
},
{
"name": "windows_x86_64_msvc",
"version": "0.52.0",
"authors": "Microsoft",
"repository": "https://github.com/microsoft/windows-rs",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Import lib for Windows"
},
{
"name": "winnow",
"version": "0.5.25",
"authors": null,
"repository": "https://github.com/winnow-rs/winnow",
"license": "MIT",
"license_file": null,
"description": "A byte-oriented, zero-copy, parser combinators library"
},
{
"name": "winreg",
2023-08-23 03:41:30 +02:00
"version": "0.50.0",
"authors": "Igor Shaula <gentoo90@gmail.com>",
"repository": "https://github.com/gentoo90/winreg-rs",
"license": "MIT",
"license_file": null,
"description": "Rust bindings to MS Windows Registry API"
},
Rework syncing code, and replace local sync server (#2329) This PR replaces the existing Python-driven sync server with a new one in Rust. The new server supports both collection and media syncing, and is compatible with both the new protocol mentioned below, and older clients. A setting has been added to the preferences screen to point Anki to a local server, and a similar setting is likely to come to AnkiMobile soon. Documentation is available here: <https://docs.ankiweb.net/sync-server.html> In addition to the new server and refactoring, this PR also makes changes to the sync protocol. The existing sync protocol places payloads and metadata inside a multipart POST body, which causes a few headaches: - Legacy clients build the request in a non-deterministic order, meaning the entire request needs to be scanned to extract the metadata. - Reqwest's multipart API directly writes the multipart body, without exposing the resulting stream to us, making it harder to track the progress of the transfer. We've been relying on a patched version of reqwest for timeouts, which is a pain to keep up to date. To address these issues, the metadata is now sent in a HTTP header, with the data payload sent directly in the body. Instead of the slower gzip, we now use zstd. The old timeout handling code has been replaced with a new implementation that wraps the request and response body streams to track progress, allowing us to drop the git dependencies for reqwest, hyper-timeout and tokio-io-timeout. The main other change to the protocol is that one-way syncs no longer need to downgrade the collection to schema 11 prior to sending.
2023-01-18 03:43:46 +01:00
{
"name": "wiremock",
"version": "0.5.22",
Rework syncing code, and replace local sync server (#2329) This PR replaces the existing Python-driven sync server with a new one in Rust. The new server supports both collection and media syncing, and is compatible with both the new protocol mentioned below, and older clients. A setting has been added to the preferences screen to point Anki to a local server, and a similar setting is likely to come to AnkiMobile soon. Documentation is available here: <https://docs.ankiweb.net/sync-server.html> In addition to the new server and refactoring, this PR also makes changes to the sync protocol. The existing sync protocol places payloads and metadata inside a multipart POST body, which causes a few headaches: - Legacy clients build the request in a non-deterministic order, meaning the entire request needs to be scanned to extract the metadata. - Reqwest's multipart API directly writes the multipart body, without exposing the resulting stream to us, making it harder to track the progress of the transfer. We've been relying on a patched version of reqwest for timeouts, which is a pain to keep up to date. To address these issues, the metadata is now sent in a HTTP header, with the data payload sent directly in the body. Instead of the slower gzip, we now use zstd. The old timeout handling code has been replaced with a new implementation that wraps the request and response body streams to track progress, allowing us to drop the git dependencies for reqwest, hyper-timeout and tokio-io-timeout. The main other change to the protocol is that one-way syncs no longer need to downgrade the collection to schema 11 prior to sending.
2023-01-18 03:43:46 +01:00
"authors": "Luca Palmieri <rust@lpalmieri.com>",
"repository": "https://github.com/LukeMathWalker/wiremock-rs",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "HTTP mocking to test Rust applications."
},
{
"name": "xml-rs",
"version": "0.8.19",
"authors": "Vladimir Matveev <vmatveev@citrine.cc>",
"repository": "https://github.com/kornelski/xml-rs",
"license": "MIT",
"license_file": null,
"description": "An XML library in pure Rust"
},
{
"name": "yoke",
"version": "0.7.3",
"authors": "Manish Goregaokar <manishsmail@gmail.com>",
"repository": "https://github.com/unicode-org/icu4x",
"license": null,
"license_file": "LICENSE",
"description": "Abstraction allowing borrowed data to be carried along with the backing data it borrows from"
},
{
"name": "yoke-derive",
"version": "0.7.3",
"authors": "Manish Goregaokar <manishsmail@gmail.com>",
"repository": "https://github.com/unicode-org/icu4x",
"license": null,
"license_file": "LICENSE",
"description": "Custom derive for the yoke crate"
},
2023-10-25 01:28:10 +02:00
{
"name": "zerocopy",
2023-12-16 00:48:30 +01:00
"version": "0.7.31",
2023-10-25 01:28:10 +02:00
"authors": "Joshua Liebow-Feeser <joshlf@google.com>",
"repository": "https://github.com/google/zerocopy",
"license": "Apache-2.0 OR BSD-2-Clause OR MIT",
2023-10-25 01:28:10 +02:00
"license_file": null,
"description": "Utilities for zero-copy parsing and serialization"
},
{
"name": "zerocopy-derive",
2023-12-16 00:48:30 +01:00
"version": "0.7.31",
2023-10-25 01:28:10 +02:00
"authors": "Joshua Liebow-Feeser <joshlf@google.com>",
"repository": "https://github.com/google/zerocopy",
"license": "Apache-2.0 OR BSD-2-Clause OR MIT",
2023-10-25 01:28:10 +02:00
"license_file": null,
"description": "Custom derive for traits from the zerocopy crate"
},
{
"name": "zerofrom",
"version": "0.1.3",
"authors": "Manish Goregaokar <manishsmail@gmail.com>",
"repository": "https://github.com/unicode-org/icu4x",
"license": null,
"license_file": "LICENSE",
"description": "ZeroFrom trait for constructing"
},
{
"name": "zerofrom-derive",
"version": "0.1.3",
"authors": "Manish Goregaokar <manishsmail@gmail.com>",
"repository": "https://github.com/unicode-org/icu4x",
"license": null,
"license_file": "LICENSE",
"description": "Custom derive for the zerofrom crate"
},
{
"name": "zip",
"version": "0.6.6",
"authors": "Mathijs van de Nes <git@mathijs.vd-nes.nl>|Marli Frost <marli@frost.red>|Ryan Levick <ryan.levick@gmail.com>",
"repository": "https://github.com/zip-rs/zip.git",
"license": "MIT",
"license_file": null,
"description": "Library to support the reading and writing of zip files."
Backups (#1685) * Add zstd dep * Implement backend backup with zstd * Implement backup thinning * Write backup meta * Use new file ending anki21b * Asynchronously backup on collection close in Rust * Revert "Add zstd dep" This reverts commit 3fcb2141d2be15f907269d13275c41971431385c. * Add zstd again * Take backup col path from col struct * Fix formatting * Implement backup restoring on backend * Normalize restored media file names * Refactor `extract_legacy_data()` A bit cumbersome due to borrowing rules. * Refactor * Make thinning calendar-based and gradual * Consider last kept backups of previous stages * Import full apkgs and colpkgs with backend * Expose new backup settings * Test `BackupThinner` and make it deterministic * Mark backup_path when closing optional * Delete leaky timer * Add progress updates for restoring media * Write restored collection to tempfile first * Do collection compression in the background thread This has us currently storing an uncompressed and compressed copy of the collection in memory (not ideal), but means the collection can be closed without waiting for compression to complete. On a large collection, this takes a close and reopen from about 0.55s to about 0.07s. The old backup code for comparison: about 0.35s for compression off, about 8.5s for zip compression. * Use multithreading in zstd compression On my system, this reduces the compression time of a large collection from about 0.55s to 0.08s. * Stream compressed collection data into zip file * Tweak backup explanation + Fix incorrect tab order for ignore accents option * Decouple restoring backup and full import In the first case, no profile is opened, unless the new collection succeeds to load. In the second case, either the old collection is reloaded or the new one is loaded. * Fix number gap in Progress message * Don't revert backup when media fails but report it * Tweak error flow * Remove native BackupLimits enum * Fix type annotation * Add thinning test for whole year * Satisfy linter * Await async backup to finish * Move restart disclaimer out of backup tab Should be visible regardless of the current tab. * Write restored collection in chunks * Refactor * Write media in chunks and refactor * Log error if removing file fails * join_backup_task -> await_backup_completion * Refactor backup.rs * Refactor backup meta and collection extraction * Fix wrong error being returned * Call sync_all() on new collection * Add ImportError * Store logger in Backend, instead of creating one on demand init_backend() accepts a Logger rather than a log file, to allow other callers to customize the logger if they wish. In the future we may want to explore using the tracing crate as an alternative; it's a bit more ergonomic, as a logger doesn't need to be passed around, and it plays more nicely with async code. * Sync file contents prior to rename; sync folder after rename. * Limit backup creation to once per 30 min * Use zstd::stream::copy_decode * Make importing abortable * Don't revert if backup media is aborted * Set throttle implicitly * Change force flag to minimum_backup_interval * Don't attempt to open folders on Windows * Join last backup thread before starting new one Also refactor. * Disable auto sync and backup when restoring again * Force backup on full download * Include the reason why a media file import failed, and the file path - Introduce a FileIoError that contains a string representation of the underlying I/O error, and an associated path. There are a few places in the code where we're currently manually including the filename in a custom error message, and this is a step towards a more consistent approach (but we may be better served with a more general approach in the future similar to Anyhow's .context()) - Move the error message into importing.ftl, as it's a bit neater when error messages live in the same file as the rest of the messages associated with some functionality. * Fix importing of media files * Minor wording tweaks * Save an allocation I18n strings with replacements are already strings, so we can skip the extra allocation. Not that it matters here at all. * Terminate import if file missing from archive If a third-party tool is creating invalid archives, the user should know about it. This should be rare, so I did not attempt to make it translatable. * Skip multithreaded compression on small collections Co-authored-by: Damien Elmes <gpg@ankiweb.net>
2022-03-07 06:11:31 +01:00
},
{
"name": "zstd",
"version": "0.11.2+zstd.1.5.2",
"authors": "Alexandre Bury <alexandre.bury@gmail.com>",
"repository": "https://github.com/gyscos/zstd-rs",
"license": "MIT",
"license_file": null,
"description": "Binding for the zstd compression library."
},
{
"name": "zstd",
2023-10-25 01:28:10 +02:00
"version": "0.13.0",
"authors": "Alexandre Bury <alexandre.bury@gmail.com>",
"repository": "https://github.com/gyscos/zstd-rs",
"license": "MIT",
"license_file": null,
"description": "Binding for the zstd compression library."
},
{
"name": "zstd-safe",
"version": "5.0.2+zstd.1.5.2",
"authors": "Alexandre Bury <alexandre.bury@gmail.com>",
"repository": "https://github.com/gyscos/zstd-rs",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Safe low-level bindings for the zstd compression library."
},
Backups (#1685) * Add zstd dep * Implement backend backup with zstd * Implement backup thinning * Write backup meta * Use new file ending anki21b * Asynchronously backup on collection close in Rust * Revert "Add zstd dep" This reverts commit 3fcb2141d2be15f907269d13275c41971431385c. * Add zstd again * Take backup col path from col struct * Fix formatting * Implement backup restoring on backend * Normalize restored media file names * Refactor `extract_legacy_data()` A bit cumbersome due to borrowing rules. * Refactor * Make thinning calendar-based and gradual * Consider last kept backups of previous stages * Import full apkgs and colpkgs with backend * Expose new backup settings * Test `BackupThinner` and make it deterministic * Mark backup_path when closing optional * Delete leaky timer * Add progress updates for restoring media * Write restored collection to tempfile first * Do collection compression in the background thread This has us currently storing an uncompressed and compressed copy of the collection in memory (not ideal), but means the collection can be closed without waiting for compression to complete. On a large collection, this takes a close and reopen from about 0.55s to about 0.07s. The old backup code for comparison: about 0.35s for compression off, about 8.5s for zip compression. * Use multithreading in zstd compression On my system, this reduces the compression time of a large collection from about 0.55s to 0.08s. * Stream compressed collection data into zip file * Tweak backup explanation + Fix incorrect tab order for ignore accents option * Decouple restoring backup and full import In the first case, no profile is opened, unless the new collection succeeds to load. In the second case, either the old collection is reloaded or the new one is loaded. * Fix number gap in Progress message * Don't revert backup when media fails but report it * Tweak error flow * Remove native BackupLimits enum * Fix type annotation * Add thinning test for whole year * Satisfy linter * Await async backup to finish * Move restart disclaimer out of backup tab Should be visible regardless of the current tab. * Write restored collection in chunks * Refactor * Write media in chunks and refactor * Log error if removing file fails * join_backup_task -> await_backup_completion * Refactor backup.rs * Refactor backup meta and collection extraction * Fix wrong error being returned * Call sync_all() on new collection * Add ImportError * Store logger in Backend, instead of creating one on demand init_backend() accepts a Logger rather than a log file, to allow other callers to customize the logger if they wish. In the future we may want to explore using the tracing crate as an alternative; it's a bit more ergonomic, as a logger doesn't need to be passed around, and it plays more nicely with async code. * Sync file contents prior to rename; sync folder after rename. * Limit backup creation to once per 30 min * Use zstd::stream::copy_decode * Make importing abortable * Don't revert if backup media is aborted * Set throttle implicitly * Change force flag to minimum_backup_interval * Don't attempt to open folders on Windows * Join last backup thread before starting new one Also refactor. * Disable auto sync and backup when restoring again * Force backup on full download * Include the reason why a media file import failed, and the file path - Introduce a FileIoError that contains a string representation of the underlying I/O error, and an associated path. There are a few places in the code where we're currently manually including the filename in a custom error message, and this is a step towards a more consistent approach (but we may be better served with a more general approach in the future similar to Anyhow's .context()) - Move the error message into importing.ftl, as it's a bit neater when error messages live in the same file as the rest of the messages associated with some functionality. * Fix importing of media files * Minor wording tweaks * Save an allocation I18n strings with replacements are already strings, so we can skip the extra allocation. Not that it matters here at all. * Terminate import if file missing from archive If a third-party tool is creating invalid archives, the user should know about it. This should be rare, so I did not attempt to make it translatable. * Skip multithreaded compression on small collections Co-authored-by: Damien Elmes <gpg@ankiweb.net>
2022-03-07 06:11:31 +01:00
{
"name": "zstd-safe",
2023-10-25 01:28:10 +02:00
"version": "7.0.0",
"authors": "Alexandre Bury <alexandre.bury@gmail.com>",
"repository": "https://github.com/gyscos/zstd-rs",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Safe low-level bindings for the zstd compression library."
},
Backups (#1685) * Add zstd dep * Implement backend backup with zstd * Implement backup thinning * Write backup meta * Use new file ending anki21b * Asynchronously backup on collection close in Rust * Revert "Add zstd dep" This reverts commit 3fcb2141d2be15f907269d13275c41971431385c. * Add zstd again * Take backup col path from col struct * Fix formatting * Implement backup restoring on backend * Normalize restored media file names * Refactor `extract_legacy_data()` A bit cumbersome due to borrowing rules. * Refactor * Make thinning calendar-based and gradual * Consider last kept backups of previous stages * Import full apkgs and colpkgs with backend * Expose new backup settings * Test `BackupThinner` and make it deterministic * Mark backup_path when closing optional * Delete leaky timer * Add progress updates for restoring media * Write restored collection to tempfile first * Do collection compression in the background thread This has us currently storing an uncompressed and compressed copy of the collection in memory (not ideal), but means the collection can be closed without waiting for compression to complete. On a large collection, this takes a close and reopen from about 0.55s to about 0.07s. The old backup code for comparison: about 0.35s for compression off, about 8.5s for zip compression. * Use multithreading in zstd compression On my system, this reduces the compression time of a large collection from about 0.55s to 0.08s. * Stream compressed collection data into zip file * Tweak backup explanation + Fix incorrect tab order for ignore accents option * Decouple restoring backup and full import In the first case, no profile is opened, unless the new collection succeeds to load. In the second case, either the old collection is reloaded or the new one is loaded. * Fix number gap in Progress message * Don't revert backup when media fails but report it * Tweak error flow * Remove native BackupLimits enum * Fix type annotation * Add thinning test for whole year * Satisfy linter * Await async backup to finish * Move restart disclaimer out of backup tab Should be visible regardless of the current tab. * Write restored collection in chunks * Refactor * Write media in chunks and refactor * Log error if removing file fails * join_backup_task -> await_backup_completion * Refactor backup.rs * Refactor backup meta and collection extraction * Fix wrong error being returned * Call sync_all() on new collection * Add ImportError * Store logger in Backend, instead of creating one on demand init_backend() accepts a Logger rather than a log file, to allow other callers to customize the logger if they wish. In the future we may want to explore using the tracing crate as an alternative; it's a bit more ergonomic, as a logger doesn't need to be passed around, and it plays more nicely with async code. * Sync file contents prior to rename; sync folder after rename. * Limit backup creation to once per 30 min * Use zstd::stream::copy_decode * Make importing abortable * Don't revert if backup media is aborted * Set throttle implicitly * Change force flag to minimum_backup_interval * Don't attempt to open folders on Windows * Join last backup thread before starting new one Also refactor. * Disable auto sync and backup when restoring again * Force backup on full download * Include the reason why a media file import failed, and the file path - Introduce a FileIoError that contains a string representation of the underlying I/O error, and an associated path. There are a few places in the code where we're currently manually including the filename in a custom error message, and this is a step towards a more consistent approach (but we may be better served with a more general approach in the future similar to Anyhow's .context()) - Move the error message into importing.ftl, as it's a bit neater when error messages live in the same file as the rest of the messages associated with some functionality. * Fix importing of media files * Minor wording tweaks * Save an allocation I18n strings with replacements are already strings, so we can skip the extra allocation. Not that it matters here at all. * Terminate import if file missing from archive If a third-party tool is creating invalid archives, the user should know about it. This should be rare, so I did not attempt to make it translatable. * Skip multithreaded compression on small collections Co-authored-by: Damien Elmes <gpg@ankiweb.net>
2022-03-07 06:11:31 +01:00
{
"name": "zstd-sys",
2023-10-25 01:28:10 +02:00
"version": "2.0.9+zstd.1.5.5",
Backups (#1685) * Add zstd dep * Implement backend backup with zstd * Implement backup thinning * Write backup meta * Use new file ending anki21b * Asynchronously backup on collection close in Rust * Revert "Add zstd dep" This reverts commit 3fcb2141d2be15f907269d13275c41971431385c. * Add zstd again * Take backup col path from col struct * Fix formatting * Implement backup restoring on backend * Normalize restored media file names * Refactor `extract_legacy_data()` A bit cumbersome due to borrowing rules. * Refactor * Make thinning calendar-based and gradual * Consider last kept backups of previous stages * Import full apkgs and colpkgs with backend * Expose new backup settings * Test `BackupThinner` and make it deterministic * Mark backup_path when closing optional * Delete leaky timer * Add progress updates for restoring media * Write restored collection to tempfile first * Do collection compression in the background thread This has us currently storing an uncompressed and compressed copy of the collection in memory (not ideal), but means the collection can be closed without waiting for compression to complete. On a large collection, this takes a close and reopen from about 0.55s to about 0.07s. The old backup code for comparison: about 0.35s for compression off, about 8.5s for zip compression. * Use multithreading in zstd compression On my system, this reduces the compression time of a large collection from about 0.55s to 0.08s. * Stream compressed collection data into zip file * Tweak backup explanation + Fix incorrect tab order for ignore accents option * Decouple restoring backup and full import In the first case, no profile is opened, unless the new collection succeeds to load. In the second case, either the old collection is reloaded or the new one is loaded. * Fix number gap in Progress message * Don't revert backup when media fails but report it * Tweak error flow * Remove native BackupLimits enum * Fix type annotation * Add thinning test for whole year * Satisfy linter * Await async backup to finish * Move restart disclaimer out of backup tab Should be visible regardless of the current tab. * Write restored collection in chunks * Refactor * Write media in chunks and refactor * Log error if removing file fails * join_backup_task -> await_backup_completion * Refactor backup.rs * Refactor backup meta and collection extraction * Fix wrong error being returned * Call sync_all() on new collection * Add ImportError * Store logger in Backend, instead of creating one on demand init_backend() accepts a Logger rather than a log file, to allow other callers to customize the logger if they wish. In the future we may want to explore using the tracing crate as an alternative; it's a bit more ergonomic, as a logger doesn't need to be passed around, and it plays more nicely with async code. * Sync file contents prior to rename; sync folder after rename. * Limit backup creation to once per 30 min * Use zstd::stream::copy_decode * Make importing abortable * Don't revert if backup media is aborted * Set throttle implicitly * Change force flag to minimum_backup_interval * Don't attempt to open folders on Windows * Join last backup thread before starting new one Also refactor. * Disable auto sync and backup when restoring again * Force backup on full download * Include the reason why a media file import failed, and the file path - Introduce a FileIoError that contains a string representation of the underlying I/O error, and an associated path. There are a few places in the code where we're currently manually including the filename in a custom error message, and this is a step towards a more consistent approach (but we may be better served with a more general approach in the future similar to Anyhow's .context()) - Move the error message into importing.ftl, as it's a bit neater when error messages live in the same file as the rest of the messages associated with some functionality. * Fix importing of media files * Minor wording tweaks * Save an allocation I18n strings with replacements are already strings, so we can skip the extra allocation. Not that it matters here at all. * Terminate import if file missing from archive If a third-party tool is creating invalid archives, the user should know about it. This should be rare, so I did not attempt to make it translatable. * Skip multithreaded compression on small collections Co-authored-by: Damien Elmes <gpg@ankiweb.net>
2022-03-07 06:11:31 +01:00
"authors": "Alexandre Bury <alexandre.bury@gmail.com>",
"repository": "https://github.com/gyscos/zstd-rs",
"license": "Apache-2.0 OR MIT",
"license_file": null,
"description": "Low-level bindings for the zstd compression library."
},
{
"name": "zune-inflate",
"version": "0.2.54",
"authors": null,
"repository": null,
"license": "Apache-2.0 OR MIT OR Zlib",
"license_file": null,
"description": "A heavily optimized deflate decompressor in Pure Rust"
}
]