[feat](trx-rs): add GetSatPasses protocol command for server-side TLE management

TLE refresh now happens only on trx-server (once at startup, then every
24h). Client fetches satellite predictions from server via new
GetSatPasses fast-path command and caches them locally, refreshing
every 5 minutes. Removes spawn_tle_refresh_task from trx-client.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Signed-off-by: Stan Grams <sjg@haxx.space>
This commit is contained in:
2026-03-28 15:38:39 +01:00
parent e831dff85d
commit 2f7adf05c8
10 changed files with 167 additions and 37 deletions
@@ -107,6 +107,7 @@ async fn handle_client(
rig_id: None,
state: None,
rigs: None,
sat_passes: None,
error: Some(format!("Invalid JSON: {}", e)),
};
send_response(&mut writer, &resp).await?;
@@ -120,6 +121,7 @@ async fn handle_client(
rig_id: None,
state: None,
rigs: None,
sat_passes: None,
error: Some(err),
};
send_response(&mut writer, &resp).await?;
@@ -138,6 +140,7 @@ async fn handle_client(
rig_id: Some("client".to_string()),
state: None,
rigs: Some(snapshot_remote_rigs(context.as_ref())),
sat_passes: None,
error: None,
};
send_response(&mut writer, &resp).await?;
@@ -168,6 +171,7 @@ async fn handle_client(
rig_id: active_rig_id.clone(),
state: None,
rigs: None,
sat_passes: None,
error: Some("Internal error: rig task not available".into()),
};
send_response(&mut writer, &resp).await?;
@@ -179,6 +183,7 @@ async fn handle_client(
rig_id: active_rig_id.clone(),
state: None,
rigs: None,
sat_passes: None,
error: Some("Internal error: request queue timeout".into()),
};
send_response(&mut writer, &resp).await?;
@@ -193,6 +198,7 @@ async fn handle_client(
rig_id: active_rig_id.clone(),
state: Some(snapshot),
rigs: None,
sat_passes: None,
error: None,
};
send_response(&mut writer, &resp).await?;
@@ -203,6 +209,7 @@ async fn handle_client(
rig_id: active_rig_id.clone(),
state: None,
rigs: None,
sat_passes: None,
error: Some(err.message),
};
send_response(&mut writer, &resp).await?;
@@ -214,6 +221,7 @@ async fn handle_client(
rig_id: active_rig_id.clone(),
state: None,
rigs: None,
sat_passes: None,
error: Some("Internal error waiting for rig response".into()),
};
send_response(&mut writer, &resp).await?;
@@ -224,6 +232,7 @@ async fn handle_client(
rig_id: active_rig_id.clone(),
state: None,
rigs: None,
sat_passes: None,
error: Some("Request timed out waiting for rig response".into()),
};
send_response(&mut writer, &resp).await?;