From 9cfa238e5c078193820010648d033eeb1db4f7f9 Mon Sep 17 00:00:00 2001 From: QIU Date: Fri, 14 Aug 2026 11:22:54 +0000 Subject: [PATCH] =?UTF-8?q?fix(passes):=20=E9=98=B2=E6=AD=A2=E8=BF=87?= =?UTF-8?q?=E5=A2=83=E8=BF=9B=E5=BA=A6=E8=AE=A1=E7=AE=97=E6=97=B6=E9=99=A4?= =?UTF-8?q?=E9=9B=B6=E5=B4=A9=E6=BA=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 根因: 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 导致整个过境列表页面崩溃。 --- .../com/rtbishop/look4sat/feature/passes/PassesViewModel.kt | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/feature/passes/src/main/java/com/rtbishop/look4sat/feature/passes/PassesViewModel.kt b/feature/passes/src/main/java/com/rtbishop/look4sat/feature/passes/PassesViewModel.kt index 5bad711e..a4ab8977 100644 --- a/feature/passes/src/main/java/com/rtbishop/look4sat/feature/passes/PassesViewModel.kt +++ b/feature/passes/src/main/java/com/rtbishop/look4sat/feature/passes/PassesViewModel.kt @@ -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) {