24.10.2026 Технический разбор RU

Волгатех.Коллектив: отчёт о почасовой нагрузке из расписания и письма, с которыми можно работать

Версии 0.5.4–0.5.6: «Приложение к форме 28» в .docx, собранное из расписания, с тематическим планом, который продолжается от отчёта к отчёту; почта, которая больше не забывает пароль и не зависает на оборванном соединении; ссылки, телефоны и даты в письмах, предупреждение о фишинге и картинки из интернета только по запросу.

Никита Конкин

Проект Репозиторий Скачать APK
Языковые версии: RU EN

За десять дней после темы Liquid Glass вышли три версии Волгатех.Коллектива. Версия 0.5.5 добавила новый раздел — отчёт о почасовой нагрузке. Версии 0.5.4 и 0.5.6 посвящены почте: одна делает её надёжнее, другая превращает текст письма из картинки в то, с чем можно работать. Попутно матовое стекло получило собственный ползунок силы эффекта.

Почасовая нагрузка: отчёт по форме 28

Преподаватель, у которого есть занятия на условиях почасовой оплаты, сдаёт за каждый период «Приложение к форме 28 — Отчёт по видам выполненных работ». Это таблица: дата, число академических часов, группа, вид занятия, дисциплина и тема. Всё, кроме темы, уже есть в расписании, которое приложение и так загружает. Новый раздел «Почасовая нагрузка» в меню собирает этот отчёт в .docx.

Экран «Почасовая нагрузка» за октябрь 2026: преподаватель, 14 занятий, 28 часов, включённый переключатель «Заполнять темы занятий» и карточки занятий с датой, временем, группой, видом занятия, дисциплиной и темой; внизу кнопка «Сформировать .docx»
Занятия за октябрь с темами из плана.
Экран «Темы занятий»: для дисциплины «Введение в инженерную деятельность» две темы по 30 занятий, для «Систем искусственного интеллекта» одна тема на 40 занятий; у каждой темы кнопки «−» и «+» и корзина, внизу «+ Тема» и «Вставить список»
Тематический план: тема и число занятий подряд.

Работа идёт в три шага. В разделе «Дисциплины» отмечаются дисциплины семестра с почасовой нагрузкой — целиком или только некоторые группы. Затем на сетке месяцев выбирается период: один месяц, несколько подряд или несколько вразбивку. Приложение выписывает занятия по порядку: дата, 2 часа, группа, вид занятия (лекция, практика или лабораторная) и дисциплина. Группы, которые занимались вместе, — одно занятие, и засчитывается оно один раз. Файл называется так же, как на кафедре, например «… 02-03.26.docx».

Документ «Приложение к форме 28 «Отчёт по видам выполненных работ»»: строка «Должность, ФИО преподавателя» и таблица из десяти занятий февраля и марта 2026 года с датой, двумя академическими часами, группой, видом занятия — лабораторная или лекция, — дисциплиной «Системы искусственного интеллекта» и темой
Готовое приложение к форме 28. Данные вымышленные.

Шаблон документа сделан из настоящего заполненного отчёта кафедры. Скрипт заменил в нём фамилии и данные метками, убрал автора из свойств файла и сделал так, чтобы строка заголовков таблицы повторялась на каждой странице. Сама логика — какие занятия попадают в отчёт и какая у каждого тема — написана на чистом Dart, без Flutter, и проверяется модульными тестами напрямую.

Темы, которые продолжаются от отчёта к отчёту

Самое трудоёмкое в таком отчёте — колонка тем. Для неё в разделе «Темы занятий» хранится тематический план отдельно для каждой дисциплины и вида занятия: темы по порядку, и каждая — на столько-то занятий подряд. План можно вставить списком вида «Pandas ×4» или взять из прошлого отчёта в .docx.

Темы отсчитываются от начала семестра: весенний идёт с февраля по август, осенний — с сентября по январь. Поэтому отчёт за следующий месяц продолжает план с того места, где остановился предыдущий, и ничего не нужно сдвигать вручную. Каждая группа, или несколько групп, которые занимаются вместе, проходит план по-своему: если у одной группы занятий было больше, её темы ушли дальше.

Тему любого занятия можно изменить — только для него или для всей темы сразу. Занятие, исключённое из отчёта, темы не забирает. Если переключатель «Заполнять темы» выключен, колонка остаётся пустой и заполняется вручную. Строка с должностью и ФИО и подпись заведующего кафедрой запоминаются.

Почта больше не забывает пароль

До версии 0.5.4 один отказ сервера стирал сохранённый пароль почты. Достаточно было оборваться соединению во время входа или на минуту заблокироваться учётной записи — и уведомления о новых письмах молча прекращались до следующего входа вручную.

Теперь пароль забывается только по кнопке «Выйти» или когда сервер принял новый. Отказ по сохранённому паролю перепроверяется один раз на свежем соединении: аутентификация NTLM привязана к соединению, и старое могло быть уже испорчено. Если сервер отказал снова, проверки приостанавливаются на час, затем на три и на двенадцать. Действительно неверный пароль, который приложение повторяло бы каждые несколько минут, мог бы заблокировать учётную запись в университетском домене, а так этого не произойдёт.

Список «Входящие» с красной полосой «Сервер не принял пароль — показаны сохранённые письма» и кнопками «Повторить» и «Ввести новый»; ниже письма за сегодня, вчера и октябрь
Сервер не принял пароль: письма на месте.

Вместо пустой формы входа экран почты показывает сохранённые письма и полосу «Сервер не принял пароль» с кнопками «Повторить» и «Ввести новый». Фоновая проверка выводит одно уведомление «Почта не принимает пароль» и снимает его, когда сервер снова примет пароль. Каждый отказ попадает в «Отчёты об ошибках»: время и ответ сервера — код, диагностический заголовок Exchange, заголовок страницы, — но никогда логин или пароль. Поля входа теперь понимает менеджер паролей телефона: он подставляет логин и пароль и предлагает сохранить их только после успешного входа, а не пару, которую сервер отверг.

Обновление без перезапуска

Вторая неприятность была тоньше. Сессия Exchange отправляет запросы по одному через одно соединение. Ожидание заголовков ответа было ограничено по времени, а чтение тела ответа — нет. Если соединение умирало на середине ответа — приложение заснуло в фоне, мобильная сеть молча его сбросила, — чтение ждало вечно, а все следующие запросы выстраивались за ним в очередь. Не помогали ни обновление жестом, ни возврат в приложение — только перезапуск.

В версии 0.5.5 каждое чтение сдаётся после 30 секунд тишины, и любая сетевая ошибка сбрасывает соединение, так что следующий запрос начинается на новом. После долгого простоя — например, когда приложение было заморожено системой — соединение тоже не переиспользуется. Допустимое время отправки растёт с размером письма из расчёта 50 КБ/с, чтобы большое вложение успело уйти. А открытый список писем сам проверяет новую почту каждые две минуты.

Письма, с которыми можно работать

Версия 0.5.6 делает текст письма активным. Ссылки, адреса, номера телефонов и даты подчёркиваются — и в HTML-письмах, и в простом тексте. Нажатие открывает панель с действиями, не покидая приложения.

Письмо «Защита практики»: кнопка «Присоединиться · Телемост», полоса «Картинки из интернета скрыты» с кнопками «Показать» и «Всегда»; в тексте подчёркнуты дата 24 октября, срок 30.10.2026, ссылка на встречу, адрес и два телефона
Дата, ссылка, адрес и телефоны в письме подчёркнуты.
Панель ссылки «volgatech.net» с адресом volgatech-login.example и красным предупреждением о фишинге; ниже действия «Открыть в браузере», «Копировать ссылку», «Копировать текст ссылки» и «Поделиться»
Текст ссылки называет один сайт, а ведёт она на другой.
Меню письма: найти в письме, ссылки в письме — 3, ответить с цитатой выделенного, копировать текст, поделиться текстом, перевести, размер текста, всегда показывать картинки, сохранить отправителя в контакты, отписаться от рассылки
Меню письма.
  • Ссылка показывает полный адрес, где сайт выделен жирным, и даёт открыть, скопировать адрес или текст ссылки, поделиться. Если текст ссылки называет один сайт, а ведёт она на другой, панель предупреждает, что так выглядят фишинговые письма.
  • Приглашение на встречу в Телемосте, Контур.Толке, VK Звонках, Zoom, Teams, Google Meet, SaluteJazz или МТС Линке получает над письмом кнопку «Присоединиться».
  • Телефон распознаётся в форматах +7…, 8… и как городской номер после «тел.», с добавочным: позвонить, отправить SMS, скопировать, добавить в контакты.
  • Адрес почты открывает новое письмо здесь же, в приложении; дату можно добавить в календарь.

Меню письма «⋮» собрало остальное: поиск по письму, список всех ссылок, ответ с цитатой выделенного фрагмента, копирование, отправка и перевод текста, размер шрифта, тёмное письмо в тёмной теме, сохранение отправителя в контакты вместе с телефоном из подписи и отписка от рассылки. При написании письма появились «Шаблоны» — часто используемые фразы, которые вставляются одним нажатием.

Картинки по запросу

Картинки из интернета в письме теперь скрыты, пока не нажать «Показать» для этого письма, «Всегда» для этого отправителя или «Всегда показывать картинки» в меню. Причина — слежение: загрузка картинки сообщает отправителю, что письмо открыли. В письмах, которые сервер пометил *** SPAM ***, картинки загружаются только вручную. Загружаются они лишь по https, а скрипты в письмах по-прежнему заблокированы. Нажатие на картинку открывает её на весь экран — увеличить, сохранить или поделиться. Заодно узкие колонки таблиц в письмах перестали разрывать слова посередине.

Матовое стекло и невидимая кнопка

Матовое стекло темы Liquid Glass получило собственный ползунок «Сила эффекта»: прозрачное и матовое стекло помнят каждое своё значение, и переключение между ними его не сбрасывает. Тесты контрастности теперь прогоняют и матовое стекло на всём диапазоне от 100 до 0 %.

Последнее исправление нашлось в браузерной версии. Без стекла кнопка «Сохранить» на странице с шапкой отчёта была фирменного синего цвета на синей панели — то есть невидимой. Шапку закрывали кнопкой «назад», и введённое не сохранялось. Теперь кнопка окрашена как текст панели, а выход «назад» тоже сохраняет изменённые поля.

Выводы

  1. Отчёт, который собирается из уже загруженного расписания, экономит не только время, но и ошибки переписывания: дата, группа и вид занятия берутся там же, где их видит преподаватель.
  2. Тематический план, отсчитанный от начала семестра, превращает ежемесячный отчёт в продолжение предыдущего, а не в новую работу.
  3. Сохранённый пароль нельзя стирать по первому отказу, но и повторять его бесконечно нельзя: пауза, растущая с каждым отказом, защищает учётную запись от блокировки.
  4. У каждого сетевого чтения должен быть предел ожидания: одно оборванное соединение без него останавливает всю очередь запросов.
  5. Картинки по запросу и предупреждение о несовпадении текста ссылки с адресом — недорогая защита от слежения и фишинга.

Доступность

Отчёт о почасовой нагрузке есть во всех сборках, начиная с версии 0.5.5; почта — в сборках app-mail-*. Начиная с версии 0.5.1 приложение само предлагает обновление в «Настройках» → «Обновления».

Теги

программирование flutter dart мобильная-разработка docx почта

Другие обновления по проекту

12.10.2026 Технический разбор Волгатех.Коллектив — мобильный личный кабинет работника ПГТУ

Волгатех.Коллектив: Liquid Glass — стекло, иней и узоры времён года

Как в приложении появилась тема «Liquid Glass»: полупрозрачные панели над цветным фоном, матовое стекло, иней из фрактальных кристаллов и узор по времени года — листья, иней, цв...

12.10.2026 Технический разбор Волгатех.Коллектив — мобильный личный кабинет работника ПГТУ

Волгатех.Коллектив: обновление из приложения, версия для iPhone и компьютеров, напоминания и виджет

Версии 0.5.1 и 0.5.2: приложение само предлагает обновление и проверяет файл перед установкой, работает в браузере — на iPhone без App Store и на компьютере в своей раскладке, н...