Skip to content

0.5.1: выбор нескольких файлов в «Медиа», скачать или удалить разом - #10

Merged
Aniforka merged 1 commit into
mainfrom
ccr-5d5262e3-twsugo
Oct 6, 2026
Merged

Aniforka merged 1 commit into
mainfrom
ccr-5d5262e3-twsugo

Conversation

@Aniforka

@Aniforka Aniforka commented Oct 6, 2026

Copy link
Copy Markdown
Owner

Что сделано

В галерее «Медиа» появился режим множественного выбора, как в обычных галереях телефона.

  • Вход в выбор: зажать плитку на ~450 мс (на телефоне короткая вибрация; сдвиг пальца или прокрутка отменяют), на ПК правый клик или новая кнопка «выбрать» рядом с ⟳.
  • В режиме выбора: тап отмечает или снимает плитку; «все» выделяет то, что видно с учётом фильтра и поиска, и превращается в «снять».
  • Панель внизу: число выбранных и их размер; «скачать», «удалить 🔒», «✕ готово». Выход также по Esc или при переходе на другую вкладку.
  • Скачать: один файл как раньше; несколько — одним zip-архивом или отдельными файлами (на телефоне по умолчанию отдельными, чтобы попали в галерею, на ПК — zip).
  • Удалить: один PIN на все выбранные; в ответе видно, что удалено и что нет.

Сервер

  • GET /api/media/zip?t=<token>&ids=a,b,c — Дек сразу отдаёт zip без сжатия (медиа и так сжаты): файлы разложены по папкам игр (<игра>/<файл>), клипы Steam как .mp4, одинаковые имена нумеруются. Все id проверяются до начала ответа, так что неизвестный id даёт 404, а не обрезанный архив. Нужен пароль медиа.
  • POST /api/media/delete теперь принимает и ids (список); вариант с одним id работает как раньше.

Ограничение: размер zip заранее неизвестен, поэтому браузер покажет только сколько уже скачано, без процентов.

Прочее

  • Переводы en/ru, описание в обоих README, раздел 0.5.1 в CHANGELOG, версия поднята до 0.5.1.
  • Новый tests/test_media.py: в архиве ровно выбранные файлы; без пароля медиа архив не отдаётся; с неверным PIN ничего не удаляется; удаление одного файла работает как раньше.

Проверка

Локально прошли pyflakes, tools/changelog.py --check, сборка, все 96 юнит-тестов (включая test_user_data.py), smoke из исходников и собранного файла, tests/ui_check.py на обоих языках. Отдельно прогнал в headless Chromium: зажатие пальцем (touch-события) на телефонном экране, выбор, «все»/«снять», скачивание zip, удаление с PIN; на ПК — правый клик, кнопка «выбрать», Esc. Скриншоты в README не переснимал.

🤖 Generated with Claude Code

https://claude.ai/code/session_0117oG9pVCiLVdgdzWJT9nJH


Generated by Claude Code

Holding a tile in the gallery (450 ms, cancelled by moving or scrolling;
right-click on a PC, or the new "select" button) switches it to
selecting. Taps then toggle tiles, "all" selects what the filter shows,
and a bar at the bottom shows the count and size with "download" and
"delete". Esc, "done" or leaving the tab ends it.

Download: one item is fetched as before; several either as separate
files or as one zip from the new GET /api/media/zip?t=&ids=, which the
Deck streams without compression (media is compressed already) under
<game>/<file>, Steam clips as mp4, same names numbered. Every id is
checked before the answer starts, so a stale one is a 404, not a cut zip.

Delete: /api/media/delete also takes "ids" and deletes them all with one
PIN, reporting what was removed and what failed.

tests/test_media.py runs the server on a throwaway ~/Pictures: the zip
holds exactly the selected files, needs the media password, a wrong PIN
deletes nothing, and deleting one item works as before.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0117oG9pVCiLVdgdzWJT9nJH
@Aniforka
Aniforka merged commit 7072b27 into main Oct 6, 2026
6 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants