evgeny
31b42d0c22
Render formatted chat text with matching selection and clipboard
2026-11-02 22:29:50 +01:00
evgeny
5a8a50e74c
Fix desktop message selection highlight paragraph offset
2026-11-02 22:18:41 +01:00
evgeny
73b1fc7080
Render cached image and video previews without filesystem access or scaled pixmap allocation
2026-10-28 15:02:28 +01:00
evgeny
08e9b62e16
Render image previews from prepared model data and preserve aspect ratios
2026-10-28 12:08:06 +01:00
evgeny
fee528194b
Handle the tracked voice view during destruction and isolate test startup work
2026-10-28 00:59:00 +01:00
evgeny
d0bf402824
Document checked desktop snapshots and require matching media click gestures
2026-10-28 00:59:00 +01:00
evgeny
034df2939c
Reject incomplete DB reads and clock voice progress from PCM outside paint
2026-10-28 00:59:00 +01:00
evgeny
1235f770eb
Fence deferred message actions, release voice views and flush state before shutdown
2026-10-28 00:59:00 +01:00
evgeny
48bdb85ff9
Preserve composer media policy and display edit times for short or emoji text
2026-10-26 22:47:57 +01:00
evgeny
1afb1010cc
Wire desktop context-menu editing and update visible messages in place
2026-10-26 22:38:42 +01:00
evgeny
ec0666ca2a
Keep quote activation separate from text selection gestures
2026-10-08 00:31:27 +02:00
evgeny
eebef4d14f
Render clickable compact replies for text and media messages
2026-10-08 00:23:16 +02:00
evgeny
c3468987cb
Handle poll questions rendered as a standalone emoji
2026-10-07 17:33:26 +02:00
evgeny
ddcc36aa26
Open desktop chat polls with a single left click
2026-10-07 17:11:43 +02:00
evgeny
3dbbe02f69
Keep desktop reactions and timestamp inside the bubble bottom row
2026-10-07 01:53:18 +02:00
evgeny
4f0870b961
Verify transparent reaction footer clicks across text and media layouts
2026-10-07 01:28:56 +02:00
evgeny
fc79fa7345
Keep message footer layout and click gesture states consistent
2026-10-07 01:27:04 +02:00
evgeny
00ca006d26
Render and hit-test reaction footer for every desktop message type
2026-10-07 01:21:52 +02:00
evgeny
29ee55d751
Enlarge desktop chat and member avatars
2026-10-07 01:18:31 +02:00
evgeny
918a3cc061
Merge chat polls and reactions into master
2026-10-06 23:08:07 +02:00
evgeny
39e94fdfd3
Add message reaction menus and distinguish own reactions
2026-10-06 21:39:14 +02:00
evgeny
1f9dbd9dea
Open desktop message avatars only after a completed click
2026-10-06 20:01:38 +02:00
evgeny
3a793e25b3
Open user avatar galleries from desktop messages
2026-10-06 19:36:34 +02:00
evgeny
27d93ecaf9
Add English and Russian ChatGUI interface translations
2026-10-05 16:55:43 +02:00
evgeny
3482e4a327
Share Qt text layout for web links and invitations
2026-10-04 19:04:11 +02:00
evgeny
6ad89a4f6a
Elide Qt invitation links with consistent layout and full-address selection
2026-10-04 18:08:43 +02:00
evgeny
38c4c0772b
Use explicit cursor index type for Qt 5 and Qt 6
2026-10-04 15:54:06 +02:00
evgeny
17179c9c4a
Use invite text layout for selection and wrapped emoji positions
2026-10-04 15:51:51 +02:00
evgeny
56fe1cab95
Render and hit-test wrapped invitation links in desktop messages
2026-10-04 14:56:10 +02:00
evgeny
217e5795bf
Раздели PCM-сессии и исправь частоту и перемотку звука
2026-10-02 02:00:50 +03:00
evgeny
20322e7ecb
Show PM voice and video delivery status in both shared renderers
2026-10-01 18:49:59 +03:00
evgeny
172cc3a649
Update shared Qt playback controls after background decoding
2026-10-01 18:29:07 +03:00
evgeny
a281165450
Keep channel download commands out of the shared message delegate
2026-10-01 17:56:29 +03:00
evgeny
1ceb09062f
Show PM file delivery state without invoking group downloads
2026-10-01 16:22:54 +03:00
evgeny
7198154106
chatgui: клик по медиа с отсутствующим файлом — сброс пометки и перекачка
2026-09-22 21:59:59 +03:00
evgeny
9793733cd5
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: компактная раскладка имени интерфейса
2026-09-21 18:59:04 +03:00
evgeny
73fe99b33f
dm: прямой обмен сообщениями (DM) + soundtouch + архитектура звонков
...
- src/dm/: dm_core/dm_crypto/dm_mailbox — прямой обмен сообщениями (DM)
- lib/soundtouch-master/: vendored SoundTouch (изменение темпа/высоты аудио)
- doc/dm_arch.md, doc/chat_call_arch.md: архитектура DM и звонков
- tests: test_dm.c, test_dm_e2e.c
- chat: рефакторинг chat_* модулей, member_sync, invite_build
- chatgui/chatgui-android: синхронизация с новым API чата
- lib/u_async, debug_config, utun_instance: сопутствующие изменения
2026-09-15 21:09:17 +03:00
evgeny
c474c37284
chatgui/chatgui-android: просмотр изображений с зумом + инфо о медиа
...
- chatgui: просмотрщик изображений (ImageViewerWindow) с зумом/поворотом
- chatgui: отправка картинок как image с определением разрешения и типа
- chatgui: у видео-пузыря строка info (res·size·bitrate) и бейдж только длительность
- chatgui: контекстное меню медиа (сохранить в файл/скачать)
- chatgui-android: большие emoji-only сообщения, битрейт/разрешение у видео
- chatgui-android: сохранение неактивных интерфейсов как закомментированные секции
- chatgui-android: отправка картинок по расширению (jpg/png/gif/bmp/webp)
- photo_sender: content-type и расширение по типу файла
2026-09-09 16:18:26 +03:00
evgeny
f2b34459c3
chatgui: баббл видео — размер + время m:ss (напр. 1.5MB · 0:45)
2026-09-08 01:47:32 +03:00
evgeny
6542618927
chatgui: воспроизведение видео — FFmpeg-плеер + frameless окно
...
- videoplayer_engine: декод в worker-потоке (FFmpeg), A/V sync по аудио-курсору,
seek с epoch-защитой от устаревших кадров
- videoplayer_window: окно без рамки, drag-перенос, dblclick/Alt+Enter fullscreen,
Esc закрытие, timeline + play/pause/close, авто-скрытие контролов
- видео-баббл в списке: превью-кадр (jpg), play-оверлей, длительность, прогресс
- превью извлекается после скачивания (video_extract_thumbnail) в фоне
- mainwindow: синглтон-плеер, openVideoRequested → openVideo
- CMake: HAVE_FFMPEG для vibechat
2026-09-08 00:55:06 +03:00
evgeny
ca176e1f24
encrypt overhead fix (33→36, noencrypt_len), mtu default 1280, connmonitor window, total_decrypted for TCP, check.sh
2026-08-08 16:56:32 +03:00
evgeny
38c9f229bc
stcp: ed25519 pubkey exchange in handshake, fix instance destroy segfault, fix chat_tcp_test
...
- u_async.c: process immediate_queue BEFORE epoll_wait in uasync_poll
- stcp_link.c: defensive NULL etcp_conn/etcp_link in stcp_link_close
- utun_instance.c: move stcp_server_list_destroy_all to Phase J (before ETCP),
add deferred drain in both Phase J and L
- stcp.h/c: STCP_HS_ENC_CLIENT 6→38, STCP_HS_ENC_SERVER 7→39,
exchange ed25519_pubkey in both handshake directions
- etcp_connections.c: copy peer_ed25519 from STCP to ETCP_CONN in
etcp_link_enter_ready_tcp; guard link->etcp in tcp_link_close_cb
- chat_sync.c: fix lk->conn NULL dereference for TCP links
- test_stcp.c: update stcp_server_create/stcp_client_connect callsites
- tools/chat_tcp_test: change transport udp→tcp
2026-08-07 00:48:27 +03:00
evgeny
d773f1724a
refactor: STCP connections as ETCP links (is_tcp)
...
- Add is_tcp, tcp_link, tcp_reconnect_* fields to ETCP_LINK
- Remove transport_link from ETCP_CONN, add tcp_link_count
- stcp_link: replace embedded etcp_conn with pointer; add etcp_link backpointer
- stcp_link: link_rx_cb routes ETCP data to etcp_conn_input
- stcp_link: call on_close_cb in close
- New TCP functions: etcp_link_enter_ready_tcp, etcp_tcp_link_start_connect,
etcp_tcp_link_start_reconnect, tcp_link_close_cb, etcp_tcp_send
- etcp_link_new: handle NULL conn for TCP links; skip enter_init for TCP
- etcp_link_close: close stcp_link for TCP
- etcp_encrypt_send: redirect TCP to etcp_tcp_send (skips AES-CCM)
- tcp_server_on_link: create ETCP_LINK(is_tcp=1) + enter_ready_tcp
- etcp_connect: TCP addrs -> etcp_tcp_link_start_connect
- Remove ctx->tcp_link/tcp_ready
- test_stcp_traffic: find stcp_link via links->is_tcp instead of transport_link
- 66/68 tests pass; 2 STCP tests expected to fail (integration not complete)
2026-08-06 22:14:32 +03:00
evgeny
f476188566
fix(chat): node online status race, WELCOME peer_needed off-by-one, JOIN missing proto byte
...
- node_put/node_update_verified: set online=1 on INSERT (nodes created when conn is UP)
- channel_peers_all: fix peer_needed calculation (atl byte was missing)
- cs_send_channel_join: add proto byte to address serialization matching all parsers
2026-08-06 01:18:27 +03:00
evgeny
51d6c782ac
voice playback: miniaudio cursor ground truth + EMA smooth decay
...
- SoundManager: add currentPcmCursor()/isCurrentPcmPlaying() via ma_sound_get_cursor_in_pcm_frames / ma_sound_is_playing
- messagedelegate: replace wall-clock position tracking with real miniaudio cursor, remove 200ms hardcoded delay
- messagedelegate: end-of-playback detection via isCurrentPcmPlaying() instead of wall-clock comparison (was killing audio ~200ms early)
- messagedelegate: EMA smoothing of displayFrac/displayElapsed (0.15 factor, 16ms timer)
- messagedelegate: timer continues after audio stops to animate EMA decay to 0 (not mouse-move dependent)
- media_delivery: download progress callback, Ed25519 sig verify, author fallback, content hash check
- conn_mgr: already-connected returns OK with callback instead of error
- chatgui: voice download-pending auto-play, file download progress bar, media bar colors
2026-07-31 00:17:03 +03:00
evgeny
70797f921e
feature: media auto-download + manual download + UI download state indication (Android + desktop)
...
C-layer:
- chat_event.h: CHAT_EVT_ATTACHMENT_DOWNLOADED (14)
- chat_msg.c: fixed md_auto_download (non-NULL done_cb, correct media_base from db_path, use chat_setting for autoload checks)
- chat_msg.c: added chat_core_attachment_download + trampoline for manual download
- chat_core.h: exported attachment_dl_req + trampoline
Android (Kotlin + JNI):
- Message: downloadState field (parse from localAttrs)
- ChatRepository: parse localAttrs for download state
- NativeLib: attachmentDownload() JNI
- MessageBubble: FileBubble with download status icon + tap-to-download
- ChatViewModel: downloadAttachment() + CHAT_EVT_ATTACHMENT_DOWNLOADED handler
- ChatScreen: wire onDownloadFile handler
- android_jni_bridge: utun_bridge_attachment_download + JNI + localAttrs in JSON
Desktop (Qt/C++):
- messagedelegate.h: MsgFileDownloadStateRole, MsgChannelIdRole
- messagelist.cpp: parse localAttrs for file download state
- messagedelegate.cpp: FileBubble with download icon/text + click handler via chat_core_attachment_download_trampoline
- gui_bridge.h: GUI_EVT_ATTACHMENT_DOWNLOADED (14) + callback typedef
- gui_bridge_impl.cpp: event dispatch + setter
- mainwindow.cpp: callback registration -> refresh message list
2026-07-30 00:01:38 +03:00
evgeny
65dbfa6813
feat: media_async + media_index modules, media_files table, tests
...
- media_async: thread-per-task async engine with primitives (sha256, sign, copy, uuid, file_size)
- media_index: media_files DB table with register_async for indexing chunks
- chat_msg: async media submission via register_async, simplified chat_msg_submit fields
- voice_recorder/attachment_sender: write single file (no chunk splitting on caller side)
- inputbar/messagelist: updated to new simplified submit interface
- test_media_async: 4-thread stress test (200K ops / 2 sec, 0 errors)
- test_media_index: 9 cases covering commit edge cases + async flow
- build: Makefile.am, CMakeLists.txt, utun_sources.cmake updated
2026-07-29 14:15:10 +03:00
evgeny
4ffa59d968
unify voice waveform format: base64 wf={100chars};dur={ms}; for both desktop and Android
...
- inputbar.cpp: CSV waveform → base64 log-scale (same as voice_recorder.c)
- messagelist.cpp: sendVoiceMessage removes displayName|dur_sec| prefix, uses wfStr directly
setVoiceMessageRoles: decodes new format wf={base64};dur={ms};|... from data field
- messagedelegate.cpp: waveform values now pre-normalized 0..1, no log recalculation needed
- VoiceEncoder: no changes needed (was already compatible)
Both platforms now store identical format in chat_msg_submit.data:
wf=ABCDef...100chars;dur=NNNN;|file_size|block_size|num_blocks|sigs_hex
2026-07-29 01:43:11 +03:00
Evgeny
6b765de5cc
feat: voice playback delay compensation + waveform click-to-seek
2026-07-27 14:53:53 +03:00
Evgeny
5593bfdc0c
fix: logarithmic waveform scale + visible idle color + duration display
...
- Waveform bars: linear→logarithmic (dB mapping -60..0dB)
- Colors: idle gray visible (130 alpha), played blue, unplayed dim blue
- Min bar height: 1→2px
- Duration: fallback to MsgVoiceDurationRole when not playing (was 0:00/0:00)
- Debug log: wfN, width, first value, dB, barH
2026-07-27 09:19:34 +03:00