История изменений

Все обновления PinPilot — исправления, новые функции и улучшения

1.3.20
Исправлено
  • Дубли пинов при автопостинге: в createPin перед основным запросом выполнялся v3-каскад из четырёх запросов. Два из них возвращали «тихие» HTTP 200 с HTML — Pinterest создавал пин, но приложение не распознавало успех и создавало второй пин. Теперь на каждый пин ровно один запрос: PinResource для изображений, StoryPinResource для видео, WebView-фолбэк только при ошибке всех API
Изменено
  • Версия: 1.3.19 → 1.3.20 (code 29)
1.3.19
Исправлено
  • Лимит постов в день теперь соблюдается: раньше при делегировании интервалов общий лимит применялся к одному проходу цикла, а не к суткам — потоки постили заново каждый цикл. Теперь лимит считается по скользящему окну 24 часа: остаток = лимит минус посты за последние 24 часа, делится на число включённых потоков. Если остаток исчерпан — цикл пропускается
Изменено
  • База данных: версия 21 → 22, новая таблица post_log с метками времени каждого поста для скользящего окна, старые записи удаляются автоматически
  • Версия: 1.3.18 → 1.3.19 (code 28)
1.3.18
Добавлено
  • Глобальная настройка постинга в «Потоки автопостинга»: общий лимит постов в день (до 250) на все потоки вместо ручного ввода лимита в каждом
  • Счётчик «Готово к постингу» — сколько постов реально заготовлено во включённых потоках (файлы галереи + неиспользованные изображения и видео коллекций)
  • Кнопка «Рассчитать» — автоматически распределяет лимит по потокам и доскам, показывает интервал между постами и приглашает запустить автоматизацию
  • Переключатель «Делегировать интервалы приложению» — приложение само задаёт лимит и интервалы по глобальному лимиту, а поля интервалов и лимита в настройках потока блокируются
Изменено
  • Автоматор учитывает делегирование: при включённой настройке глобальный лимит делится поровну на включённые потоки, интервал считается автоматически по окну расписания
  • Версия: 1.3.17 → 1.3.18 (code 27)
Исправлено
  • Удалённые коллекции больше не возвращаются: убрано автосоздание тестовой коллекции «videotext» при каждом запуске приложения
  • Отписка взаимных: при включённой отписке только невзаимных признак взаимности берётся сначала из списка подписок, а повторная проверка по профилю консервативна — если профиль не отдаёт поля взаимности, подписчик не отписывается
1.3.17
Добавлено
  • Статистика привязана к аккаунту (БД Room): каждый аккаунт ведёт собственную статистику, без примесей от других
  • Детальная раскладка статистики: тап по карточке «Статистика» открывает разбивку по дням (посты/лайки/подписки/отписки/ошибки) и по доскам
Изменено
  • Отписка невзаимных: взаимность проверяется через профиль кандидата — взаимные подписчики больше не отписываются
  • Версия: 1.3.16 → 1.3.17 (code 26)
1.3.16
Исправлено
  • Дублирующиеся пины при автоматизации: раньше для одного материала приложение пробовало каскад из ~8 вариантов создания пина (v3 ×4, ApiPinResource, Pin, ApiCResource, PinResource, StoryPinResource, WebView). Если один вариант «тихо» создавал пин (HTTP 200 без распознанных данных), следующий создавал дубль — риск бана за спам. Теперь для изображений используется только PinResource, для видео — только StoryPinResource, и любой успешный ответ считается созданным пином с немедленной остановкой. Один пост = ровно один пин
  • Доски сохранялись без ID: если список досок не был свежим при сохранении настроек, доска записывалась голым именем без пары id:name → Пинтелрест отвечал «Доска не найдена». Теперь при сохранении имена сопоставляются с существующими ID досок
Изменено
  • Версия: 1.3.15 → 1.3.16 (code 25)
1.3.15
Исправлено
  • Ночная пауза автоматизации при пропаже интернета: добавлена проверка сети перед каждым циклом — при отсутствии соединения (например, включён авиарежим) приложение ждёт 5 минут с понятным статусом вместо молчаливого зависания на часы, и продолжает работу, когда интернет возвращается
  • Анимация цифр статистики замедлена — плавный пересчёт 1.2–3.2 сек (было 0.5–1.6 сек)
Изменено
  • Версия: 1.3.14 → 1.3.15 (code 24)
1.3.14
Исправлено
  • Статистика больше не «скачет вниз»: устранены гонки при инкременте (синхронизация), миграция legacy-файлов по максимуму и конфликты старых файлов — счётчики стабильно растут
  • Статистика привязана к username: единый ключ SharedPreferences вместо отдельных файлов на аккаунт — цифры не теряются при смене аккаунта
  • Пауза после битой картинки: если пост не удался, поток ждёт 20 секунд и переходит к следующему изображению вместо полной задержки 45–60 минут
Изменено
  • Версия: 1.3.13 → 1.3.14 (code 23)
1.3.13
Исправлено
  • Пауза после битой картинки: если пост не удался (повреждённое изображение, ошибка загрузки или создания пина), поток больше не ждёт полную задержку 45–60 минут — пауза 20 секунд и переход к следующему изображению. Полная задержка ставится только после успешного поста
  • Заморозка фоновой работы: процесс больше не усыпляется системой (Doze) в середине цикла — добавлен WakeLock
Добавлено
  • Запрос разрешения работать в фоне при запуске автоматизации (исключение из оптимизации батареи) — защита от жёсткого энергосбережения на itel и других устройствах
Изменено
  • Версия: 1.3.12 → 1.3.13 (code 22)
1.3.12
Исправлено
  • Лимит подписок: 401 теперь трактуется как rate-limit — цикл подписок прерывается сразу вместо фоллбека на WebView и десятков ошибок в логах
  • Консервативные дефолты: maxFollowsPerDay = 15 (было 50), задержка между подписками 60–180 сек (было 30–90) — снижен риск блокировок при длительной работе
  • SessionManager fallback: maxFollows = 15 (было 20)
Изменено
  • Версия: 1.3.11 → 1.3.12 (code 21)
1.3.11
Исправлено
  • Дубликаты аккаунтов: аккаунт теперь идентифицируется по стабильному Pinterest user id (миграция БД 17→18) — вход больше не создаёт копию, даже если извлечение никнейма упало и вернулся display name вместо реального ника (Soulexpert / breathefree0177)
  • Единственный активный аккаунт: при входе в другой аккаунт старый больше не остаётся активным — потоки, коллекции и настройки предыдущего аккаунта больше не отображаются в новом
  • Автообновление сессии: авторизованные куки больше не перезаписываются гостевой сессией при обновлении cookies — устранены массовые ошибки 401 после 25-минутного автообновления
  • Надёжное извлечение никнейма: API-запрос пробует ru.pinterest.com, если в www-куках нет csrftoken; все сбои логируются
Изменено
  • Версия: 1.3.10 → 1.3.11 (code 20)
1.3.10
Исправлено
  • Лимит подписок Pinterest: при срабатывании анти-бот лимита (HTTP 429) цикл подписок останавливается с одним предупреждением вместо десятков ошибок — статистика больше не засоряется
  • Статистика ошибок: ошибки подписки по rate-limit больше не увеличивают счётчик Errors в главном окне
Изменено
  • Версия: 1.3.9 → 1.3.10 (code 19)
1.3.9
Исправлено
  • Дубликаты аккаунтов при повторном входе: вход через «Сменить аккаунт» больше не создаёт новый пустой аккаунт, если регистр логина отличается (pinpilot1 / PinPilot) — аккаунт ищется по логину и по cookie сессии, все его потоки и коллекции сохраняются
  • Приоритет авторизованных cookies: при автообновлении сессии гостевая cookie больше не перезаписывает авторизованную — выбирается сессия с признаком входа (__Secure-s_a)
  • Публикация пинов: создание пинов снова работает через PinResource/create/ после повторной авторизации
Изменено
  • Версия: 1.3.8 → 1.3.9 (code 18)
1.3.8
Исправлено
  • Бейдж «Использовано» теперь показывается зелёным в режиме выделения — был невидим на тёмном фоне
  • Follow через WebView при 401: если API возвращает 401, подписка выполняется через WebView как запасной вариант
  • WebView follow: используется Handler вместо view.postDelayed для headless WebView — метод postDelayed не работает без attached window
Добавлено
  • Автоудаление использованных изображений при включённой настройке deleteUsedImages — файлы удаляются после публикации
Изменено
  • Версия: 1.3.7 → 1.3.8 (code 17)
1.3.7
Исправлено
  • TikTok: кнопка «Парсить ещё» на экране деталей коллекции теперь работает — дозагружает видео по ключевому слову
  • TikTok: кнопка «Парсить» в списке коллекций больше не скрыта — можно запустить парсинг повторно
  • Парсинг из списка коллекций: для TikTok-коллекций запускается TikTokParser вместо ImageParser
  • Подпись в диалоге TikTok: убрано «Видео скачиваются на устройство» — видео сохраняются как ссылки
Добавлено
  • Дозагрузка видео: можно повторно спарсить TikTok-видео по тому же ключевому слову, не создавая новую коллекцию
Изменено
  • Версия: 1.3.6 → 1.3.7 (code 16)
1.3.6
Добавлено
  • Автообновление сессии: каждые 25 минут приложение незаметно обновляет cookies через WebView — сессия больше не истекает через час
  • Восстановление после сбоя сессии: если автоматизация обнаружила потерю авторизации — сначала пробует обновить куки, а не останавливается сразу
Исправлено
  • CSRF-токен: теперь берётся настоящий csrftoken из cookies вместо случайной строки — API перестал отвечать 403 на часть запросов
Изменено
  • Версия: 1.3.5 → 1.3.6 (code 15)
1.4.0
Добавлено
  • Автоматизация продолжает работать, даже если свернуть приложение или заблокировать экран — в статус-баре появляется уведомление с кнопкой остановки
  • TikTok: поиск видео по ключевому слову — можно создать коллекцию видео, указав тему вместо ссылки
  • TikTok: диалог создания коллекции с полем ключевого слова и подсказками
Исправлено
  • Исправлена редкая ошибка при запуске приложения без подключения к интернету
  • Исправлено дублирование потоков автопостинга — потоки больше не удваиваются при повторном входе в настройки
  • Статистика теперь привязана к аккаунту — при смене профиля показываются цифры только текущего аккаунта
Изменено
  • Автоматизация продолжает работать, даже если свернуть приложение или заблокировать экран — в статус-баре появляется уведомление с кнопкой остановки
1.3.5
Исправлено
  • Парсинг досок: resolveBoardNames больше не удаляет доски, если имена не совпали с API — только предупреждение
  • Сортировка досок: новые доски теперь вверху списка при выборе (сортировка по ID, не reversed)
  • Потоки без досок: если у потока нет выбранных досок, используется доска из общих настроек аккаунта
  • resolveBoardNames: добавлено сохранение name->id из ответа API — раньше массив досок оставался пустым
  • Цикл перебора username в resolveBoardNames: исправлен continue на break при несовпадении досок
Изменено
  • resolveBoardNames использует реальный Pinterest username вместо названия аккаунта в приложении
  • Версия: 1.3.4 → 1.3.5 (code 14)
1.3.4
Добавлено
  • Парсинг изображений через SearchResource API — надёжнее и больше картинок, чем HTML-регулярки
  • Иконки редактирования и удаления на карточках коллекций — долгий тап больше не единственный способ
  • Название доски в карточке потока — «Доска: Путешествия» сразу видно без открытия
Изменено
  • Выбор досок: отображаются только названия, без числового ID
  • Выбор коллекции в потоке: только название, без ключевого слова в скобках
  • Значения по умолчанию: мин. задержка 45 мин, макс. 60 мин, макс. постов 50
  • Новые доски в начале списка выбора
  • Версия: 1.3.3 → 1.3.4 (code 13)
Исправлено
  • Изоляция аккаунтов: коллекции больше не смешиваются между разными аккаунтами
1.3.3
Исправлено
  • Кнопка «Остановить» теперь работает — флаги автоматизации передаются напрямую через Intent, без гонки с БД
  • Приложение больше не вылетает при авто-восстановлении автоматизации с выключенными тумблерами
Изменено
  • Версия: 1.3.2 → 1.3.3 (code 12)
1.3.2
Исправлено
  • Авторизация: зелёная надпись «Авторизовано» больше не появляется на странице входа — приложение ждёт реального логина, даже если есть старые cookies
  • Поиск авторов для автоподписки: переписан на API Pinterest — теперь находит 48+ авторов за запуск вместо 0
  • Подписка на найденных авторов: API follow подтверждён рабочим (code 200 success)
Изменено
  • Версия: 1.3.1 → 1.3.2
1.2.1
Исправлено
  • Исправлена редкая ошибка при запуске приложения без подключения к интернету
1.2
Добавлено
  • URL-постинг: создание коллекции по ссылке на страницу — парсер извлекает все изображения (img src, og:image, twitter:image)
  • Превью по URL: изображения в коллекции загружаются через Coil прямо с сайта-источника, не занимая память устройства
  • Прямые ссылки: при автопостинге используется URL изображения вместо multipart-загрузки — экономия трафика и времени
  • Умное определение типа: URL-коллекции отображают адрес источника, кнопка «Парсить ещё» для дозагрузки, кнопка «Добавить из галереи» скрыта
1.1.5
Добавлено
  • Форма обратной связи с полем «Тема обращения» — при отправке открывается почтовый клиент с предзаполненными данными и вложенным лог-файлом
  • Логирование ошибок автоматизации в файл — все ошибки пишутся в pinflow_log.txt для анализа
Изменено
  • Отправка отзывов через почтовый клиент на support@pinpilot.ru (вместо отправки на сервер)
  • Ошибки автоматизации теперь сохраняются в лог-файл — не теряются при перезапуске приложения
1.1.4
Исправлено
  • Удаление использованных изображений — при включённой настройке удаляется и файл, и запись из БД (больше нет пустых клеток)
  • Диалог выбора досок больше не всплывает автоматически при входе в настройки
  • Клип на поле досок открывает выбор из уже загруженных
  • Логирование ошибок createPin для отладки зависших запросов
  • Cookie-баннер скрыт по умолчанию, появляется только при первом визите
  • Мобильное бургер-меню: крест при открытии, белый текст кнопки
Добавлено
  • Кнопка «Выбрать все» в коллекциях — выделяет все изображения за раз
  • Одноколоночный обзор — изображения во всю ширину экрана с сохранением пропорций
  • Кнопка «Отклонить» в cookie-баннере (ФЗ-152)
  • Кнопка «Buy» внутри мобильного меню
  • Страница changelog для отслеживания обновлений
Изменено
  • Удалён demo.mp4 (6 МБ) — не использовался
  • Усилен пароль админки
  • API-ключи перенесены в .env (chmod 600)
  • Rate limiting 30 req/min на платёжных эндпоинтах
  • bcrypt для паролей партнёров
  • Лого: png (876KB) → WebP (79KB)
  • OG-изображение 1200×630, canonical на partner-страницы
  • gzip включён в nginx
1.1.3
Исправлено
  • ProGuard R8: убран `-repackageclasses a`, добавлены `-keep` правила
  • Видео-пины: StoryPinResource/create/ с полным story_pin JSON
  • Доски: авто-фикс board IDs при запуске
  • Партнёрский дашборд: исправлена ошибка с закрытием БД
Изменено
  • Реф-коды партнёров в нижнем регистре
  • Минимальная выплата: 2 000 ₽
  • APK v1.1.3 (code 5) загружен на сервер
1.1.2
Исправлено
  • getFollowing: HTML-скрапинг → API UserFollowingResource/get/
  • unfollowUser: break после первого успешного запроса — цикл в 9× быстрее
  • Параллельные instance: guard от двух экземпляров
  • canvasAspectRatio: locale bug (запятая vs точка)
1.1.1
Исправлено
  • Дневной лимит отписок (maxUnfollowsPerDay) теперь действительно работает
  • Карточка статистики: счётчики не выходят за рамки при 4+ цифрах
Добавлено
  • Подсказки по требованиям к изображениям при создании коллекции
1.1
Добавлено
  • Автоподписки и отписки через внутренний API Pinterest
  • Подписка на подписчиков конкурентов
  • Пакетная отписка с настраиваемым интервалом
  • Видео-коллекции
  • Кастомные иконки приложения
  • Яндекс Метрика + Google Analytics
  • Оплата через YooKassa (карты, СБП, SberPay)
  • sitemap.xml, robots.txt
Изменено
  • Приложение переименовано в PinPilot
  • Room DB: версия 6 → 10
  • Оплата: Prodamus → YooKassa
1.0
Добавлено
  • Первый релиз: автопостинг, лайки, парсинг контента
  • Спинтакс для заголовков и описаний
  • Коллекции изображений (парсинг + галерея)
  • Управление досками
  • Авторизация через cookie в WebView
  • Система лицензий с оплатой через CryptoBot