Skip to content

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

Open
SeoJCalive wants to merge 3 commits into
mainfrom
feat/1091-ordinary-conversion-notice
Open

SeoJCalive wants to merge 3 commits into
mainfrom
feat/1091-ordinary-conversion-notice

Conversation

@SeoJCalive

@SeoJCalive SeoJCalive commented Nov 12, 2026 •

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. Arabic, Persian, Bengali, Hindi, Nepali and Thai were measured with system fallback fonts, not the bundled Noto fonts, so their results do not hold; they are being remeasured.

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. The local font folder lacked the Noto Arabic, Bengali, Devanagari and Thai fonts that CI and the release use, so the results for those scripts are being remeasured.
  • 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)

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

@SeoJCalive

Copy link
Copy Markdown
Collaborator Author

@KnifeLemon 꼼꼼히 봐 주셔서 고마워요. 말씀하신 두 가지를 새 커밋으로 고쳤어요.

  1. 작은 가운데에서 글자가 너무 작아지는 문제: 두 번째 방법으로 했어요.
    • 알림이 떠도 클릭·드롭 안내는 원래 크기와 두 줄을 그대로 지켜요. 알림이 없을 때와 같은 글자가 보이는지 시험으로 확인했어요.
    • 알림만 양보해요. 글자는 원래의 78% 아래로 줄지 않고, 자리가 모자라면 줄 수를 줄이거나 말줄임해요. 안내와는 2px 이상 떨어뜨렸어요.
    • 글자와 뒤집기 아이콘이 둥근 가운데 밖으로 나가지 않게 맞췄고, 고른 배치는 캐시해서 매 프레임 다시 계산하지 않아요.
    • 알림이 없을 때 가운데는 이전과 똑같이 그려져요.
    • 22개 언어 × 세 문구 × 뒤집기 안내 없음·키·휠을, 기본 크기와 구멍 25%·크기 100에서 재 봤어요. 기본 크기에서는 알림 198개가 모두 다 보이고, 구멍 25%·크기 100에서는 알림이 "So… / file…"처럼 짧게 말줄임돼요. 그 크기에서는 안내 두 줄을 지키면 알림에 남는 자리가 그 정도예요.
    • 기본 크기에서 알림이 다 보이도록 7개 언어(id, ja, pl, pt-BR, pt-PT, es, vi)의 "모두" 문구를 뜻은 그대로 두고 짧게 줄였어요. 원어민 검토는 받지 않았어요.
구멍 25%·크기 100, 수정 전 수정 후 기본 크기, 뒤집기 안내 있음
구멍 25%·크기 100, 수정 전 구멍 25%·크기 100, 수정 후 기본 크기, 뒤집기 안내 있음
  1. docs/FORMAT-RULES.md 8번: 알림이 도넛 가운데 글자와 사용 가능한 프리셋 툴팁에 나온다고 고치고, 목록이 PresetAvailability.OrdinaryConversionFor에 있으니 새 프리셋은 거기에 넣으면 된다는 줄을 더했어요.

PR 본문 끝에 남아 있던 메모도 지웠어요. "변환 가능한" 문구와 개수 제목 대체에 대한 답도 고마워요. 그대로 두었어요.

@SeoJCalive
SeoJCalive force-pushed the feat/1091-ordinary-conversion-notice branch from 89f6ff8 to 153ce06 Compare November 13, 2026 07:42

@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 지난번 두 가지를 빠르게 고쳐 주셔서 고마워요!

  • 작은 가운데: 안내(CenterSubtitle)는 알림이 없을 때와 똑같이 11.5·두 줄로 두고, 알림만 0.78까지 줄였다가 줄 수와 폭을 줄이고 마지막에 빠지는 방식 좋아요. 알림이 없을 때는 예전과 같은 좌표로 그리는 것도 확인했어요.
  • docs/FORMAT-RULES.md 8번: 도넛 가운데와 사용 가능한 프리셋 툴팁, 그리고 PresetAvailability.OrdinaryConversionFor 줄까지 딱 맞아요.
  • PR 본문 끝 메모도 지워진 것 확인했어요.

고쳐 주셨으면 하는 것

  1. CI가 새 DonutCenterReadabilityTests에서 실패해요. 첫 커밋만 있을 때는 통과했으니 두 번째 커밋 때문이에요. Windows·Ubuntu는 7개, macOS는 29개가 실패해요. CI는 릴리스와 같은 Noto 글꼴(build/fetch-fonts.ps1)로 돌려서, 로컬에서 재신 결과와 다르게 나온 것 같아요. pwsh build/fetch-fonts.ps1을 먼저 돌리고 --filter DonutCenterReadabilityTests로 보면 CI와 같은 결과를 볼 수 있을 거예요. 세 가지예요.
    • 기본 크기에서 아랍어·페르시아어 "all" 문구가 말줄임돼요 (Default_size_keeps_the_whole_notice(ar|fa, all), 세 번째 줄 HasCollapsed). 실제 화면에서도 그래요. 7개 언어에 하셨던 것처럼 ar·fa의 donut.ordinary_conversion.all을 줄여 주시거나, 기본 크기에서 한 줄을 더 쓰게 해 주세요.
    • Notice_ink_keeps_the_subtitle_gap...이 작은 가운데에서 알림이 빠지는 경우를 받지 않아요 (bn-BD, ar). 코드는 일부러 알림을 뺄 수 있고 Hint_text_and_stroked_icons...는 그걸 받아들이니까, 이 테스트도 작은 크기에서는 알림이 없으면 건너뛰게 맞춰 주세요.
    • Hint_text_and_stroked_icons...가 작은 가운데에서 안내 글자가 둥근 가운데 밖으로 나간다고 실패해요 (bn-BD, ne, fa, ar). 알림을 빼도 안내 자체가 25%·100 가운데에 안 들어가는 경우예요. 이건 알림이 없을 때도 같아서 이 PR이 책임질 부분이 아니에요. 절대 위치 대신 "알림이 없을 때 배치와 같은 글자이고 더 밖으로 밀리지 않았는지"로 확인하거나, 알림 없이도 넘치는 경우는 건너뛰어 주세요. macOS에서 실패가 훨씬 많은 걸 보면 1e-6·0.01px 허용치도 너무 빡빡해 보여요. 1px쯤으로 늘려 주시면 좋겠어요.
    • Package on Ubuntu 22.04 두 잡은 앞의 잡이 실패해서 생긴 연쇄 실패라 따로 볼 필요 없어요.

작은 것

  • 아주 작은 가운데(25%·100)에서 알림이 "So… / file…"처럼 잘리거나 빠지는 건 괜찮아요. 지난번에 말한 "알림만 줄여도 돼요"에 맞는 결과예요.
  • 테스트를 고치다 배치 탐색이 너무 복잡해지면 더 단순하게 가셔도 돼요. 0.78 아래로 줄이지 않고, 남은 높이만큼 줄 수를 정해 말줄임하고, 한 줄도 안 들어가면 빼는 정도면 충분해요. 편한 쪽으로 해 주세요.
  • 고치신 뒤 PR 본문 "How was it tested"를 새 커밋 기준으로 맞춰 주세요. 지금은 5b91b379와 "35 App + 3 Core" 기준이에요.

@SeoJCalive

Copy link
Copy Markdown
Collaborator Author

@KnifeLemon 방금 올린 수정 커밋에서 CI가 실패했어요. 새로 넣은 가운데 글자 시험이 아랍어·페르시아어·벵골어·네팔어 사례에서 실패했어요. 제 시험 환경에 앱이 쓰는 Noto 아랍어·벵골어·데바나가리·태국어 글꼴이 빠져 있어서, 이 언어들을 다른 글꼴로 재고 있었던 게 원인이에요. 글꼴을 CI와 똑같이 맞춰 다시 재고 고친 뒤 새 커밋으로 올릴게요. 위 답글에 적은 언어별 측정 결과도 그때 바로잡을게요.

SeoJCalive and others added 3 commits November 14, 2026 04:15
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>
Keep the click/drop guidance at its original size and two-line limit
while a notice is shown, so a small centre no longer shrinks it. Only
the notice gives way: it keeps at least 78% of its font size and fewer
lines or an ellipsis, with a small gap above the guidance.

Fit the text and the flip-hint icons inside the round centre, prefer a
complete notice whenever one fits, and cache the chosen layout instead
of recomputing it every frame. Without a notice the centre is drawn as
before.

Test the drawn layout with real controls in 22 languages at the default
and the smallest centre size, with and without a flip hint. Shorten
seven all-files translations so the default notices stay complete.

Document where the notice appears and where its preset list lives in
format rule 8.

Co-authored-by: sisyphus-dev-ai <sisyphus-dev-ai@users.noreply.github.com>
Measure the ellipsis width and keep complete-notice candidates untrimmed.
Fit the secondary hint around tall script glyphs without changing the
guidance, notice font floor or ink gap.

Shorten the Arabic and Persian all-files notices and cover every default
scope and hint combination with the bundled fonts.
Let the small-centre checks accept an omitted notice while still
checking the guidance.
@SeoJCalive
SeoJCalive force-pushed the feat/1091-ordinary-conversion-notice branch from 153ce06 to 5a7964b Compare November 13, 2026 19:26
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