Skip to content

feat(toolbar): show when extraction presets use ordinary conversion - #1420

Open
SeoJCalive wants to merge 1 commit into
mainfrom
feat/1091-ordinary-conversion-notice
Open

SeoJCalive wants to merge 1 commit into
mainfrom
feat/1091-ordinary-conversion-notice

Conversation

@SeoJCalive

Copy link
Copy Markdown
Collaborator

What does this change?

Closes #1091. Before running, the donut centre and the existing Available presets tooltip now tell users when an extraction preset will perform an ordinary conversion instead of its named operation, without blocking the action. The maintainer-decided direction, our own choices and one wording question are under Notes for review.

Type of change

  • Bug fix
  • New feature or improvement
  • New format or engine
  • Translation
  • Documentation
  • Build, CI or dependencies

How was it tested?

  • dotnet format --verify-no-changes: dotnet format Filee.slnx --verify-no-changes --no-restore --severity warn exits 0.
  • dotnet test: related App filters (513 passed, 5 macOS-only skipped), Core JobQueueTests (59 passed, 3 Windows-only skipped) and the new tests (35 App + 3 Core) on 5b91b379, 0 failed. The App full suite could not finish on my Linux server (see below), so it is left to this PR's CI.
  • Tried it in the app (what you converted or clicked, and on which OS): not in a running desktop app. Real Avalonia controls were rendered headlessly on Linux/Skia and inspected in English and German, in light and dark themes; a CLI smoke run converted a still PNG through both frame presets.
Details

Rebased the uncommitted change from 47e24cd3 onto c458122f, then onto 5b91b379. The latest three-way application was conflict-free; all 132 notice keys/values and upstream's new locale keys were retained. No feature code changed in the latest rebase.

Verification Result
Solution Release Rebuild on 5b91b379 0 errors; 26 warnings, exactly equal to the detached clean-base warning set, including multiplicity (earlier baselines: 21 on c458122f, 17 on 47e24cd3)
Related App tests on 5b91b379 513 passed, 5 macOS-only cases skipped, 0 failed, with xUnit collection parallelism disabled
LocalizationTests on 5b91b379 168 passed, 0 failed or skipped, also included in the related App filter
New tests on 5b91b379, one fresh-process run 35 App + 3 Core passed, 0 failed or skipped; subsets of the related filters
Core JobQueueTests on 5b91b379 59 passed, 3 Windows-only cases skipped, 0 failed
Historical new tests on 47e24cd3, three runs Each run: 35 App + 3 Core passed, 0 failed or skipped
Historical new tests on c458122f, one fresh-process run 35 App + 3 Core passed, 0 failed or skipped
Historical post-translation rerun on 47e24cd3 After the translation-only fit corrections, the Release rebuild and format check were rerun successfully. Related totals unchanged at 507 App / 48 Core passed; an additional separate 35 App + 3 Core passed, 0 failed or skipped
Historical App full suite on 47e24cd3 (Linux, Xvfb) 2,312 passed, 8 failed, 28 skipped (2,348 total). Seven failures also fail on a clean 47e24cd3 run in this environment (Hindi/emoji Annotate text, Japanese font fallback, GNOME pointer bridge sockets, Engines page render). The eighth, AskPagesTests.The_window_fits_in_light_and_dark(bn-BD, dark), failed only in the full run; the Ask window uses none of the changed code or keys, and AskPagesTests passes 22/22 when rerun on its own. Not rerun locally on c458122f or 5b91b379: on this server the c458122f App suite takes about four hours, and a run of it for another branch was stopped by the per-user thread limit. This PR's CI covers the full suite.
Mutation checks Original base: 14/14 detected and restored green. On c458122f: reran M07–M12 and M14, 7/7 detected and restored green after successful builds. The M08 rerun removed the notice from the actual centre renderer to verify that the rendering assertions detect the omission. M01–M06's classification targets and M13's tooltip row were unchanged and were not rerun. No mutation target code changed between c458122f and 5b91b379, so none was rerun in the latest rebase
Historical CLI smoke on 47e24cd3 Still PNG through both frame presets produced nonempty PNG/JPG outputs without changing the source
Screenshot recapture on c458122f All 12 final crops recaptured and inspected; eight donut PNGs changed with upstream's centre rendering, four tooltip PNGs remained byte-identical; temporary capture code removed
Localization fit on c458122f All 22 languages: 66 donut + 66 tooltip notices fit, with no collapsed/overflowed lines; 12 supplementary English/German dark rows passed. No further translation edits were needed

The 5b91b379 rebase did not require fit remeasurement or screenshot recapture: no locale conflict occurred, the 132 notice values are unchanged, and upstream changed none of the notice renderer, tooltip, or classification files. Existing captures and measurements above remain historical evidence rather than newly claimed runs. All latest builds and test processes used DOTNET_PROCESSOR_COUNT=4 and the 12 GB memory scope; App tests used Xvfb/X11 and serialized xUnit collections.

Verification limits and UI observations

  • FFmpeg-dependent LivePhoto extraction/refusal was not verified: 17 cases were skipped because FFmpeg is absent; the two engine-independent cases passed. The mixed-source Core refusal regression uses deterministic converters, not a real FFmpeg extraction.
  • New translations are machine translated and not native-reviewed. English and Korean are unapproved reference drafts; no language has received native-speaker sign-off.
  • The initial Russian ellipsis was fixed through translations only. Actual line-layout measurements at the default donut size now show no truncation in any of the 22 languages' three donut notices or three editor notices. This Linux/headless measurement is not native-speaker approval or a claim about every OS/font configuration.
  • Native desktop drag/drop and Windows/macOS visual QA were not run for this PR. The earlier out-of-scope JP font test failure is recorded in the baseline; font selection was not changed. This UI change needs the macos CI label when the PR is opened.

Screenshots (UI changes)

Mixed PNG + MP4 drop, English/light: only the still image takes the ordinary-conversion path.

English light donut centre: Some files run as ordinary conversions, with Drop to Extract frames PNG guidance

These are crops of real controls at their existing logical size, rendered at 2x pixel density. The donut profile has only a front face. The editor tooltip uses PNG as its specified input format. Converter routes are deterministic test fixtures; screenshots are not evidence of real-engine conversion.

Single-file, mixed-drop, and editor tooltip comparisons; English and German
LightDark
English, single PNG
English light single-file ordinary-conversion notice
English, single PNG
English dark single-file ordinary-conversion notice
English, PNG + MP4: representative image above. English, PNG + MP4
English dark mixed-drop ordinary-conversion notice
English, Available presets tooltip
English light editor tooltip with the additional input-format notice
English, Available presets tooltip
English dark editor tooltip with the additional input-format notice
German, single PNG
German light single-file ordinary-conversion notice
German, single PNG
German dark single-file ordinary-conversion notice
German, PNG + MP4
German light mixed-drop ordinary-conversion notice
German, PNG + MP4
German dark mixed-drop ordinary-conversion notice
German, Available presets tooltip
German light editor tooltip with the additional input-format notice
German, Available presets tooltip
German dark editor tooltip with the additional input-format notice

Checklist

  • New UI strings are in all src/Filee.App/Assets/i18n/*.json files
  • New third-party code or binaries are listed in THIRD-PARTY-NOTICES.md
  • The PR does one thing (unrelated changes go in a separate PR)

Notes for review

Issue: #1091
Maintainer decision: #1091 (comment)

Maintainer-decided direction

  • Show the donut notice in its centre, where it is visible during a drag, while retaining the click/drop guidance.
  • Add one line to the existing Available presets tooltip, based on the edited donut's input formats, without changing the item layout.
  • Limit this change to Extract frames (PNG), Extract frames (JPG), and Extract Live Photo video, using a fixed list.
  • Use shared wording, distinguish mixed drops, and refer to input formats rather than a current file in the editor.

The other candidate presets in the issue remain follow-up work, as requested in the decision comment.

What changed

  • Classify the three presets using their current per-input frame/motion conditions and the existing runnable-route checks. Unavailable inputs are not counted as ordinary conversions; opaque envelopes are not inspected.
  • Show the notice on runnable slices on either face and inside groups. Clear it on cancellation, leaving, flipping, and reuse; retain the existing action guidance.
  • Update the existing cached tooltip when the edited profile's input formats change. Empty or unspecified inputs do not make a claim about a current file.
  • Add six complete-sentence localization keys in all 22 language files.
  • Shorten three measured-overflow translations (Russian all/some and Turkish all) so the complete notice survives the default centre formatter, without changing production layout.
  • Add real-control regression tests and one mixed-source Core theory with three cases. Conversion behavior, errors, missing-engine messages, preset names, settings, and default placement are unchanged.

Our choices, open to feedback

  • The notice replaces the file-count heading while active. Its measured text and action guidance are scaled together to fit the existing centre.
  • We added explicit "All convertible files..." and "All convertible input formats..." sentences alongside the single/some variants. "Convertible" limits the claim to runnable inputs; it does not promise conversion success.

Maintainer question: Are these separate "all convertible files/input formats" variants appropriate in addition to the three example phrases in the decision comment, or would you prefer different wording?


- **업로드하며 생긴 줄 지우기:** PR 화면에 사진을 끌어다 놓으면서 생긴 `<img ...>` 12줄은 지우고, 위 본문으로 통째로 바꿔 주세요.
- **본문 속 메모 한 줄:** 접기 영역 안에 "This UI change needs the `macos` CI label when the PR is opened."라는 문장이 리뷰를 통과한 원문 그대로 남아 있습니다. 메인테이너가 읽어도 문제는 없지만, 라벨을 붙인 뒤 이 문장을 빼도 됩니다.

Keep extraction presets usable while showing an input-dependent notice in
the donut centre and the Available presets tooltip.

Cover the three agreed extraction presets, distinguish mixed inputs, and
add the notice in every supported language. Test real controls, cached
tooltip updates, and per-source extraction flags in a mixed queue.

Closes #1091

Co-authored-by: sisyphus-dev-ai <sisyphus-dev-ai@users.noreply.github.com>
@SeoJCalive SeoJCalive added the macos Run the macOS packages and tests in CI for this pull request label Nov 12, 2026
@github-actions github-actions Bot added the feature New features label Nov 12, 2026

@KnifeLemon KnifeLemon left a comment

Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@SeoJCalive 정리해 주신 결정 네 가지를 그대로 잘 따라 주셨어요. 고마워요!

  • 도넛 가운데 글자와 "사용 가능한 프리셋" 툴팁 한 줄, 세 프리셋만 담은 정해 둔 목록, 공통 문구 모두 합의한 대로예요.
  • 판정도 깔끔해요. 실행할 수 없는 형식과 엔진 패키지가 필요한 형식은 빼고 세요. 봉투 형식도 추측하지 않고, 모션이 없는 JPEG는 일반 변환으로 표시하지 않아요.
  • 끌기 중 성능도 괜찮아요. 판정은 BuildFace에서 한 번만 하고, ShowHint는 저장된 값을 읽기만 해요.
  • 묶음 안쪽 고리, 앞·뒷면, 취소·뒤집기·다시 불러오기에서 문구가 지워지는 경우까지 테스트로 확인돼서 좋았어요.

고쳐 주셨으면 하는 것

  1. 작은 가운데에서 안내 글자가 너무 작아져요. DrawCenter의 fitScale에 아래 한계가 없어요.
    • 가운데 구멍 크기는 25%까지 줄일 수 있어요. 그러면 글을 놓을 폭이 기본(42%)의 절반쯤으로 줄어들어요.
    • 그 상태에서 영어 "Some files…"와 "Drop → Extract frames (PNG)"가 여러 줄로 접히면, 제 계산으로는 fitScale이 0.4쯤까지 내려가요. 도넛 크기를 100으로 줄이면 더 작아지고요.
    • 지금은 이 경우에도 제목·안내가 원래 크기에 두 줄까지 보여요. 그래서 "클릭·드롭 안내는 그대로 읽히게"가 작은 설정에서 깨져요. 기본 크기에서만 맞춰 보신 것 같아요.
    • 방법은 편한 쪽으로 해 주세요. fitScale에 0.8쯤 아래 한계를 두고 알림 문구는 2~3줄에서 말줄임해도 되고, 안내(CenterSubtitle)는 원래 크기·두 줄을 지키고 알림만 줄여도 돼요.
    • 구멍 25%, 크기 100에서 한 번 봐 주세요.
  2. docs/FORMAT-RULES.md 8번을 맞춰 주세요. 지금은 "for example in the slot's tooltip"이라고 되어 있어요.
    • 도넛 가운데 글자와 사용 가능한 프리셋 툴팁으로 바꿔 주세요.
    • 목록이 PresetAvailability.OrdinaryConversionFor에 있다는 것도 적어 주세요. 그래야 프리셋을 추가할 때 어디에 넣을지 바로 알 수 있어요.

남겨 주신 질문과 선택에 대한 답

  • "All convertible files / input formats" 문구를 따로 두는 것: 이대로 좋아요.
    • 파일 두 개가 모두 PNG면 "이 파일은"도 "일부"도 맞지 않아서, 따로 있어야 해요.
    • "변환 가능한"이 들어가서 알 수 없는 파일이 섞였을 때도 사실과 어긋나지 않아요.
    • 한국어 "변환 가능한 파일은 모두 일반 변환으로 실행돼요"와 "변환 가능한 입력 형식은 모두 일반 변환으로 실행돼요"도 자연스러워요.
  • 알림이 보이는 동안 파일 개수 제목을 대신하는 것: 좋아요. 조각을 가리키기 전과 벗어난 뒤에는 개수가 다시 보이고, 클릭·드롭 안내는 그대로 남으니까요. 같이 줄이는 방식만 위 1번처럼 아래 한계를 두면 돼요.

작은 것

  • PR 본문 맨 끝에 준비하면서 쓰신 메모로 보이는 줄이 남아 있어요. 백틱 네 개짜리 줄과 "업로드하며 생긴 줄 지우기…", "본문 속 메모 한 줄…"이에요. 지워 주시면 돼요.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

feature New features macos Run the macOS packages and tests in CI for this pull request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Feature]: Tell users when a named operation runs as an ordinary conversion

2 participants