Skip to content

Rarmash/MAXWin

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

9 Commits
 
 
 
 
 
 
 
 

Repository files navigation

MAXWin

Important

Во время тестирования MAXWin один из тестовых профилей MAX был перманентно заблокирован. Точная причина неизвестна, но проект напрямую работает с API MAX и не является официальным клиентом, поэтому риск блокировки реальный.

Не используйте основной аккаунт. Не используйте номер, который жалко потерять. MAXWin сейчас стоит воспринимать как экспериментальный proof-of-concept / вайбкодный клиент для Windows Phone, а не как безопасную замену официальному приложению.


MAXWin — неофициальный экспериментальный клиент MAX для Windows 10 Mobile / Windows Phone.

Весь проект — это сущий вайбкод, собранный из любопытства и желания проверить, насколько далеко можно протащить современный мессенджер на Lumia и старый UWP-стек. Никаких претензий на промышленное качество, стабильность или красивую архитектуру тут пока нет.

Изначально это был прототип уровня “а можно ли вообще?”, но технически он уже доказал главное: MAX действительно может отвечать старому UWP-приложению. Так что в будущем проект вполне может вылиться в нормальный такой клиент — уже без рофла, с человеческим UI и базовой пригодностью для реального использования.

Что это такое

MAXWin — UWP-приложение на C# + XAML, ориентированное на Windows 10 Mobile.

Цель проекта — сделать минимально рабочий клиент MAX для устройств, которые официально уже давно никому не нужны, но всё ещё живы в сердцах энтузиастов.

Проект вдохновлён и частично ориентируется на открытый клиент Komet:

https://github.com/KometTeam/Komet

Komet используется как референс по протоколу и поведению клиента.

Статус

Всё ещё ранний прототип, но уже не просто “а оно вообще отвечает?”. Сейчас это маленький, местами кривой, но уже живой клиент.

Уже работает:

  • подключение к серверам MAX;
  • первичный handshake;
  • запрос кода авторизации по телефону;
  • подтверждение кода;
  • регистрация нового профиля;
  • логин;
  • сохранение session token и автоматический вход после перезапуска;
  • reconnect после обрыва соединения сервером;
  • получение профиля, списка чатов и базовой конфигурации;
  • отдельные вкладки для чатов, текущего диалога, аккаунта и логов;
  • список чатов с названиями, превью последних сообщений, временем, бейджами и аватарками из MAX;
  • кеш списка чатов, имён, аватарок и последних сообщений, включая файловый кеш сообщений;
  • открытие диалога и загрузка истории;
  • нормальный порядок истории: старые сообщения сверху, свежие снизу;
  • разделение сообщений: свои справа, чужие слева, с датами и статусами;
  • отправка обычных текстовых сообщений;
  • нативное редактирование своих сообщений;
  • нативные ответы и пересылка через MAX message.link, с отдельным preview-блоком как в нормальном мессенджере;
  • реакции на сообщения и посты каналов: загрузка счётчиков через MAX, плашки реакций, быстрый тап по существующей реакции и замена/снятие своей реакции;
  • контекстное меню сообщений: копирование, редактирование, ответ, пересылка, выбор реакции и загрузка медиа;
  • базовое отображение медиа-вложений: фото/видео/файлы показываются понятными блоками, фото можно лениво догружать;
  • отправка одного фото через PHOTO_UPLOAD, UPLOAD_ATTACH_PREP и обычный msgSend;
  • кнопка Start для ботов, которая отправляет /start;
  • скрытие поля ввода там, где писать нельзя;
  • поиск публичных чатов, каналов, пользователей и ботов;
  • старт диалога с ботом через найденный contact/bot flow;
  • подтверждение входа в MAX Web по QR/login-ссылке;
  • вход в сам MAXWin по QR-коду через web-socket flow, если SMS/код временно недоступны;
  • распознавание QR из картинки;
  • сканирование QR через камеру, если устройство и разрешения позволяют;
  • базовые toast-уведомления о новых сообщениях, пока приложение держит живое соединение;
  • копируемый debug-лог с маскированием чувствительных полей.

До полноценного клиента ещё далеко: медиа пока поддерживаются только частично, настоящие системные push-уведомления ещё не прикручены, адресная книга и настройки тоже требуют нормальной работы. Но базовый сценарий “запустил, вошёл, открыл чат, прочитал, написал, ответил, переслал, поставил реакцию” уже начал проступать.

Целевая платформа

Проект рассчитан на старый стек:

  • Visual Studio 2017;
  • UWP;
  • C#;
  • XAML;
  • Windows 10 Mobile;
  • Lumia 550 и похожие устройства.

Это не WinUI 3, не MAUI, не WPF и не Windows App SDK.

Минимальная практическая цель сейчас — Windows 10 Mobile 1511 / build 10586 и ARM32-устройства уровня Lumia 550. В .csproj выставлен TargetPlatformMinVersion=10.0.10586.0; собранный пакет тоже получает MinVersion=10.0.10586.0.

А Windows Phone 8/8.1?

Текущий MAXWin туда не запустится. Это UWP-приложение, а Windows Phone 8 и 8.1 живут в другом мире: другой проект, другой XAML, другие API для сети, файлов, камеры, уведомлений и жизненного цикла приложения.

Теоретически можно сделать отдельный клиент под Windows Phone 8.1 — скорее всего, отдельным проектом вроде MAXWin.Phone81. Часть протокольного ядра можно было бы вынести и переиспользовать: пакеты MAX, MsgPack, LZ4 и часть клиентской логики. Но UI, хранение, сокеты/TLS, QR, камера и уведомления пришлось бы адаптировать отдельно. Первый реальный тест для такого порта — сможет ли WP8.1 вообще открыть TLS-соединение к api.oneme.ru:443 и пройти handshake.

С Windows Phone 8.0 всё ещё печальнее: старее TLS-стек, меньше подходящих API и больше ограничений. Поддержка WP8.0 сейчас не планируется.

Почему не Flutter

Открытый клиент Komet написан на Dart/Flutter, но Flutter не поддерживает Windows Phone / Windows 10 Mobile / ARM32 как нормальную целевую платформу.

Поэтому MAXWin — это не порт UI из Komet, а отдельная UWP-реализация клиента с переносом нужной логики.

Что дальше

Если проект продолжать, ближайшая задача — не столько навешивать новые фичи, сколько сделать клиент тише и аккуратнее:

  • довести UI чатов до более человеческого состояния;
  • сделать нормальную карточку профиля/аккаунта;
  • уменьшить количество лишних запросов к API;
  • сделать reconnect менее агрессивным;
  • отделить debug/экспериментальные кнопки от обычного пользовательского сценария;
  • не дёргать рискованные protocol-probe без явного действия пользователя;
  • довести реакции до совсем нативного вида, включая определение своей реакции после перезапуска;
  • расширить медиа и вложения: видео, файлы, альбомы, нормальный просмотр и более надёжная загрузка на Lumia;
  • прикрутить настоящие фоновые push-уведомления, если старый UWP-стек и серверный протокол дадут это сделать;
  • лучше обрабатывать push-события и разные типы обновлений истории;
  • научиться открывать больше типов ссылок MAX;
  • убрать лишнюю протокольную болтовню из интерфейса, оставив её в логе;
  • допилить авторизацию и QR-сценарии, насколько это позволит сервер.

Звонки, стикеры, полноценная работа с медиа и прочая хрень — когда-нибудь потом. Сначала бы сделать так, чтобы Lumia уверенно притворялась современным мессенджером хотя бы в текстовом режиме.

Сборка

Ожидаемое окружение:

  • Windows;
  • Visual Studio 2017;
  • UWP workload;
  • Windows 10 SDK;
  • Windows 10 Mobile устройство или локальный запуск на ПК.

Открывать нужно solution:

MAXWin.sln

Для запуска на ПК:

x64 / Local Machine

Для запуска на Lumia:

ARM / Device

На телефоне должен быть включён режим разработчика.

Как пользоваться сейчас

Если уже есть сохранённая сессия, приложение само подключается, делает handshake и логинится. В нормальном случае после запуска можно сразу идти во вкладку Chats.

Первичный debug-flow всё ещё оставлен на месте:

  1. Connect
  2. Handshake
  3. Ввести номер телефона
  4. Request code
  5. Ввести код
  6. Verify code
  7. Если пришёл REGISTER — заполнить имя и нажать Complete registration
  8. Если пришёл LOGIN — нажать Login

После успешного логина сервер возвращает профиль, список чатов и конфигурацию. Новый session token сохраняется отдельно от одноразового login token, так что каждый раз проходить кнопочный ритуал уже не нужно.

Дальше можно:

  • выбрать чат в списке;
  • прочитать историю;
  • отправить текст;
  • отправить одно фото кнопкой Photo;
  • открыть контекстное меню сообщения правым кликом или долгим нажатием;
  • отредактировать своё сообщение;
  • ответить на сообщение или переслать его в другой чат;
  • поставить реакцию через контекстное меню или нажать на уже существующую плашку реакции;
  • нажать Load media у сообщения с медиа, если вложение не загрузилось сразу;
  • найти публичный чат, канал, пользователя или бота;
  • для бота нажать Start, если диалог уже открыт;
  • подтвердить вход в MAX Web через QR/login link, картинку с QR или камеру;
  • сгенерировать QR для входа в MAXWin на этом устройстве, если вход по SMS временно недоступен.

Безопасность

Проект сейчас активно логирует ответы сервера для отладки. Это удобно, но опасно.

В логах могут быть:

  • номер телефона;
  • auth token;
  • login token;
  • session token;
  • invite-ссылки;
  • данные профиля;
  • данные чатов.

Не коммитьте логи. Не выкладывайте токены. Не пушьте .pfx, AppPackages, bin, obj, .vs и прочий локальный мусор.

Для экспериментов лучше использовать тестовый аккаунт.

Дисклеймер

MAXWin — неофициальный клиент. Проект никак не связан с разработчиками MAX и не является официальным приложением.

Это исследовательский, экспериментальный и местами откровенно вайбкодный проект для энтузиастов Windows Phone.

Используйте на свой страх и риск.

Credits

  • KometTeam / Komet — референс открытого клиента.
  • Windows Phone — за то, что умер, но не сдался.

About

Unofficial experimental MAX client for Windows 10 Mobile / Windows Phone

Topics

Resources

Stars

Watchers

Forks

Contributors

Languages