From 5382b686e957a2bb6be7a569d5bcb1f071aa218b Mon Sep 17 00:00:00 2001 From: evgeny Date: Tue, 27 Oct 2026 17:17:08 +0100 Subject: [PATCH] Keep config snapshots and network diagnostics precise --- .../app/src/main/java/com/utun/chat/data/ConfigFileStore.kt | 2 +- .../app/src/main/java/com/utun/chat/data/ConfigProvider.kt | 4 ++-- .../src/main/java/com/utun/chat/data/NetworkChangeMonitor.kt | 5 +++-- 3 files changed, 6 insertions(+), 5 deletions(-) diff --git a/tools/chatgui-android/app/src/main/java/com/utun/chat/data/ConfigFileStore.kt b/tools/chatgui-android/app/src/main/java/com/utun/chat/data/ConfigFileStore.kt index ef8e3c4b..8968dc25 100644 --- a/tools/chatgui-android/app/src/main/java/com/utun/chat/data/ConfigFileStore.kt +++ b/tools/chatgui-android/app/src/main/java/com/utun/chat/data/ConfigFileStore.kt @@ -18,7 +18,7 @@ import kotlinx.coroutines.withContext /** * Единственная очередь файловых операций ConfigProvider, живёт вместе с Application. - * submit сразу фиксирует порядок запросов; ожидание Mutex приостанавливает coroutine, IO выполняется вне UI. + * Последовательные submit сохраняют порядок вызова; конкурирующие запросы сериализует Mutex. IO выполняется вне UI. * Возвращённый Deferred принадлежит очереди: отмена coroutine, ожидающей await(), не отменяет принятую запись. * Чтение, формирование снимка и replace выполняются внутри submit. Лог содержит метаданные, без текста/ключей. */ diff --git a/tools/chatgui-android/app/src/main/java/com/utun/chat/data/ConfigProvider.kt b/tools/chatgui-android/app/src/main/java/com/utun/chat/data/ConfigProvider.kt index 9459653b..d10f0469 100644 --- a/tools/chatgui-android/app/src/main/java/com/utun/chat/data/ConfigProvider.kt +++ b/tools/chatgui-android/app/src/main/java/com/utun/chat/data/ConfigProvider.kt @@ -39,7 +39,7 @@ data class RadioCompressorSettings(val enabled: Boolean = true, val maxGainDb: I /** * Поставщик Application: getString/getInt остаются синхронным API для JNI. * Файловые операции возвращают Deferred общей очереди; await не блокирует UI и не передаёт ожидающему владение запросом. - * Внутри операции настройки и keys.conf читаются один раз, чтение/запись utun.cfg сериализованы. + * При формировании конфига настройки и keys.conf читаются один раз; чтение/запись utun.cfg сериализованы. */ class ConfigProvider(private val context: Context) { private val configFiles = ConfigFileStore { level, message -> LogManager.addLog(level, "CFG", message) } @@ -732,7 +732,7 @@ class ConfigProvider(private val context: Context) { val pubKey = stringValue("node.public_key", prefs, snapshot.keys) ?: "" val privKey = stringValue("node.private_key", prefs, snapshot.keys) ?: "" val nodeName = stringValue("node.name", prefs, snapshot.keys) ?: getDeviceName() - val dbDir = stringValue("db.path", prefs, snapshot.keys) ?: context.filesDir.absolutePath + val dbDir = snapshot.directory.path return buildString { appendLine("[global]") if (nodeName.isNotBlank()) appendLine("my_node_name=$nodeName") diff --git a/tools/chatgui-android/app/src/main/java/com/utun/chat/data/NetworkChangeMonitor.kt b/tools/chatgui-android/app/src/main/java/com/utun/chat/data/NetworkChangeMonitor.kt index 70860d19..87c49a42 100644 --- a/tools/chatgui-android/app/src/main/java/com/utun/chat/data/NetworkChangeMonitor.kt +++ b/tools/chatgui-android/app/src/main/java/com/utun/chat/data/NetworkChangeMonitor.kt @@ -19,7 +19,7 @@ object NetworkChangeMonitor { private var coreEpoch = Any() private var updating = false private var pending = false - private var lastInterfaces: List>? = null // Последний снимок, переданный в JNI; не ACK применения. + private var lastInterfaces: List>? = null // Наблюдавшиеся интерфейсы при подготовке; не ACK применения. private const val DEBOUNCE_MS = 500L private val handler = Handler(Looper.getMainLooper()) private val updateRunnable = Runnable { updateSockets() } @@ -82,7 +82,8 @@ object NetworkChangeMonitor { NativeLib.notifyNetworkActive() if (NativeLib.updateSockets(text)) { lastInterfaces = current - LogManager.addLog("INFO", "NET", "socket config handed to JNI: [$previous] -> [$next] chars=${text.length}") + LogManager.addLog("INFO", "NET", "socket config handed to JNI: chars=${text.length}; " + + "observed interfaces: [$previous] -> [$next]") } else LogManager.addLog("ERROR", "NET", "socket update rejected by JNI") } else if (text != null && current != null) { LogManager.addLog("DEBUG", "NET", "prepared network config discarded: core not ready")