Commit Graph

24 Commits

Author SHA1 Message Date
Mikhail Kilin
c6beea5608 refactor: create timeout/retry utilities to reduce code duplication (P1.1)
Created new utility modules to eliminate repeated timeout/retry patterns:
- src/utils/retry.rs: with_timeout() and with_timeout_msg() helpers
- src/utils/formatting.rs: timestamp formatting utilities (from utils.rs)
- src/utils/tdlib.rs: TDLib log configuration utilities (from utils.rs)

Refactored src/input/main_input.rs:
- Replaced 18+ instances of timeout(Duration, op).await pattern
- Simplified error handling from nested Ok(Ok(...))/Ok(Err(...))/Err(...)
  to cleaner Ok(...)/Err(...) with custom timeout messages
- Added type annotations for compiler type inference

Benefits:
- Reduced code duplication from ~20 instances to 2 utility functions
- Cleaner, more readable error handling
- Easier to maintain timeout logic in one place
- All 59 tests passing

Progress: REFACTORING_OPPORTUNITIES.md #1 (Дублирование кода) - Частично выполнено

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-01 19:56:33 +03:00
Mikhail Kilin
56bddabbe1 feat: add optional feature flags for clipboard and url-open (P5.15)
Implemented feature flags to make dependencies optional:
- clipboard feature: controls arboard dependency
- url-open feature: controls open dependency
- Both enabled by default for backward compatibility

Changes:
- Cargo.toml: Added [features] section with optional deps
- src/input/main_input.rs: Conditional compilation for open::that() and copy_to_clipboard()
- tests/copy.rs: Clipboard tests only compile with feature enabled
- Graceful degradation: user-friendly error messages when features disabled

Benefits:
- Smaller binary size when features disabled
- Modular functionality
- Better platform compatibility

Progress: Priority 5: 1/3 tasks, Total: 17/20 (85%)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-01 02:23:17 +03:00
Mikhail Kilin
9df8138a46 fix: handle UpdateMessageSendSucceeded to prevent edit errors
Fixes "Message not found" error when editing immediately after sending.

**Problem**:
When sending a message, TDLib may return a temporary ID, then send
UpdateMessageSendSucceeded with the real server ID. We weren't handling
this update, so the cache kept the old ID while the server had a different
one, causing "Message not found" errors during edits.

**Solution**:
1. Added UpdateMessageSendSucceeded handler (client.rs:801-830)
   - Finds message with temporary ID
   - Replaces it with new message containing real server ID
   - Preserves reply_info if present

2. Added validation before editing (main_input.rs:574-589)
   - Checks message exists in cache
   - Better error messages with chat_id and message_id

3. Added positive ID check in start_editing_selected (mod.rs:240)
   - Blocks editing messages with temporary IDs (negative)

**Test**:
- Added test_edit_immediately_after_send (edit_message.rs:156-181)
- Verifies editing works right after send_message
- All 22 edit_message tests pass

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-01 01:47:12 +03:00
Mikhail Kilin
326bf6cc46 fix: preserve reply_to info when editing messages
When editing a message that has a reply, convert_message() creates
a new ReplyInfo with sender_name="Unknown" and text="...". This was
causing the reply info to be lost after editing.

Solution: Save the old reply_to from the original message before
replacement, and restore it if the new message has "Unknown" reply info.

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-01 00:31:38 +03:00
Mikhail Kilin
0ae8a2fb88 fix: update UI after editing message
Issue: Message edits worked on server (other users saw changes),
but local UI didn't update - edited text wasn't visible.

Root cause: Code was updating individual fields instead of replacing
the whole message, and wasn't triggering UI redraw.

Solution:
- Replace entire message with edited_msg (not individual fields)
- Set needs_redraw = true to trigger UI update
- Remove debug logging

Now edited messages immediately appear in local UI.

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-01 00:16:47 +03:00
Mikhail Kilin
07c401e0f9 fix: исправлены баги с сообщениями, редактированием и reply
- Изменён порядок хранения сообщений (теперь от старых к новым)
- Исправлена логика выбора сообщений для редактирования
- Исправлена отправка reply (структура условий)
- Добавлено сохранение reply_info при отправке
- Удалены отладочные логи

Fixes: сообщения теперь отображаются корректно в UI
Fixes: редактирование работает без ошибки 'Message not found'
Fixes: reply показывает превью исходного сообщения
2026-01-31 18:29:02 +03:00
Mikhail Kilin
644e36597d fixes 2026-01-31 03:48:50 +03:00
Mikhail Kilin
43960332d9 refactor: restructure MessageInfo with logical field grouping (P2.6)
Сгруппированы 16 плоских полей MessageInfo в 4 логические структуры
для улучшения организации кода и maintainability.

Новые структуры:
- MessageMetadata: id, sender_name, date, edit_date
- MessageContent: text, entities
- MessageState: is_outgoing, is_read, can_be_edited, can_be_deleted_*
- MessageInteractions: reply_to, forward_from, reactions

Изменения:
- Добавлены 4 новые структуры в tdlib/types.rs
- Обновлена MessageInfo для использования новых структур
- Добавлен конструктор MessageInfo::new() для удобного создания
- Добавлены getter методы (id(), text(), sender_name() и др.) для удобного доступа
- Обновлены все места создания MessageInfo (convert_message)
- Обновлены все места использования (~200+ обращений):
  * ui/messages.rs: рендеринг сообщений
  * app/mod.rs: логика приложения
  * input/main_input.rs: обработка ввода и копирование
  * tdlib/client.rs: обработка updates
  * Все тестовые файлы (14 файлов)

Преимущества:
- Логическая группировка данных
- Проще понимать структуру сообщения
- Легче добавлять новые поля в будущем
- Улучшенная читаемость кода

Статус: Priority 2 теперь 80% (4/5 задач)
-  Error enum
-  Config validation
-  Newtype для ID
-  MessageInfo реструктуризация
-  MessageBuilder pattern

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-01-31 01:45:54 +03:00
Mikhail Kilin
7081a886ad refactor: implement newtype pattern for IDs (P2.4)
Добавлены типобезопасные обёртки ChatId, MessageId, UserId для предотвращения
смешивания разных типов идентификаторов на этапе компиляции.

Изменения:
- Создан src/types.rs с тремя newtype структурами
- Реализованы методы: new(), as_i64(), From<i64>, Display
- Добавлены traits: Hash, Eq, Serialize, Deserialize
- Обновлены 15+ модулей для использования новых типов:
  * tdlib: types.rs, chats.rs, messages.rs, users.rs, reactions.rs, client.rs
  * app: mod.rs, chat_state.rs
  * input: main_input.rs
  * tests: app_builder.rs, test_data.rs
- Исправлены 53 ошибки компиляции связанные с type conversions

Преимущества:
- Компилятор предотвращает смешивание разных типов ID
- Улучшенная читаемость кода (явные типы вместо i64)
- Самодокументирующиеся типы

Статус: Priority 2 теперь 60% (3/5 задач)
-  Error enum
-  Config validation
-  Newtype для ID
-  MessageInfo реструктуризация
-  MessageBuilder pattern

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-01-31 01:33:18 +03:00
Mikhail Kilin
bba5cbd22d fixes 2026-01-30 23:55:01 +03:00
Mikhail Kilin
433233d766 commit 2026-01-30 17:26:21 +03:00
Mikhail Kilin
4deb0fbe00 commit 2026-01-30 15:07:13 +03:00
Mikhail Kilin
f291191577 fixes 2026-01-27 23:29:00 +03:00
Mikhail Kilin
356d2d3064 add account profile 2026-01-27 13:41:29 +03:00
Mikhail Kilin
ac684da820 add draft messages 2026-01-27 12:31:31 +03:00
Mikhail Kilin
dc76e01f3c add find messages 2026-01-27 12:09:05 +03:00
Mikhail Kilin
81dc5b9007 add pinned messages 2026-01-27 04:38:29 +03:00
Mikhail Kilin
4d5625f950 add typings in/out
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-27 03:59:49 +03:00
Mikhail Kilin
fa749d24c5 fixes 2026-01-24 18:53:35 +03:00
Mikhail Kilin
22c4e17377 fixes 2026-01-24 02:22:47 +03:00
Mikhail Kilin
1ef341d907 commit 2026-01-21 21:20:18 +03:00
Mikhail Kilin
32ab1df1fa fixes 2026-01-21 02:27:08 +03:00
Mikhail Kilin
9912ac11bd fixes 2026-01-20 14:54:30 +03:00
Mikhail Kilin
b6d9291864 fixes 2026-01-20 01:00:12 +03:00