fix: voice message display, playback, recording UI, audio settings

- messagelist: parse content_type from JSON when DB column is empty
- messagelist: recording indicator (red dot + timer + cancel button)
- messagedelegate: editorEvent for play/pause toggle + progress bar
- messagedelegate: VoicePlayState tracking with QTimer
- InputBar: proper recordingContext (mediaDir + channelId)
- DbManager: dbPath() for media directory resolution
- AudioRecorder: peakLevel() for mic level meter
- VoiceEncoder: codec quality presets (Low/Standard/High)
- audiodevicesettingspage: Default device option first
- audiodevicesettingspage: mic level meter + test microphone
- audiodevicesettingspage: test speaker button
- audiodevicesettingspage: codec preset combo (Low/Standard/High)
- mainwindow: load opus_codec_preset from ui_state on startup
This commit is contained in:
Evgeny committed 2026-07-26 21:19:29 +03:00
1 parent 4fde0b0325
commit 850a260aac
14 files changed
+483 -57

No files matched your search

+6 -3
View File
@@ -154,6 +154,11 @@ void InputBar::onSendClicked() {
#include "audiorecorder.h"
#include "voicemessageencoder.h"
void InputBar::setRecordingContext(const QString& mediaDirBase, const QString& channelId) {
m_mediaDirBase = mediaDirBase;
m_channelIdForRecord = channelId;
}
void InputBar::onPttPressed() {
if (!m_recorder || !m_recorder->isInitialized()) return;
m_recorder->startRecording();
@@ -179,9 +184,7 @@ void InputBar::onPttReleased() {
const std::vector<int16_t>& pcm = m_recorder->buffer();
if (pcm.empty()) return;
QString mediaPath = VoiceEncoder::mediaDir(
QString::fromUtf8(qgetenv("CHAT_DATA_DIR").isEmpty() ? "chat_data" : qgetenv("CHAT_DATA_DIR")),
"current");
QString mediaPath = m_mediaDirBase + "/" + m_channelIdForRecord;
VoiceEncoder::ensureMediaDir(mediaPath);
QString fileName = VoiceEncoder::generateFileName();