Skip to content

feat: control the order of many files before converting or merging - #928

Merged
KnifeLemon merged 28 commits into
KnifeLemon:mainfrom
arielsrossi:feat/file-queue-ordering
Nov 4, 2026
Merged

KnifeLemon merged 28 commits into
KnifeLemon:mainfrom
arielsrossi:feat/file-queue-ordering

Conversation

@arielsrossi

@arielsrossi arielsrossi commented Oct 31, 2026 •

Copy link
Copy Markdown
Contributor

What does this change?

Resolves #927

On the Home page, files dropped in the drop zone or picked with a double-click are collected in a list below it, instead of starting a conversion for each drop. "Choose action" opens the donut for the list in the order shown, and the list empties once that conversion finishes.

  • Each file shows its first page (PDF) or its picture, its place in the order, and an X to remove it.
  • The order changes by dragging a card, or with the keyboard: the left and right arrows move the selection, Alt+Up / Alt+Down move the selected file, and Delete removes it.
  • A merge started from the list keeps its order and does not open the order window (merged pictures still do, for their layout).
  • The merge order window shows the same cards and keys, and the selection outlines the card as on the Home page.

Type of change

  • New feature or improvement
  • Translation (the new strings, in all 19 language files)

How was it tested?

  • dotnet format --verify-no-changes
  • dotnet test for FileQueueTests, MergeOrderTests and LocalizationTests (224 tests, all passing)
  • Full dotnet test: not completed. Failures seen on the Windows machine used: RenderTests (Preset_editor_saves_every_frame_only_for_png_and_jpg, Preset_editor_shows_playback_speed_only_for_targets_that_keep_animations) and PresetSizeRangeTests, which compare number text and fail with a pt-BR culture. These are not in the files changed here, but I did not confirm them on main. MemoryTrimmerTests.A_new_request_moves_the_trim_on failed once in a full run and passed on its own; I did not check whether it is timing-dependent on main.
  • Tried it in the app on Windows 10: dropped and picked PDFs and PNGs, reordered and removed cards, the merge order, the selection, the arrows and Alt+Up / Alt+Down, and the queue clearing after a conversion. Some of these checks were done on the build before the last keyboard changes.

Screenshots (UI changes)

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 (none added)
  • The PR does one thing (the Home page queue, and the order control that follows from it)

🤖 Generated with Claude Code

Related issues

This PR does not address #860 (reorder and remove before merging) or #669 (thumbnails and order before an images → PDF merge). It is a separate proposal, linked to issue #927, and it changes how the Home page collects files, which those issues did not ask for. The open questions in #927 are still to be decided.

Files dropped or picked on the Home page are collected in a list below the
drop zone, instead of starting a conversion for each drop. Each file shows a
thumbnail (the first page of a PDF, or the picture), its place in the order,
and an X to remove it. The order is changed by dragging a card, or with the
keyboard: the arrows move the selection, Alt+Up / Alt+Down move the selected
file, and Delete removes it. "Choose action" opens the donut for the list in
that order; the list empties once that conversion finishes. A merge started
from the list keeps the order and does not open the order window (merged
pictures still do, for their layout). The merge order window shows the same
cards and keys.

Resolves KnifeLemon#927

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>

@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.

Thanks for the work, @arielsrossi, and for asking the open questions in #927 first.

The ordering itself works. The list reaches the merge in the order shown, the strings are translated in all 19 files, format checks pass, and a merge with current main is clean. I approved the CI run, so it will run on this PR now.

Decision on #927's first question

The drop behaviour becomes a setting:

  • Off by default: a drop on the Home page opens the donut as it does today, for one file or many. Existing users see no change, and Wayland users (who rely on the drop zone, see the README) keep their flow.
  • On: dropped and picked files collect in the list, and Choose action opens the donut for them in that order.

Browser drops should follow the same setting, so both kinds of drop act alike.

Needed before merging

1. Emptying the list (HomePageViewModel.FinishSentQueue)

It searches the whole history for any entry whose sources include the files sent, on every history change. That goes wrong in several ways:

  • An old entry matches. Convert a.pdf today. Tomorrow, put a.pdf in the list, press Choose action, then Esc, and add three files. The next history change (a watch-folder job, Undo on a card) finds yesterday's entry and clears all four files.
  • A failure clears it. State != Cancelled also matches Failed and CompletedWithErrors, so a 40-file merge that fails on one encrypted PDF loses the ordered list.
  • Files added during the run are cleared too, because ClearQueue empties everything.
  • It never clears with Keep history off, since AddHistory returns before HistoryChanged. The next click converts the old files again.
  • It never clears when the sources change on the way: resolved .lnk shortcuts, dropped folders, or deleted files.

Please tie the clear to the job started by that click, remove only the files it was given, and keep the list when the job fails.

2. Thumbnails

Every card starts its own Task.Run(PdfPageTools.Preview) at once, and PdfPreviewSource.Open reads the whole PDF with no size cap.

  • Dropping 30 scanned 300 MB PDFs can hold several GB at once and starve the thread pool.
  • The renders take the same PDFium lock conversions need, and nothing cancels them when a card is removed or the page closes.
  • Before this PR, a drop read nothing from the files. Now dropped PDFs are parsed in-process.

Please load them one at a time (as PdfPageEditorViewModel does with its SemaphoreSlim), skip PDFs above a size limit, and cancel what's no longer shown. This matters most in the merge window, which every merge now goes through.

3. Keyboard

  • Right-to-left: in Arabic the card grid is mirrored, but Right still selects the next card, which sits to the left. Swap Left and Right when FlowDirection is right-to-left.
  • Arrows taken from other controls: on Home, Left/Right and Alt+Up/Down are handled and marked handled even when the list is empty or hidden, and focus jumps to the list. In the merge window, Left/Right are taken from the Top to bottom / Side by side radio buttons. Only handle them when the list has focus.

4. Merge-order window

  • Same-named files can't be told apart, since the folder caption is gone (MergeSource.Folder is now unused). Your screenshot shows two identical "This is a very long d…" cards. Please show the folder, at least as a tooltip.
  • Hints: merge.order_hint and merge.images_hint still say "up or down … top to bottom", and don't mention dragging or Delete.
  • Merge with fewer than 2 files: now that files can be removed, Merge does nothing silently with fewer than 2 files, and the button stays enabled. Please disable it.

5. The list must survive navigation

HomePageViewModel is rebuilt on every page switch and language change. Opening Settings and coming back empties a list built over several drops, which is the main case in #927. Please keep the list in a long-lived service.

6. Accessibility

  • Give each card a name, for example "3. receipt.pdf".
  • Make the X buttons say which file they remove.
  • Use a control that reports which card is selected and its position (a ListBox, or the automation properties).

Nice to have

  • One shared card control and drag helper. The two copies (Home and the merge window) have already drifted: corner radius, stretch, format badge.
  • StagedFileViewModel.MakeThumbnail would sit better in Services, next to HistoryThumbnails.
  • Tests for the queue clearing, remove/move/selection, and the keepOrder path in RadialController.
  • Screenshots in the PR body, and a line in the README about the new Home flow.

@KnifeLemon

Copy link
Copy Markdown
Owner

Thanks for looking into it, @arielsrossi. That failure isn't from your PR. The Windows ARM64 runner now runs in Pacific time, and 7-Zip shifted the test's ZIP time by an hour there. It's fixed on main in #961, so merging main into your branch (or Update branch) clears it.

The review points above are still open: above all, the setting from #927, the queue clearing, and the thumbnail limit. Take your time.

arielsrossi and others added 14 commits November 2, 2026 14:21
…turn, keys with focus, accessibility

The Home list lives for the whole session in a service and empties only when
the conversion started from it completes; a failed conversion keeps the list
and names the failed files. A PDF's first page is drawn one at a time, a PDF
over 50 MB gets a note instead, and a removed card cancels its picture. Dropped
and picked files join the list only when the new setting is on (off by
default: the donut opens, as before). Arrows and Alt+Up/Down act only when the
list has the focus, and mirror in a right-to-left language. Merge needs two
files. Cards and their X buttons are named for screen readers, and the
selected card is said.

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
The setting defaults to on: a drop adds files to the list, and only the button
that starts the donut opens it. Turning the setting off restores a donut per drop.

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
…fail

Each picture is limited to 20 seconds, so one file that stalls does not keep
the rest of the list waiting. A file that gets no picture is logged with its
name. A test checks that a PDF added to the list gets its first page.

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
A PDF above 75 MB gets no picture, and the card shows only its extension, as
any other file without a picture. The note no longer shows on the cards.

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
The list has the focus when the window opens, so the arrows move the selection
at once. Alt+Up / Alt+Down reorder; the hint says so, in every language.

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
Focusing on open was taken back when the window activated, so the list had no
keyboard focus when the donut's shortcut opened it.

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
… bar

With the focus on Move up / Move down (reached from the list), the arrows moved
the focus between the buttons. They now move the selection and give the focus
back to the list.

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
The plain arrows still act only from the list or the bottom buttons. The
Move up / Move down buttons leave the keyboard focus order, so the focus is
not shown twice. A test sends Alt+Down with the real key.

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
The arrows, Alt+Up / Alt+Down and Delete are key bindings of the window and of
the page, with commands in the view models, so they work from anywhere on them.
Text boxes and radio buttons keep their own arrows. The mirrored arrows of a
right-to-left language are in the commands.

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
The window's Left and Right bindings are gone: the list already moves its
selection with them, and the binding moved it a second time.

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
… focused

The Home queue moves its selection with Up and Down by a row, as the merge
window does. The arrows, Delete and Alt+Up/Down are handled in the page in one
place: the arrows and Delete act only while the queue has the focus, so a
button keeps its own focus; Alt+Up/Down reorder from anywhere on the page. Text
boxes and choices keep their own keys.

The merge window gets the same rule: the arrows and Delete need the list focus.
Queue cards report their place and the set size to screen readers.
A headless test covers the Home queue's arrows and the merge window's keys.

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
Delete removed the selected card and left nothing selected: the cards are
rebuilt from the list, and the new ones start unselected. The card that takes
the removed one's place is now selected, as in the merge window. A test covers it.

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
… merge window

The list box clears its selection while the row goes, and that null reached
SelectedFile before the neighbour was chosen, so the selection left the cards.
The neighbour is now chosen after the removal, from whether the removed card was
the selected one. A test checks the selection and the focus after Delete.

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
Resolve the Italian strings: keep main's keep-dates hint and this branch's
collect-dropped strings.

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>

@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.

Thanks, @arielsrossi. This round is a big step:

  • the list now survives navigation;
  • clearing is tied to the job and keeps the list on failure;
  • thumbnails are drawn one at a time, with a size cap and per-card cancelling;
  • RTL arrows are mirrored, and the keys work only when the list has focus;
  • Merge is disabled below two files;
  • cards and X buttons have names, with their position.

I built the head and ran the queue, merge-order, home, key and localization tests (294 passed). Here's what's left.

Must fix

1. Default off

As decided in #927, please make CollectDroppedFiles default to false, so existing users see no change and Wayland users keep their drop-to-donut flow. With the default off, no settings step is needed.

2. Browser drops

The reply says browser drops follow the setting, but HomePage.axaml.cs:103-109 still opens the donut for them whatever it is. Please route them through the same check.

3. Thumbnail time limit (FilePreviews.cs:48-54)

CancelAfter(20 s) starts before Gate.WaitAsync, so the time spent waiting in line counts too. In a long list, every card after roughly the first 20 seconds' worth never gets a picture, and nothing retries it.

Also, the token passed to Task.Run(..., token) doesn't stop a Make that's already running. A stalled render keeps holding the gate, so one stuck file does block the others.

Start the limit after the gate is taken, and don't let a render that times out keep the gate. For example, release it on timeout and let the stuck task finish in the background.

4. A leak in HomePageViewModel (:230-238)

It subscribes with lambdas to the singleton _staged.Cards.CollectionChanged and _staged.PropertyChanged, and Dispose (:246-254) never unsubscribes. Every page switch or language change leaves an old view model, and its recent-files pictures, alive. Unsubscribe in Dispose.

5. Ask every time never clears the list (RadialController.cs:385, 414)

AskThenConvertAsync doesn't call _onJob, so with Ask every time the list never empties, and the next click converts the same files again.

6. Merge main in, and adapt to #1018

#1018 (sorting in the merge window) is merged. Merging main conflicts in all 19 language files (keep both sides), in MergeOrderViewModel.cs and in MergeOrderWindow.axaml. To fit with it:

  1. Keep the Home order: with keepOrder, skip FileSorter and start SortIndex at CustomSortIndex. Otherwise OnSortIndexChanged re-sorts the order chosen on Home.
  2. Renumber after sorting: call Renumber() at the end of ApplySort, or the card numbers go stale.
  3. Dragging is a custom order: set SortIndex = CustomSortIndex in MoveFile (drag) as well. The merge only adds it to the keyboard Move().
  4. One MergeSource: merge the two constructors (Stamp plus remove / loc), and move the date (Time) into the card or its tooltip.
  5. The sort box: add ComboBox to IsEditing (MergeOrderWindow.axaml.cs:120), so Alt+↓ in the sort box isn't taken as a move.

7. Smaller must-fixes

  • merge.images_hint still says "move it up or down", with no word on dragging or Delete.
  • Home Alt+↑ / Alt+↓ are marked handled anywhere on the page, even when the list is empty or hidden (HomePage.axaml.cs:202, 227). Handle them only when a card is selected.
  • it.json: the nine new lines are indented by two spaces. That file has no indentation; please match it.

Nice to have

  • Removed in the merge window, gone from Home: clearing removes the cards that were sent, not the files the job got (StagedFiles.cs:135). So a file removed with X in the image-merge window also disappears from the Home list.
  • A second click while a job runs overwrites _sent / _sentJobId (StagedFiles.cs:78). The first job's files then stay in the list.
  • _onJob read after an await (RadialController.cs:419): another donut opened in between gets the wrong callback. Take a local copy before the await.
  • Small leftovers:
    • the cancellation sources aren't disposed;
    • the Oversized comment says the card shows it, but nothing does;
    • the Home card tooltip shows the name, not the path.
  • Home list as a ListBox, so the selection is announced by a real selection control. You offered this; it would be good.
  • Shared code: a shared card control and drag helper. The Home and merge-window copies are still separate.
  • Tests and docs:
    • tests for StagedFiles clearing and the keepOrder path;
    • screenshots in the PR body;
    • a README line about the Home list.

arielsrossi and others added 3 commits November 2, 2026 23:08
…, hints

- CollectDroppedFiles defaults to off, so existing users keep the donut.
- The Home view model unsubscribes from the shared queue in Dispose.
- Ask-every-time and ordered merges now report their job to the Home list, and
  the callback is taken before the await, not after.
- The 20-second thumbnail limit starts after the gate is taken; a timed-out draw
  frees the gate and its picture is dropped when it completes.
- Alt+Up/Down on Home act only with a card selected.
- merge.images_hint (English, Portuguese) names the arrows, dragging and Delete.
- The nine new Italian lines are no longer indented.

Browser drops still open the donut; routing them through the setting is open.

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
…file-queue-ordering

# Conflicts:
#	src/Filee.App/Assets/i18n/ar.json
#	src/Filee.App/Assets/i18n/de.json
#	src/Filee.App/Assets/i18n/en.json
#	src/Filee.App/Assets/i18n/es.json
#	src/Filee.App/Assets/i18n/fr.json
#	src/Filee.App/Assets/i18n/hi.json
#	src/Filee.App/Assets/i18n/id.json
#	src/Filee.App/Assets/i18n/it.json
#	src/Filee.App/Assets/i18n/ja.json
#	src/Filee.App/Assets/i18n/ko.json
#	src/Filee.App/Assets/i18n/ne.json
#	src/Filee.App/Assets/i18n/pl.json
#	src/Filee.App/Assets/i18n/pt-BR.json
#	src/Filee.App/Assets/i18n/pt-PT.json
#	src/Filee.App/Assets/i18n/ru.json
#	src/Filee.App/Assets/i18n/th.json
#	src/Filee.App/Assets/i18n/tr.json
#	src/Filee.App/Assets/i18n/zh-CN.json
#	src/Filee.App/Assets/i18n/zh-TW.json
#	src/Filee.App/ViewModels/MergeOrderViewModel.cs
#	src/Filee.App/Views/MergeOrderWindow.axaml
Dragging a card sets the sort list to Custom order, as the keyboard move already did.

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>

@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.

Thanks, @arielsrossi. Nearly all of it is done now:

  • Defaults and the bugs from last round: the default is off; the thumbnail limit no longer counts the wait and frees the gate on timeout; the view-model leak is fixed; Ask every time clears the list; _onJob is read before the await; Home Alt+↑/↓ act only with a selected card; it.json is fixed.
  • #1018: the Home order starts as the custom order, sorting renumbers the cards, dragging counts as a custom order, there's one MergeSource, and the sort box keeps its own keys.

I built it, ran the related tests (295 passed), and it merges cleanly with current main. I've approved the CI run.

Three small things left:

1. Show the date in the merge window again

MergeSource still has Time and ShowsCreated, but nothing shows them, and the card tooltip is just the path (MergeOrderWindow.axaml:187). After #1018, sorting by date with no date in sight is confusing. A line in the card, or the date added to the tooltip (path, then date), is enough.

2. merge.images_hint in all languages

The new wording is in en and pt-BR only, so the other 17 languages still describe the old list. Please update the line in each of them.

3. Browser drops

Browser drops still open the donut directly (HomePage.axaml.cs:103), whatever the setting says. Fixing it here is best. If it takes longer, a follow-up PR right after this one is fine too: just say so in the PR description, so it isn't forgotten.

Smaller, optional

  • Key placement: merging main moved the nine new keys to the end of each language file, outside the home.* / general.* groups, which also adds a comma to the old last line. Moving them back next to their groups keeps the diff to added lines only.

  • Earlier leftovers:

    • clearing by the cards sent rather than the files the job received;
    • a second click while a job runs;
    • cancellation sources that aren't disposed, and the Oversized comment;
    • a ListBox for the Home list;
    • a test for StagedFiles clearing;
    • screenshots and a README line.

    None of these blocks the merge.

arielsrossi and others added 2 commits November 3, 2026 13:32
With "collect dropped files" on, a picture, link or download dragged from a
browser is saved into a temporary folder of its own and added to the queue,
instead of opening the donut. A queue holds paths, so the files must be on
disk first. Files that can't be saved are left out and logged. With the
setting off, the donut opens as before.

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
A second donut conversion started while one was running used to replace
the first one's cards, so the first conversion's files stayed in the list
after it finished. Cards are now kept per job: a conversion removes only
the cards it was started with, and a card sent while another conversion
runs waits for its own.

The merge-order hint now says how to drag, reorder and remove a picture
in all 19 languages, as the English and Portuguese ones already did.

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
@arielsrossi

arielsrossi commented Nov 3, 2026 •

Copy link
Copy Markdown
Contributor Author

Thanks for the review. Here is where each point stands, with the commits in this PR (head c2552919).

Browser drops (round 3, item 3): done in a198e53c. With "collect dropped files" on, pictures, links and downloads dragged from a browser are saved to a temporary Filee folder and join the Home list. With the setting off, the donut opens as before. Files that can't be saved are left out and logged.

Clearing the list per job: done in 3e7dfca5. A conversion started from the list removes only the cards it was started with. A second conversion started while one is running no longer replaces the first one's cards, so the first conversion's files are cleared when it completes.

merge.images_hint in all languages: done in 3e7dfca5. All 19 languages now mention the arrows, dragging, Alt+↑ / Alt+↓ and Delete.

Date in the merge window: not added, on purpose. The cards show the picture and the file name, and the tooltip shows the path. Adding the date would add more file details to a card that is meant to stay minimal. Sorting by date still works from the sort box. If you think the date must be visible, tell us and we will add it.

Still open:

  • Home list as a ListBox: not changed. The Home list is still an ItemsControl, and each card is named by its place and file name. The merge window already uses a ListBox.
  • One shared card control for Home and the merge window: not done, to keep the two screens separate.
  • Tests for StagedFiles clearing: not added yet. The existing queue, merge-order, key, drop and localization tests pass (284).
  • Screenshots in the PR body: not added yet.
  • README line about the Home list: done in c2552919 (English README only).
  • The key placement in the language files, after merging main: not changed.

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
@arielsrossi

arielsrossi commented Nov 3, 2026 •

Copy link
Copy Markdown
Contributor Author

*Screenshots in the PR body: not added yet.

You requested screenshots to verify how it runs without needing an installation. I recorded my screen to provide a better demonstration.

https://drive.google.com/file/d/1pR7z0tx_bLGBrlxPpatTj114QFmJEvfn/view?usp=sharing

KnifeLemon and others added 6 commits November 4, 2026 11:11
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
They were saved to %TEMP%\Filee\web\<id>\queue. The list converts them as
ordinary files, so with the default save location (next to the source) the
results were written there too, and the startup sweep deletes those folders
after a day. The "Save to" folder for browser files was skipped as well.

Save them where the crop overlay saves a browser drop, the download folder,
and add them to the list itself, so a page change during a slow download
doesn't lose them.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2.3.0 shows the date on every row of the merge window, and sorting by date
relies on it; the cards had dropped it. Each card shows the date under the
name (modified, or created while sorted by it), and its tooltip the path and
the full date and time.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
vi.json came with main after this branch started: the nine new keys, and
the merge hints with dragging and Delete, as in the other languages.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
해요체 and "도넛", as the rest of ko.json uses, and the particle spacing after
Alt + ↓ and Delete.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A card is 186 px tall, but the minimum height (320) came from the text
rows: at its smallest size the list showed part of a card in every
language, and in Arabic, whose hint wraps into more lines with Noto Sans
Arabic, it was 76 px. CI failed there in every job
(Chooser_fits_long_paths_at_its_minimum_width, "ar").

The minimum height is now 500, and the test checks the window at its own
minimum size and that a whole card fits in the list, not only 80 px.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

@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.

Thanks, @arielsrossi, and thanks for sticking with this through four rounds! Browser drops now follow the setting, each conversion clears only its own cards (also with a second click while one runs), merge.images_hint is updated everywhere, and the README has its line.

To get this in, I pushed a few small commits to your branch. Please pull before you change anything else:

What we pushed

Merge of main. It was clean.

Browser files in the list go to the download folder.
They were saved to %TEMP%\Filee\web\<id>\queue\. The list then converts them as ordinary files, so with the default save location (next to the source), the results were written into that folder too. Filee deletes those folders a day later, at startup, so the results would have disappeared. The Save to folder for browser files was also skipped. They're now saved where the crop overlay saves a browser drop, and the list takes them directly, so a page change during a slow download doesn't lose them. The test checks the folder.

The date is back on the merge cards.
2.3.0 (#1018) shows each file's date in the merge window, and sorting by date depends on seeing it. Without it, this PR would take that away from 2.3.0 users. Each card now shows the date under the name (modified, or created while sorted by it), and its tooltip shows the path and the full date and time.

Merge window sorted by date modified: each card shows its date under the name

Vietnamese and Korean.
main gained Vietnamese (vi.json) after your branch started, so we added the nine keys and the two new hints there. A few Korean strings now use the same tone and the word for the donut that the rest of ko.json uses.

The Arabic CI failure.
I should have told you about this earlier, sorry. The CI run I approved on 5e76197 failed in every job at MergeOrderTests.Chooser_fits_long_paths_at_its_minimum_width(language: "ar"). A card is 186 px tall, but the window's minimum height (320) still came from the old text rows. At its smallest size the list showed only part of a card in every language, and in Arabic, whose hint wraps into more lines with Noto Sans Arabic (which CI uses), the list was only 76 px. The minimum height is now 500. The test now checks the window at its own minimum size, and that a whole card fits, instead of only 80 px.

Later, not needed for this PR

  • The Home list's hint reuses merge.order_hint ("Files merge from top to bottom"). On Home the files may be converted rather than merged, and the cards run left to right, so a Home-specific line would read better.
  • MergeSource.Folder isn't used any more and can go.

Merging once CI is green.

…bs too

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@KnifeLemon

Copy link
Copy Markdown
Owner

Merged main again: #1102 (Choose pages for Split PDF) changed the same part of RadialController. Its jobs now reach the Home list too, like the save-dialog and merge paths. Merging once CI is green.

@KnifeLemon
KnifeLemon merged commit f9c7dab into KnifeLemon:main Nov 4, 2026
20 of 22 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

feature New features

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Feature]: Control the order of many files before converting or merging

2 participants