ChatViewer — экспорт переписки, который снова читается
Экспорт переписки из мессенджера — это архив, а не документ: Telegram отдаёт result.json на десятки мегабайт, WhatsApp — текстовый файл, где каждая строка начинается с даты, а фотографии лежат рядом отдельной кучей. Прочитать это можно, но не глазами. ChatViewer разбирает обе выгрузки и показывает их так, как они выглядели в мессенджере.
Исходный код открыт: github.com/GhostCorpTech/chat-viewer — можно открыть и посмотреть своими глазами.
Как это выглядит
Что умеет продукт
- Два формата: result.json из Telegram и .txt из WhatsApp, каждый импорт — отдельный чат в списке
- Сообщения сгруппированы по автору, а дни разделены: «Сегодня», «Вчера» или дата
- Фото, видео, кружки и голосовые открываются прямо в ленте, картинки — в лайтбоксе
- Анимированные стикеры .tgs распаковываются и проигрываются как Lottie
- Поиск по названию чата в списке и по тексту внутри открытой переписки
- Светлая и тёмная темы, русский и английский интерфейс
- Групповые чаты определяются сами, свои сообщения переносятся вправо по вашему from_id
- Служебные сообщения о входах и выходах отфильтрованы, пересланные — помечены
Два формата, одна форма сообщения
Выгрузка Telegram — структурированный JSON: там известен тип каждого сообщения, кто его переслал, какой это стикер и сколько длится голосовое. Выгрузка WhatsApp — простой текст, где тип вложения приходится угадывать по расширению файла, а пересланное сообщение помечено словом «Forwarded» без указания автора.
Парсеры разные, но оба сводят сообщение к одной форме: направление, отправитель, текст, тип вложения, путь к файлу, время. Дальше база и весь интерфейс уже не знают, из какого мессенджера пришли данные, — поэтому третий формат добавляется одним модулем, а не переписыванием приложения.
Ничего не уходит наружу
Приложение не делает ни одного сетевого запроса. Нет аккаунта, нет сервера, нет телеметрии: разобранные сообщения лежат в SQLite-файле в профиле пользователя, медиа остаётся там, куда его положил мессенджер.
Это не позиция ради позиции, а требование задачи. Переписку выгружают, когда она нужна для чего-то серьёзного, и заливать её в чужое облако ради удобства просмотра — ровно то, чего делать нельзя.
Медиа читается с диска, а не копируется
Архив переписки за несколько лет — это гигабайты фотографий и видео. Приложение хранит пути к ним, а не сами файлы: импорт занимает секунды и не удваивает место на диске.
Обратная сторона названа прямо в интерфейсе: если папку выгрузки перенести или удалить, текст останется, а медиа перестанет открываться. Честнее сказать это заранее, чем оставить человека с ломающимися картинками через полгода.
Группы, в которых непонятно, где вы
В выгрузке группового чата нет отметки, какой из участников — владелец архива. Приложение определяет группу само, когда собеседников больше двух, и по умолчанию ставит все сообщения слева: это честно, но неудобно.
Поэтому в шапке чата есть «Указать мой ID»: вставляете свой from_id из result.json — и ваши реплики уезжают вправо, как в настоящем мессенджере. Одна кнопка вместо догадок алгоритма.
Своё приложение, а не веб-страница
Интерфейс собран на React, а разбор выгрузок, база и распаковка .tgs — на Rust; связывает их Tauri. Такой выбор даёт нативное окно и инсталлятор весом в единицы мегабайт вместо сотни, которую занял бы Electron.
Код открыт под MIT и лежит на GitHub: сборка установщика повторяется одной командой, а релизы собираются на GitHub Actions. Windows 10 и 11 — единственная платформа, для которой сделана упаковка; сам стек кроссплатформенный.
Как это устроено
- 1 Импорт Выбираете result.json из выгрузки Telegram или .txt из WhatsApp — остальное приложение находит само
- 2 Разбор Два парсера на Rust приводят разные форматы к одной форме: кто, кому, когда, что и какое вложение
- 3 Хранение Разобранные сообщения ложатся в локальную базу SQLite на вашем диске — не в облако
- 4 Медиа Фото, видео, кружки, голосовые и стикеры читаются прямо из папки выгрузки, а не копируются
- 5 Чтение Переписка открывается лентой: группировка по автору, разделители дней, поиск и лайтбокс
На чём собрано
Нужно похожее?
Расскажите, что у вас происходит сейчас. Разбор задачи и оценка — бесплатно и ни к чему не обязывают.