feat: multi-server failover forwarding + reorder/enable
Bark servers now form an ordered failover chain: forwarding tries each enabled server in list order, stopping at the first success. - model: BarkServer.enabled (defaults true; legacy JSON compatible) - core/BarkSender.pushToFirst: ordered try-until-success helper, shared by NotifyListenerService / PhoneCallMonitor / RetryWorker - BarkClient.push uses msg.copy(deviceKey=server.deviceKey) so each server pushes its own key - SettingsStore: drop currentServer/setCurrent; add moveServer + setServerEnabled; NotificationProcessor no longer sources deviceKey - UI: ServerRow RadioButton -> Checkbox + per-row test/move-up/move-down; remove top "send test push" button; HomeScreen shows enabled count - version 1.5.1 -> 1.6.0 (code 9 -> 10); CLAUDE.md synced Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -3,7 +3,7 @@ package com.a2i.forwarder.service
|
||||
import android.service.notification.NotificationListenerService
|
||||
import android.service.notification.StatusBarNotification
|
||||
import com.a2i.forwarder.A2iApp
|
||||
import com.a2i.forwarder.core.BarkClient
|
||||
import com.a2i.forwarder.core.BarkSender
|
||||
import com.a2i.forwarder.core.ForwardLog
|
||||
import com.a2i.forwarder.core.NotificationProcessor
|
||||
import com.a2i.forwarder.core.PendingPush
|
||||
@@ -58,20 +58,20 @@ class NotifyListenerService : NotificationListenerService() {
|
||||
return
|
||||
}
|
||||
|
||||
val server = app.settings.currentServer.value
|
||||
if (server == null || server.deviceKey.isBlank()) {
|
||||
app.logStore.addLog(ForwardLog(now, sbn.packageName, d.appLabel, msg.title, msg.body, "failed", "未配置 Bark key"))
|
||||
val servers = app.settings.servers.value.filter { it.enabled && it.deviceKey.isNotBlank() }
|
||||
if (servers.isEmpty()) {
|
||||
app.logStore.addLog(ForwardLog(now, sbn.packageName, d.appLabel, msg.title, msg.body, "failed", "未配置可用 Bark 服务器"))
|
||||
return
|
||||
}
|
||||
|
||||
val result = BarkClient(server).push(msg)
|
||||
val result = BarkSender.pushToFirst(servers, msg)
|
||||
if (result.isSuccess) {
|
||||
app.logStore.addLog(ForwardLog(now, sbn.packageName, d.appLabel, msg.title, msg.body, "sent", ""))
|
||||
} else {
|
||||
val reason = result.exceptionOrNull()?.message ?: "错误"
|
||||
app.logStore.addLog(ForwardLog(now, sbn.packageName, d.appLabel, msg.title, msg.body, "failed", reason))
|
||||
app.logStore.addPending(
|
||||
PendingPush(UUID.randomUUID().toString(), now, server.id, json.encodeToString(msg))
|
||||
PendingPush(UUID.randomUUID().toString(), now, servers.first().id, json.encodeToString(msg))
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user