fix(passes): 防止过境进度计算时除零崩溃
根因: PassesViewModel.updateProgress() 计算进度时用 deltaNow / deltaTotal, 如果 TLE 损坏、轨道退化、或数据解析错误导致 losTime <= aosTime, deltaTotal 为 0 或负数,除法触发 ArithmeticException 或产生 Infinity。 触发条件: 1. OMM/CSV 历元解析 bug(已在另一 commit 修复)导致时间错乱 2. 深空卫星 TLE 过期几十年,losTime 计算失败回退到 aosTime 3. 手动导入格式错误的 TLE 修复: 在除法前检查 deltaTotal <= 0f,跳过该过境的进度更新。 用户仍能看到过境列表,但异常过境不显示进度条(优雅降级)。 影响: 避免因单个异常 TLE 导致整个过境列表页面崩溃。
This commit is contained in:
1 parent
29ca4c29bb
commit
9cfa238e5c
1 file changed
+5
@@ -221,6 +221,11 @@ class PassesViewModel(
|
||||
if (!pass.isDeepSpace && time > pass.aosTime) {
|
||||
val deltaNow = time.minus(pass.aosTime).toFloat()
|
||||
val deltaTotal = pass.losTime.minus(pass.aosTime).toFloat()
|
||||
// Guard against division by zero (corrupted TLE, degenerate orbit, etc.)
|
||||
if (deltaTotal <= 0f) {
|
||||
// Skip passes with zero or negative duration
|
||||
continue
|
||||
}
|
||||
val newProgress = (deltaNow / deltaTotal).round(2)
|
||||
if (newProgress >= 1.0f) continue
|
||||
if (newProgress != pass.progress) {
|
||||
|
||||
Reference in new issue
Block a user