MyChat 2024.2 — повна синхронізація історії і підвантаження повідомлень

sync

  1. Повна синхронізація історії повідомлень із сервера
  2. Підвантаження повідомлень у чатах
  3. Обробка UNC-посилань і абсолютних шляхів у чаті
  4. Різне корисне
  5. Всі зміни загальним списком + історія розробки
  6. Як оновитися на останню версію?

1. Повна синхронізація історії повідомлень із сервера


Суть проблеми: ми встановили клієнт MyChat на новому комп'ютері. Історія повідомлень зберігається на сервері, корпоративним месенджером ми користуємось декілька років. Повідомлень накопичено для нашого облікового запису — сотні тисяч. Як прочитати їх у клієнтському застосунку, якщо локальна база даних історії — порожня?

Хаос

Раніше історія "підтягувалася" із сервера, коли ми відкривали той чи інший приватний діалог чи конференцію. Але не вся, а десь близько сотні останніх повідомлень для кожного із діалогів. І виходило так, що якщо програма була видалена або встановлена заново на "чистому" комп'ютері, то стара історія за позаминулий рік була недоступна, її можна було побачити лише через адмінку сервера.

У версії 2024.2 є система повної синхронізації. Вона працює в автоматичному режимі, спеціально робити нічого не треба. Як тільки ви відкриваєте вікно історії (Alt+H), MyChat Client вирішує, чи потрібна синхронізація чи ні. Якщо так, то програма обчислює, що саме потрібно (дельту), а потім у консолі показується повідомлення та прогрес:

Синхронізація історії в MyChat

Коли синхронізація закінчиться, вікно історії відкриється саме. А поки з програмою можна працювати у звичайному режимі — всі функції доступні. Якщо ви були у відпустці, і синхронізувати потрібно кілька сотень повідомлень, що з'явилися за цей час, то перемикання в консоль не буде, програма досить швидко "підвантажить" з сервера дані, яких бракує, і відкриє вікно перегляду історії.

Швидкість синхронізації залежить від багатьох факторів: кількості та обсягу повідомлень, поточного завантаження сервера, швидкості мережі, продуктивності клієнтського комп'ютера. Але програма пише приблизний час оцінювання, скільки ще потрібно почекати до повного закінчення. Зазвичай воно потім коригується у бік зменшення. Наприклад, спочатку програма показала, що їй, можливо, знадобиться півгодини, а насправді весь процес зайняв 6 хвилин. Це нормально, чим ближче до закінчення роботи, тим точніше можна оцінити швидкість та час.

Процес можна перервати: наприклад, вийти з програми або вимкнути комп'ютер. Нічого страшного не станеться, MyChat сам розбереться, на якому етапі його зупинили і потім закінчить роботу при наступному запуску.

Треба врахувати, що така синхронізація може і не знадобитися, якщо ви просто відкриватимете різні діалоги і читатимете там повідомлення. Система кешів у MyChat налаштована досить хитро і намагатиметься скоротити звернення до сервера до мінімуму, щоб отримати максимум швидкості та заощадити трафік.


2. Підвантаження повідомлень у чатах


Також свого роду синхронізація, але трохи "з іншого боку". Всі користувачі мобільних месенджерів звикли просто скролити пальцем стрічку повідомлень усередині програми, не замислюючись, звідки вона береться. Вона ніби безкінечна.

Щасливий працівник

Щось схоже ми зробили і у MyChat для Windows. Історія може підтягуватися з сервера через мережу, але зазвичай дістається з локальної бази даних. Іноді, якщо частини історії не вистачає, буде надісланий запит на неї на сервері, а програма закешує її у локальній зашифрованій базі.

Просто скролимо повідомлення мишкою вгору (або Alt+Up / Alt+Home), і читаємо хоч до самого початку:

Скрол підвантажених повідомлень у чаті

Вся магія захована "під капотом". Як і має бути.


3. Обробка UNC-посилань і абсолютних шляхів у чаті


Автоматично розпізнаються та виділяються синім посилання типу "c:\temp\", "C:\tools\WiFi\nirsoft\WifiInfoView.exe", "\\192.168.10.13\public" і тому подібні.

Якщо натиснути на UNC-посилання, запуститься Провідник і спробує відкрити це посилання через мережу. Якщо це посилання на локальний каталог або файл, то чат перевірить, чи існує зазначений шлях. Якщо ні — буде показано спеціальне повідомлення.

Якщо шлях існує, відкриється Провідник. Якщо у шляху ще й був вказаний файл, то Провідник виділить його, щоб користувач мав можливість відкрити або запустити файл, але вже самостійно. Це зроблено з міркувань безпеки, раптом це файл або якийсь скрипт.

Якщо локальний шлях існує, а файл вказаний неправильно, то Провідник все одно відкриється, але вже просто з папкою, без виділення конкретного файлу.

UNC-посилання та абсолютні шляхи в чаті


4. Різне корисне


Консольна команда /mini тепер зменшує розмір вікна до мінімуму, але більше не перемикається у консоль (ви ж знаєте, що консольні команди можна виконувати прямо в тексті чату, так?).

При натисканні на зображенні або файлі, який потрібно завантажити з сервера, а він вже видалений, програма не перемикається в консоль для показу помилки, щоб не втрачати фокус і контекст, а показує toast-повідомлення:

Помилка файлу в чаті

Запис до протоколу робиться, як і раніше.

У Android та iOS-додатках додали налаштування для оптимізації зображень. Якщо налаштування увімкнено, роздільна здатність зображень зменшується до FullHD (максимум 1920 пікселів з більшої сторони). Розмір зменшується на 60-75% — фото швидше відправляються і для одержувача прев'ю генерується в рази швидше.


5. Всі зміни загальним списком + історія розробки


Історія розробки версії з коментарями розробників

MyChat Client

[+] (win32) система повної синхронізації історії повідомлень із сервера;
[+] (win32) автоматичний рендеринг локальних та UNC-посилань у тексті чату та перехід по них за кліком мишки;
[+] (android) (ios) додано налаштування для оптимізації зображень, що відправляються. Якщо налаштування увімкнено, роздільна здатність зображень зменшується до FullHD (максимум 1920 пікселів з більшої сторони). Розмір зменшується на 60-75%, фото швидше відправляються і для одержувача прев'ю генерується в рази швидше
[+] (win32) автоматичне підвантаження повідомлень з історії в конференціях в основне вікно чату при прокручуванні колесом мишки та з клавіатури;
[+] (win32) автоматичне підвантаження повідомлень з історії у приватах в основне вікно чату при прокручуванні колесом мишки та з клавіатури;

[*] (win32) оновлено рендерер історії повідомлень, тепер там відображаються всі типи повідомлень і немає дублікатів;
[*] (win32) консольна команда /mini тепер зменшує розміри вікна до мінімуму, але більше не перемикається на консоль;
[*] (win32) вставка з буфера обміну та коректна обробка в чаті UNC посилань та посилань на локальні папки/файли з пробілами в назвах (копіювання, переходи, рендеринг);
[*] (win32) прибрані паузи при обробці кліків правою кнопкою мишки по UNC-посиланням, які в даний момент недоступні;
[*] (win32) при кліку на зображенні або файлі, який потрібно завантажити з сервера, а він вже видалений — програма не перемикається в консоль для показу помилки, щоб не втрачати фокус і контекст, а показує toast-повідомлення. Запис до протоколу робиться, як і раніше;

[-] (win32) якщо відправити користувачеві приватне повідомлення і він офлайн вже деякий час, то лічильник, скільки часу він не в мережі, скидався. Виправлено;
[-] (win32) помилка в рендерингу історії повідомлень, якщо запитана велика історія та спробувати швидко перемикатися між різними конференціями/приватами, то могли виникати проблеми. Виправлено;
[-] (win32) неправильне сортування приватних діалогів у вікні перегляду історії та неправильне відображення дати останньої активності. Виправлено;
[-] (ios) після відправки зображення, на екрані перегляду воно завантажувалося з сервера замість локального сховища. Виправлено;
[-] (android) (ios) неправильно працювала функція видалення всіх приватних повідомлень, був потрібний вихід з облікового запису. Виправлено;
[-] (ios) виправлено помилку, що виникає після відправки контенту через меню "Поділитися", коли програма активна. Клієнт переставав обробляти будь-які події до перезапуску;
[-] (ios) неправильно відображалися та не завантажувалися файли, відправлені з Android. Виправлено;
[-] (win32) виправлена помилка ID 117323F8 "Cannot focus a disabled or invisible window";
[-] (win32) виправлена помилка ID F43D7638 "Call DeactivateFontsInfo before calling this";
[-] (win32) помилка у файлі локалізації французькою призводила до циклічної помилки при оновленні на нову версію. Виправлено;
[-] (win32) фільтр користувачів у конференціях; іноді не було видно placeholder над списком користувачів після перемикання на конференцію з приватного діалогу;

MyChat Server

[-] (admin) у розділі "Налаштування" — "Налаштування SMTP", при вставці тексту за допомогою контекстного меню, не пропонується зберегти нові параметри і доступна кнопка "перевірити підключення". Виправлено;
[-] проблема з первинним запуском сервера, коли він повинен створити профіль "з нуля", у чистій початковій установці. Виправлено.

6. Як оновитися на останню версію?


І комерційна, і безкоштовна версії оновлюються однаково. Спочатку оновлюється сервер, потім — клієнти. В цілому, в автоматичному режимі.

Інструкція щодо оновлення MyChat

Служба поддержки