mirror of
https://github.com/atsunatsu/Look4Sat.git
synced 2026-10-08 21:47:23 +00:00
fix(lotw): 空呼号记录按证书上传并回填,呼号冲突可选改写或换证书
证书装好之前记录的 QSO 自己呼号存空,签名时被判 CALLSIGN_MISMATCH,整批上传失败。 现在这类记录改用当前证书呼号签名,不再拒签:预览提示「其中 N 条记录没有呼号,将按证书 XXX 上传」,上传成功后仅把这些记录的空呼号回填为证书呼号(只填空值,经 save() 写入以 保持去重键一致,不动时间/频率/模式/对方呼号/上传状态与确认状态)。 自己呼号非空且与证书不同的记录仍拒签(不冒签他人记录),但预览给出两个选择: 「改写为 XXX」把冲突记录的自己呼号改成当前证书呼号后即可重传;「换一张证书」在设置页 关掉日志本并打开 LoTW 配置导入另一张证书(雷达页提示去设置页导入)。 新增单测:空呼号签名与计数、冲突记录 id、markUploaded 只填空值、rewriteMyCallsign 只改 冲突记录;并修正测试夹具 MemStorage.read 返回共享数组(被调用方 fill(0) 后破坏已存证书, 与文件存储行为不一致)导致的问题。
This commit is contained in:
14 files changed
+289
-17
No files matched your search
+8
-1
@@ -22,7 +22,14 @@ interface IQsoRepository {
|
||||
* signed with (1–4 gridsquares: inside a grid / on a line / on a corner), so the
|
||||
* logbook row can show which grids the QSO went out under.
|
||||
*/
|
||||
suspend fun markUploaded(ids: List<Long>, grids: List<String> = emptyList())
|
||||
suspend fun markUploaded(ids: List<Long>, grids: List<String> = emptyList(), certificateCallsign: String = "")
|
||||
|
||||
/**
|
||||
* Rewrites the operator's callsign on the given records. This is the answer to "these contacts
|
||||
* were logged under another certificate — upload them under the one installed now". Returns the
|
||||
* number of records that changed.
|
||||
*/
|
||||
suspend fun rewriteMyCallsign(ids: List<Long>, callsign: String): Int
|
||||
|
||||
/**
|
||||
* Marks the batch as uploaded to Wavelog (independent of the LoTW upload state) and
|
||||
|
||||
+7
-1
@@ -107,7 +107,13 @@ data class LoTWUploadPreview(
|
||||
val grids: List<String> = emptyList(),
|
||||
/** True when this batch is a resubmit: already-uploaded/confirmed records were allowed
|
||||
* through so the corrected station location reaches LoTW as an update of the contact. */
|
||||
val resubmit: Boolean = false
|
||||
val resubmit: Boolean = false,
|
||||
/** Records in this batch whose own callsign is blank (logged before a certificate was
|
||||
* installed). They are signed with [callsign]; a successful upload writes it into them. */
|
||||
val missingCallsign: Int = 0,
|
||||
/** Records refused because they name a different own callsign than [callsign]. The upload
|
||||
* flow offers either rewriting them with [callsign] or using the other certificate. */
|
||||
val callsignConflicts: List<Long> = emptyList()
|
||||
)
|
||||
|
||||
/** Pre-upload location check: the freshest known position grid is not covered by the
|
||||
|
||||
Reference in new issue
Block a user