42cbe42f06
* 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
104 lines
2.6 KiB
TOML
104 lines
2.6 KiB
TOML
[package]
|
|
name = "anki"
|
|
version = "0.0.0"
|
|
edition = "2021"
|
|
authors = ["Ankitects Pty Ltd and contributors"]
|
|
license = "AGPL-3.0-or-later"
|
|
description = "Anki's Rust library code"
|
|
build = "build/main.rs"
|
|
|
|
[lib]
|
|
name = "anki"
|
|
path = "src/lib.rs"
|
|
|
|
[features]
|
|
bench = ["criterion"]
|
|
|
|
[[bench]]
|
|
name = "benchmark"
|
|
harness = false
|
|
required-features = ["bench"]
|
|
|
|
# After updating anything below, run ../cargo/update.py
|
|
|
|
[build-dependencies]
|
|
prost-build = "0.9.0"
|
|
|
|
[dev-dependencies]
|
|
env_logger = "0.9.0"
|
|
tokio = { version = "1.17", features = ["macros"] }
|
|
|
|
[dependencies]
|
|
# pinned as any changes could invalidate sqlite indexes
|
|
unicase = "=2.6.0"
|
|
|
|
tokio = { version = "1.17", features = ["fs", "rt-multi-thread"] }
|
|
|
|
anki_i18n = { path="i18n" }
|
|
|
|
criterion = { version = "0.3.5", optional = true }
|
|
|
|
nom = "7.0.0"
|
|
proc-macro-nested = "0.1.7"
|
|
slog-term = "2.8.0"
|
|
blake3 = "1.0.0"
|
|
bytes = "1.1.0"
|
|
chrono = "0.4.19"
|
|
coarsetime = "0.1.19"
|
|
flate2 = "1.0.22"
|
|
fluent = "0.16.0"
|
|
fluent-bundle = "0.15.1"
|
|
futures = "0.3.17"
|
|
hex = "0.4.3"
|
|
htmlescape = "0.3.1"
|
|
intl-memoizer = "0.5.1"
|
|
itertools = "0.10.1"
|
|
lazy_static = "1.4.0"
|
|
num_enum = "0.5.4"
|
|
num-integer = "0.1.44"
|
|
once_cell = "1.8.0"
|
|
pin-project = "1.0.8"
|
|
prost = "0.9.0"
|
|
rand = "0.8.4"
|
|
regex = "1.5.4"
|
|
reqwest = { git="https://github.com/ankitects/reqwest.git", rev="7591444614de02b658ddab125efba7b2bb4e2335", default-features=false, features=[
|
|
"json",
|
|
"socks",
|
|
"stream",
|
|
"multipart",
|
|
# the Bazel build scripts separate these out by platform
|
|
"native-tls",
|
|
"rustls-tls",
|
|
"rustls-tls-webpki-roots",
|
|
"rustls-tls-native-roots",
|
|
] }
|
|
rusqlite = { version = "0.26.1", features = ["trace", "functions", "collation", "bundled"] }
|
|
scopeguard = "1.1.0"
|
|
serde = "1.0.130"
|
|
serde_derive = "1.0.130"
|
|
serde_json = "1.0.68"
|
|
serde_repr = "0.1.7"
|
|
serde_tuple = "0.5.0"
|
|
serde-aux = "3.0.1"
|
|
sha1 = "0.6.0"
|
|
slog = { version = "2.7.0", features = ["max_level_trace", "release_max_level_debug"] }
|
|
slog-async = "2.7.0"
|
|
slog-envlogger = "2.2.0"
|
|
tempfile = "3.2.0"
|
|
unic-langid = { version = "0.9.0", features = ["macros"] }
|
|
unicode-normalization = "0.1.19"
|
|
utime = "0.3.1"
|
|
zip = { version = "0.5.13", default-features = false, features = ["deflate", "time"] }
|
|
async-trait = "0.1.51"
|
|
ammonia = "3.1.2"
|
|
pulldown-cmark = "0.8.0"
|
|
fnv = "1.0.7"
|
|
strum = { version = "0.23.0", features = ["derive"] }
|
|
tokio-util = { version = "0.6.8", features = ["io"] }
|
|
pct-str = { git="https://github.com/timothee-haudebourg/pct-str.git", rev="4adccd8d4a222ab2672350a102f06ae832a0572d" }
|
|
unic-ucd-category = "0.9.0"
|
|
id_tree = "1.8.0"
|
|
zstd = { version="0.10.0", features=["zstdmt"] }
|
|
num_cpus = "1.13.1"
|
|
csv = "1.1.6"
|