chatgui: диагностика воспроизведения голосовых сообщений (Windows)

- sound_manager: ma_engine_init/playRawPcm логируют через DEBUG_* (qWarning/qDebug терялись в GUI-приложении без консоли); детальный результат старта PCM (rc/is_playing/cursor)
- main: ранняя инициализация лога в GUI-потоке до SoundManager::init, чтобы диагностика инициализации попала в файл
- messagedelegate: лог клика по Play/timeline (filePath/dlState/существует ли файл)
- voiceplayback: лог заголовка opus (sr/ch/frameSamples)

Попутные правки:
- u_async: фикс двойного close wakeup_pipe (eventfd/Windows)
- chat_core: NULL-guard в get_db/is_initialized
- android: sqlite открывается в utun_instance_init, cleanup stale-потока без утечки fd
- android SettingsScreen: компактная раскладка имени интерфейса
This commit is contained in:
evgeny committed 2026-09-21 18:59:04 +03:00
1 parent 19dc076528
commit 9793733cd5
8 files changed
+76 -51

No files matched your search

+10
View File
@@ -148,6 +148,16 @@ int main(int argc, char *argv[]) {
if (!QDir::isAbsolutePath(debugFile))
debugFile = QCoreApplication::applicationDirPath() + "/" + debugFile;
/* ранняя инициализация лога в GUI-потоке: SoundManager::init() вызывается в
* конструкторе MainWindow ДО старта utun-потока, поэтому без этого его диагностика
* (ma_engine_init и т.п.) в лог-файл не попадёт. */
debug_config_init();
debug_enable_function_name(0);
debug_enable_file_output(debugFile.toUtf8().constData(), 0);
QString lvl = cfg.debugLevel().trimmed();
if (lvl.isEmpty()) lvl = QStringLiteral("info");
debug_apply_global_level(lvl.toUtf8().constData());
DbManager db;
MainWindow w(nullptr, &db, cfgPath, dbPath, debugFile,
cfg.debugLevel(), cfg.debugCategories());