fix: support sort mode, show mode in api_compat (#7952)

* refactor: add api-compat for sort-mode

* refactor: add api-compat for show-mode

* test: update tests

* chore: make clang-tidy happy
This commit is contained in:
Charles Kerr
2025-12-18 14:02:16 -06:00
committed by GitHub
parent c197812b45
commit 0d036de3e5
4 changed files with 103 additions and 8 deletions

View File

@@ -245,7 +245,7 @@ auto constexpr RpcKeys = std::array<ApiKey, 212U>{ {
{ TR_KEY_torrent_verify, TR_KEY_torrent_verify_kebab },
} };
auto constexpr SessionKeys = std::array<ApiKey, 139U>{ {
auto constexpr SessionKeys = std::array<ApiKey, 157U>{ {
{ TR_KEY_activity_date, TR_KEY_activity_date_kebab_APICOMPAT },
{ TR_KEY_added_date, TR_KEY_added_date_kebab_APICOMPAT },
{ TR_KEY_alt_speed_down, TR_KEY_alt_speed_down_kebab },
@@ -349,15 +349,33 @@ auto constexpr SessionKeys = std::array<ApiKey, 139U>{ {
{ TR_KEY_seed_queue_size, TR_KEY_seed_queue_size_kebab },
{ TR_KEY_seeding_time_seconds, TR_KEY_seeding_time_seconds_kebab_APICOMPAT },
{ TR_KEY_session_count, TR_KEY_session_count_kebab_APICOMPAT },
{ TR_KEY_show_active, TR_KEY_show_active_kebab_APICOMPAT },
{ TR_KEY_show_all, TR_KEY_show_all_kebab_APICOMPAT },
{ TR_KEY_show_backup_trackers, TR_KEY_show_backup_trackers_kebab },
{ TR_KEY_show_downloading, TR_KEY_show_downloading_kebab_APICOMPAT },
{ TR_KEY_show_error, TR_KEY_show_error_kebab_APICOMPAT },
{ TR_KEY_show_extra_peer_details, TR_KEY_show_extra_peer_details_kebab },
{ TR_KEY_show_filterbar, TR_KEY_show_filterbar_kebab },
{ TR_KEY_show_finished, TR_KEY_show_finished_kebab_APICOMPAT },
{ TR_KEY_show_notification_area_icon, TR_KEY_show_notification_area_icon_kebab },
{ TR_KEY_show_options_window, TR_KEY_show_options_window_kebab },
{ TR_KEY_show_paused, TR_KEY_show_paused_kebab_APICOMPAT },
{ TR_KEY_show_seeding, TR_KEY_show_seeding_kebab_APICOMPAT },
{ TR_KEY_show_statusbar, TR_KEY_show_statusbar_kebab },
{ TR_KEY_show_toolbar, TR_KEY_show_toolbar_kebab },
{ TR_KEY_show_tracker_scrapes, TR_KEY_show_tracker_scrapes_kebab },
{ TR_KEY_show_verifying, TR_KEY_show_verifying_kebab_APICOMPAT },
{ TR_KEY_sleep_per_seconds_during_verify, TR_KEY_sleep_per_seconds_during_verify_kebab },
{ TR_KEY_sort_by_activity, TR_KEY_sort_by_activity_kebab_APICOMPAT },
{ TR_KEY_sort_by_age, TR_KEY_sort_by_age_kebab_APICOMPAT },
{ TR_KEY_sort_by_eta, TR_KEY_sort_by_eta_kebab_APICOMPAT },
{ TR_KEY_sort_by_id, TR_KEY_sort_by_id_kebab_APICOMPAT },
{ TR_KEY_sort_by_name, TR_KEY_sort_by_name_kebab_APICOMPAT },
{ TR_KEY_sort_by_progress, TR_KEY_sort_by_progress_kebab_APICOMPAT },
{ TR_KEY_sort_by_queue, TR_KEY_sort_by_queue_kebab_APICOMPAT },
{ TR_KEY_sort_by_ratio, TR_KEY_sort_by_ratio_kebab_APICOMPAT },
{ TR_KEY_sort_by_size, TR_KEY_sort_by_size_kebab_APICOMPAT },
{ TR_KEY_sort_by_state, TR_KEY_sort_by_state_kebab_APICOMPAT },
{ TR_KEY_sort_mode, TR_KEY_sort_mode_kebab },
{ TR_KEY_sort_reversed, TR_KEY_sort_reversed_kebab },
{ TR_KEY_speed_Bps, TR_KEY_speed_Bps_kebab_APICOMPAT },
@@ -572,14 +590,19 @@ struct CloneState
{
auto const pop = state_.convert_strings;
auto new_key = convert_key(key, state_.style, state_.is_rpc);
auto const special =
(state_.is_rpc &&
(new_key == TR_KEY_method || new_key == TR_KEY_fields || new_key == TR_KEY_ids ||
new_key == TR_KEY_torrents));
auto const special_rpc = state_.is_rpc &&
(new_key == TR_KEY_method || new_key == TR_KEY_fields || new_key == TR_KEY_ids ||
new_key == TR_KEY_torrents);
// TODO(ckerr): replace `new_key == TR_KEY_TORRENTS` on previous line with logic to turn on convert
// if it's an array inside an array val whose key was `torrents`.
// This is for the edge case of table mode: `torrents : [ [ 'key1', 'key2' ], [ ... ] ]`
state_.convert_strings |= special;
state_.convert_strings |= special_rpc;
auto const special_settings = !state_.is_rpc &&
(new_key == TR_KEY_sort_mode || key == TR_KEY_sort_mode || new_key == TR_KEY_filter_mode ||
key == TR_KEY_filter_mode);
state_.convert_strings |= special_settings;
// Crazy case: total_size in free-space, totalSize in torrent-get
if (state_.is_free_space_response && new_key == TR_KEY_total_size_camel)

View File

@@ -568,22 +568,38 @@ auto constexpr MyStatic = std::array<std::string_view, TR_N_KEYS>{
"session_id"sv, // rpc
"session_set"sv, // rpc
"session_stats"sv, // rpc
"show-active",
"show-all",
"show-backup-trackers"sv, // gtk app, qt app
"show-downloading",
"show-error",
"show-extra-peer-details"sv, // gtk app
"show-filterbar"sv, // gtk app, qt app
"show-finished",
"show-notification-area-icon"sv, // gtk app, qt app
"show-options-window"sv, // gtk app, qt app
"show-paused",
"show-seeding",
"show-statusbar"sv, // gtk app, qt app
"show-toolbar"sv, // gtk app, qt app
"show-tracker-scrapes"sv, // gtk app, qt app
"show-verifying",
"show_active",
"show_all",
"show_backup_trackers"sv, // gtk app, qt app
"show_downloading",
"show_error",
"show_extra_peer_details"sv, // gtk app
"show_filterbar"sv, // gtk app, qt app
"show_finished",
"show_notification_area_icon"sv, // gtk app, qt app
"show_options_window"sv, // gtk app, qt app
"show_paused",
"show_seeding",
"show_statusbar"sv, // gtk app, qt app
"show_toolbar"sv, // gtk app, qt app
"show_tracker_scrapes"sv, // gtk app, qt app
"show_verifying",
"sitename"sv, // rpc
"size-bytes"sv, // rpc
"size-units"sv, // rpc
@@ -594,8 +610,28 @@ auto constexpr MyStatic = std::array<std::string_view, TR_N_KEYS>{
"sleep-per-seconds-during-verify"sv, // tr_session::Settings
"sleep_per_seconds_during_verify"sv, // tr_session::Settings
"socket_address"sv, // .resume
"sort-by-activity", // gtk app, qt app
"sort-by-age", // gtk app, qt app
"sort-by-eta", // gtk app, qt app
"sort-by-id", // gtk app, qt app
"sort-by-name", // gtk app, qt app
"sort-by-progress", // gtk app, qt app
"sort-by-queue", // gtk app, qt app
"sort-by-ratio", // gtk app, qt app
"sort-by-size", // gtk app, qt app
"sort-by-state", // gtk app, qt app
"sort-mode"sv, // gtk app, qt app
"sort-reversed"sv, // gtk app, qt app
"sort_by_activity", // gtk app, qt app
"sort_by_age", // gtk app, qt app
"sort_by_eta", // gtk app, qt app
"sort_by_id", // gtk app, qt app
"sort_by_name", // gtk app, qt app
"sort_by_progress", // gtk app, qt app
"sort_by_queue", // gtk app, qt app
"sort_by_ratio", // gtk app, qt app
"sort_by_size", // gtk app, qt app
"sort_by_state", // gtk app, qt app
"sort_mode"sv, // gtk app, qt app
"sort_reversed"sv, // gtk app, qt app
"source"sv, // .torrent

View File

@@ -581,22 +581,38 @@ enum // NOLINT(performance-enum-size)
TR_KEY_session_id,
TR_KEY_session_set,
TR_KEY_session_stats,
TR_KEY_show_active_kebab_APICOMPAT,
TR_KEY_show_all_kebab_APICOMPAT,
TR_KEY_show_backup_trackers_kebab,
TR_KEY_show_downloading_kebab_APICOMPAT,
TR_KEY_show_error_kebab_APICOMPAT,
TR_KEY_show_extra_peer_details_kebab,
TR_KEY_show_filterbar_kebab,
TR_KEY_show_finished_kebab_APICOMPAT,
TR_KEY_show_notification_area_icon_kebab,
TR_KEY_show_options_window_kebab,
TR_KEY_show_paused_kebab_APICOMPAT,
TR_KEY_show_seeding_kebab_APICOMPAT,
TR_KEY_show_statusbar_kebab,
TR_KEY_show_toolbar_kebab,
TR_KEY_show_tracker_scrapes_kebab,
TR_KEY_show_verifying_kebab_APICOMPAT,
TR_KEY_show_active,
TR_KEY_show_all,
TR_KEY_show_backup_trackers,
TR_KEY_show_downloading,
TR_KEY_show_error,
TR_KEY_show_extra_peer_details,
TR_KEY_show_filterbar,
TR_KEY_show_finished,
TR_KEY_show_notification_area_icon,
TR_KEY_show_options_window,
TR_KEY_show_paused,
TR_KEY_show_seeding,
TR_KEY_show_statusbar,
TR_KEY_show_toolbar,
TR_KEY_show_tracker_scrapes,
TR_KEY_show_verifying,
TR_KEY_sitename,
TR_KEY_size_bytes_kebab,
TR_KEY_size_units_kebab,
@@ -607,8 +623,28 @@ enum // NOLINT(performance-enum-size)
TR_KEY_sleep_per_seconds_during_verify_kebab,
TR_KEY_sleep_per_seconds_during_verify,
TR_KEY_socket_address,
TR_KEY_sort_by_activity_kebab_APICOMPAT,
TR_KEY_sort_by_age_kebab_APICOMPAT,
TR_KEY_sort_by_eta_kebab_APICOMPAT,
TR_KEY_sort_by_id_kebab_APICOMPAT,
TR_KEY_sort_by_name_kebab_APICOMPAT,
TR_KEY_sort_by_progress_kebab_APICOMPAT,
TR_KEY_sort_by_queue_kebab_APICOMPAT,
TR_KEY_sort_by_ratio_kebab_APICOMPAT,
TR_KEY_sort_by_size_kebab_APICOMPAT,
TR_KEY_sort_by_state_kebab_APICOMPAT,
TR_KEY_sort_mode_kebab,
TR_KEY_sort_reversed_kebab,
TR_KEY_sort_by_activity,
TR_KEY_sort_by_age,
TR_KEY_sort_by_eta,
TR_KEY_sort_by_id,
TR_KEY_sort_by_name,
TR_KEY_sort_by_progress,
TR_KEY_sort_by_queue,
TR_KEY_sort_by_ratio,
TR_KEY_sort_by_size,
TR_KEY_sort_by_state,
TR_KEY_sort_mode,
TR_KEY_sort_reversed,
TR_KEY_source,

View File

@@ -459,7 +459,7 @@ constexpr std::string_view CurrentSettingsJson = R"json({
"download_queue_enabled": true,
"download_queue_size": 5,
"encryption": 1,
"filter_mode": "show-all",
"filter_mode": "show_all",
"filter_trackers": "",
"idle_seeding_limit": 30,
"idle_seeding_limit_enabled": false,
@@ -516,7 +516,7 @@ constexpr std::string_view CurrentSettingsJson = R"json({
"show_toolbar": true,
"show_tracker_scrapes": false,
"sleep_per_seconds_during_verify": 100,
"sort_mode": "sort-by-name",
"sort_mode": "sort_by_name",
"sort_reversed": false,
"speed_limit_down": 100,
"speed_limit_down_enabled": false,