fix(checkin): 设备已签到文案按 ALREADY 标记;INTL 无活动当日不再重试
Some checks are pending
Release / build (push) Waiting to run
Some checks are pending
Release / build (push) Waiting to run
This commit is contained in:
parent
1a0bb2b3fd
commit
d9c858d81b
@ -16,8 +16,8 @@ android {
|
|||||||
applicationId = "com.rainy.token"
|
applicationId = "com.rainy.token"
|
||||||
minSdk = 31
|
minSdk = 31
|
||||||
targetSdk = 35
|
targetSdk = 35
|
||||||
versionCode = 46
|
versionCode = 47
|
||||||
versionName = "1.7.26"
|
versionName = "1.7.27"
|
||||||
|
|
||||||
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
|
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
|
||||||
vectorDrawables {
|
vectorDrawables {
|
||||||
|
|||||||
@ -715,16 +715,19 @@ class TraeRepository constructor(
|
|||||||
|
|
||||||
val succeeded = code == 0L || code == 200L
|
val succeeded = code == 0L || code == 200L
|
||||||
val lowerMsg = msg.lowercase()
|
val lowerMsg = msg.lowercase()
|
||||||
val deviceBlock = msg.contains("设备") || lowerMsg.contains("device") || lowerMsg.contains("machine")
|
// 已签语义优先于「设备」判定:像「当前设备今日已经签到」这种文案虽然含“设备”,
|
||||||
// 权威口径幂等兜底码是 10001(trae-checkin-helper 逆向);历史实现用 1001,
|
// 但语义是今日已签,必须按 ALREADY 落本地记录,避免误判 DEVICE_BLOCKED 反复重试。
|
||||||
// 两者都认,避免把已签误判为 FAILED 硬错误。
|
val alreadyMsg = msg.contains("已签到") || msg.contains("已经签到") || msg.contains("重复签到") ||
|
||||||
val already = (code == 1001L || code == 10001L) || (!deviceBlock && (
|
|
||||||
msg.contains("已签到") || msg.contains("已经签到") || msg.contains("重复签到") ||
|
|
||||||
msg.contains("重复") || msg.contains("不能重复") ||
|
msg.contains("重复") || msg.contains("不能重复") ||
|
||||||
msg.contains("明日再来") || msg.contains("今日已完成") || msg.contains("已领取") ||
|
msg.contains("明日再来") || msg.contains("今日已完成") || msg.contains("已领取") ||
|
||||||
lowerMsg.contains("already") || lowerMsg.contains("checked") || lowerMsg.contains("claimed") ||
|
lowerMsg.contains("already") || lowerMsg.contains("checked") || lowerMsg.contains("claimed") ||
|
||||||
lowerMsg.contains("duplicate") || lowerMsg.contains("repeat")
|
lowerMsg.contains("duplicate") || lowerMsg.contains("repeat")
|
||||||
))
|
val deviceBlock = !alreadyMsg && (
|
||||||
|
msg.contains("设备") || lowerMsg.contains("device") || lowerMsg.contains("machine")
|
||||||
|
)
|
||||||
|
// 权威口径幂等兜底码是 10001(trae-checkin-helper 逆向);历史实现用 1001,
|
||||||
|
// 两者都认,避免把已签误判为 FAILED 硬错误。
|
||||||
|
val already = (code == 1001L || code == 10001L) || alreadyMsg
|
||||||
// 服务端临时限流/排队(账号、设备或活动人数限制):提示可稍后重试,不算硬错误。
|
// 服务端临时限流/排队(账号、设备或活动人数限制):提示可稍后重试,不算硬错误。
|
||||||
val retryable = !already && !deviceBlock && (
|
val retryable = !already && !deviceBlock && (
|
||||||
msg.contains("参与") || msg.contains("稍后重试") || msg.contains("火爆") ||
|
msg.contains("参与") || msg.contains("稍后重试") || msg.contains("火爆") ||
|
||||||
|
|||||||
@ -192,8 +192,15 @@ class AutoCheckinManager @Inject constructor(
|
|||||||
)
|
)
|
||||||
ServiceResult(service, label, false, true, 0, "", false)
|
ServiceResult(service, label, false, true, 0, "", false)
|
||||||
}
|
}
|
||||||
// INTL 不支持签到:静默跳过,不进弹窗(避免误报「已签到」)
|
// INTL 不支持自动签到:当天落一条已签记录防反复重试,静默跳过不进弹窗
|
||||||
TraeRepository.CheckinOutcome.INTL_UNSUPPORTED -> null
|
TraeRepository.CheckinOutcome.INTL_UNSUPPORTED -> {
|
||||||
|
checkinStatusStore.record(
|
||||||
|
ServiceType.TRAE,
|
||||||
|
account.id,
|
||||||
|
CheckinStatusStore.STATUS_ALREADY
|
||||||
|
)
|
||||||
|
null
|
||||||
|
}
|
||||||
TraeRepository.CheckinOutcome.DEVICE_BLOCKED -> {
|
TraeRepository.CheckinOutcome.DEVICE_BLOCKED -> {
|
||||||
recordFailure(service, account.id, CheckinStatusStore.STATUS_DEVICE_BLOCKED)
|
recordFailure(service, account.id, CheckinStatusStore.STATUS_DEVICE_BLOCKED)
|
||||||
ServiceResult(service, label, false, false, 0, r.message, failed = true)
|
ServiceResult(service, label, false, false, 0, r.message, failed = true)
|
||||||
@ -250,9 +257,15 @@ class AutoCheckinManager @Inject constructor(
|
|||||||
)
|
)
|
||||||
ServiceResult(service, label, false, true, 0, "", false)
|
ServiceResult(service, label, false, true, 0, "", false)
|
||||||
}
|
}
|
||||||
WorkBuddyRepository.CheckinOutcome.NO_CAMPAIGN ->
|
// 国际站无签到活动不是账号失败:当天落已签记录防反复重试,静默跳过不进弹窗
|
||||||
// 国际站没有签到活动不是账号失败:静默跳过,不记失败日志
|
WorkBuddyRepository.CheckinOutcome.NO_CAMPAIGN -> {
|
||||||
ServiceResult(service, label, false, false, 0, s.message, false)
|
checkinStatusStore.record(
|
||||||
|
ServiceType.WORKBUDDY,
|
||||||
|
account.id,
|
||||||
|
CheckinStatusStore.STATUS_ALREADY
|
||||||
|
)
|
||||||
|
null
|
||||||
|
}
|
||||||
WorkBuddyRepository.CheckinOutcome.FAILED -> {
|
WorkBuddyRepository.CheckinOutcome.FAILED -> {
|
||||||
recordFailure(service, account.id, CheckinStatusStore.STATUS_FAILED)
|
recordFailure(service, account.id, CheckinStatusStore.STATUS_FAILED)
|
||||||
ServiceResult(service, label, false, false, 0, s.message, failed = true)
|
ServiceResult(service, label, false, false, 0, s.message, failed = true)
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user