mirror of
https://github.com/Cockatrice/Cockatrice.git
synced 2026-11-07 18:43:26 -08:00
Sync keyed local files to server rows by path, but the server names a row
after the deck, not after the file, so any deck whose file name and deck name
differ uploaded again on every run. A second pass then brought the server copy
back as an extra local file.
- Match by the sidecar's row id, then guid, then content, and only then by the
server path, so renaming either side no longer duplicates a deck.
- Key the server tree by row id: the server allows several rows with the same
name in one folder, and keying by path silently dropped all but one.
- Stop discarding rows whose name contains '/' ("U/W Control"). They stay
matchable, and only the download file name is sanitised.
- Build the download path from the folder plus a sanitised row name, including
every folder segment, so a hostile server name cannot escape the deck folder.
- Download a colliding server row under a unique name and count it, instead of
skipping it without a trace.
- Hash the whole deck instead of the card hash: SHA-1 over the native deck
string covers name, printings, banner, tokens and sideboard plans. The client
and the server hash the exact bytes they exchange, so both agree.
Adds deck_content_hash_test for the client/server hashing invariant and for the
name-only change the card hash cannot see.
|
||
|---|---|---|
| .. | ||
| card_zone_algorithms | ||
| carddatabase | ||
| deck_list_model | ||
| deck_list_zones | ||
| loading_from_clipboard | ||
| movecard_tests | ||
| oracle | ||
| picture_loader_benchmark | ||
| settings | ||
| theme_migration | ||
| card_update_progress_test.cpp | ||
| clamped_arithmetic_test.cpp | ||
| CMakeLists.txt | ||
| deck_content_hash_test.cpp | ||
| deck_diff_test.cpp | ||
| deck_hash_performance_test.cpp | ||
| deck_sync_profile_test.cpp | ||
| deck_sync_sidecar_test.cpp | ||
| dummy_test.cpp | ||
| expression_test.cpp | ||
| lag_monitor_test.cpp | ||
| latency_tracker_test.cpp | ||
| loader_local_matching_test.cpp | ||
| metrics_registry_test.cpp | ||
| password_hash_test.cpp | ||
| playmat_resolver_test.cpp | ||
| report_categories_test.cpp | ||
| server_card_counter_test.cpp | ||
| server_counter_test.cpp | ||
| server_developer_role_test.cpp | ||
| server_game_join_test.cpp | ||
| server_rate_limiter_test.cpp | ||
| single_instance_manager_test.cpp | ||
| test_age_formatting.cpp | ||
| translation_loader_test.cpp | ||
| translation_loader_test.ts | ||
| warning_categories_test.cpp | ||