Jeremy
5dea67e348
docs(installer): say that an upgrade reuses the recorded folder even if it was deleted
...
The restore actions use the recorded folder without checking that it still
exists, so an upgrade creates it again rather than using the default folder.
2026-10-27 21:13:30 +00:00
Jeremy
59d482578a
test(installer): cover the compiled folder searches, resolver chains and wizard folder replay
...
The policy check now reads the compiled AppSearch and RegLocator rows for the
remembered-folder properties (registry root, key, value name and type for both
scopes) and runs the DIR, FOLDER, PATH and legacy exe actions in sequence order
against seeded values, so their precedence and the preset-folder guard cannot
regress. It also replays the wizard folder actions in sequence order (a
remembered folder beats the new-install default, a typed folder beats both) and
requires the machine restore action between the scope page and costing.
2026-10-27 21:13:28 +00:00
aiongg
97eb5fdb83
ci: use storytold/craft-common-actions at the merged installer-policy commit
2026-10-27 20:51:53 +00:00
Jeremy
b0485b0427
fix(installer): check the exact architecture-specific machine folder
...
The pre-signing check matched any folder named Program Files, so it rejected
a valid MSI when Windows resolves Program Files elsewhere, accepted the 64-bit
root for an x86 package and accepted a different app name. Build the expected
folder from the package architecture's resolved root and the policy name.
2026-10-27 19:13:20 +00:00
Jeremy
79f662a584
fix(installer): resolve the wizard scope and folder correctly
...
Real msiexec runs (per-user and all-users, silent and wizard) found two defects
that the metadata fixtures cannot see:
- "Only for me" published ALLUSERS=2, so FindRelatedProducts treated the run as
per-machine and skipped the existing per-user copy. An interactive upgrade
left two registered products and uninstall left files behind. The page now
leaves ALLUSERS unset for a per-user choice.
- Windows Installer resolves Program Files once, for the context it started in,
so choosing "Everyone" in the wizard installed into the user profile with a
machine-wide registration. The wizard now sets the new-install folder itself
after the choice (Program Files, Program Files (x86) for 32-bit, or the
per-user Programs folder). Silent installs are unchanged.
check-install-policy.ps1 now fails if either regresses.
2026-10-27 15:32:29 +00:00
Jeremy
ea5db140fb
docs(installer): say that silent installs are per-user and when the scope page appears
2026-10-27 12:26:56 +00:00
Jeremy
51ecbfece8
docs(installer): note that the 32-bit all-users folder is Program Files (x86); tidy wording
2026-10-27 12:25:19 +00:00
Jeremy
3d40cf08e7
docs(installer): describe the per-user default install location and scope
2026-10-27 12:09:03 +00:00
Jeremy
148cc09be1
fix(installer): harden install-policy checks and packaging-lint workflow
2026-10-27 12:01:29 +00:00
Jeremy
bf86920980
fix(installer): address scope and ARM64 review feedback
2026-10-27 12:01:28 +00:00
Jeremy
ea9130676b
feat(installer): default to a per-user ArtCraft folder
2026-10-27 12:01:28 +00:00
skylar taylor-barrick
662df66f1c
Preserve queued file drops across dialogs and restore Flatpak sources ( #2975 )
2026-10-27 03:50:41 +01:00
aiongg
c9860ea7a3
Merge pull request #3103 from aiongg/layout
...
refactor: shared module layout (craft-contrib#20)
2026-10-26 21:31:21 -04:00
aiongg
259208948b
test: the format-message scan skips only inline test modules
2026-10-26 21:51:51 +00:00
aiongg
69048937d0
docs: update source paths after the layout moves
2026-10-26 21:39:56 +00:00
aiongg
26760e44d2
refactor(lightcraft-ui-egui): split app.rs into app/
2026-10-26 21:39:56 +00:00
aiongg
cb2a922383
refactor(lightcraft-ui-egui): split lib.rs into crate-root modules
2026-10-26 21:39:56 +00:00
aiongg
20c26b83c8
refactor(lightcraft-ui-egui): split dialogs/import.rs into dialogs/import/
2026-10-26 21:39:56 +00:00
aiongg
b0356787e3
refactor(lightcraft-ui-egui): split dialogs/settings.rs into dialogs/settings/
2026-10-26 21:39:56 +00:00
aiongg
56494a1308
refactor(lightcraft-ui-egui): split dialogs.rs into dialogs/
2026-10-26 21:39:56 +00:00
aiongg
0896aa86ce
refactor(lightcraft-ui-egui): split state.rs into state/
2026-10-26 21:39:56 +00:00
aiongg
db31bf3e59
refactor(lightcraft-ui-egui): split panels/right.rs into panels/right/
2026-10-26 21:39:56 +00:00
aiongg
8c194d155e
refactor(lightcraft-ui-egui): split panels/edit.rs into panels/edit/
2026-10-26 21:39:56 +00:00
aiongg
4e13f61ba0
refactor(lightcraft-ui-egui): split panels/left.rs into panels/left/
2026-10-26 21:39:56 +00:00
aiongg
15ece5cbd0
refactor(lightcraft-ui-egui): split menus.rs into menus/
2026-10-26 21:39:56 +00:00
aiongg
401e047acc
refactor(lightcraft-ui-egui): split panels/detail.rs into panels/detail/
2026-10-26 21:39:56 +00:00
aiongg
2e5597d48a
refactor(lightcraft): split main.rs into crate-root modules
2026-10-26 21:39:56 +00:00
aiongg
59d1d6f0f8
refactor(xtask): point the raw corpus test and ci-quick map at the moved sources
2026-10-26 21:39:56 +00:00
aiongg
27abe75572
refactor(xtask): split main.rs into crate-root modules
2026-10-26 21:39:56 +00:00
aiongg
8d8994ec87
refactor(lightcraft-engine): split cmd/library.rs into cmd/library/
2026-10-26 21:39:56 +00:00
aiongg
ff614cbe43
refactor(lightcraft-engine): split import.rs into import/
2026-10-26 21:39:56 +00:00
aiongg
39d6a8d668
refactor(lightcraft-engine): split rename.rs into rename/
2026-10-26 21:39:55 +00:00
aiongg
8942984c35
refactor(lightcraft-engine): split denoise.rs into denoise/
2026-10-26 21:39:55 +00:00
aiongg
21304db29b
refactor(lightcraft-engine): split media.rs into media/
2026-10-26 21:08:55 +00:00
aiongg
50509093b6
refactor(lightcraft-engine): split camera_preview.rs into camera_preview/
2026-10-26 21:08:55 +00:00
aiongg
e3c594cab8
refactor(lightcraft-engine): split export.rs into export/
2026-10-26 21:08:55 +00:00
aiongg
9b197d8215
refactor(lightcraft-engine): split files.rs into files/
2026-10-26 21:08:55 +00:00
aiongg
745111dc6d
refactor(lightcraft-ui-egui): move panels/right tests to panels/right/tests.rs
2026-10-26 21:05:54 +00:00
aiongg
658f3c26d5
refactor(lightcraft-engine): move denoise gpu_tests to denoise/gpu_tests.rs
2026-10-26 21:05:53 +00:00
aiongg
7707047684
refactor(lightcraft-engine): move media thumbnail_hash_tests to media/thumbnail_hash_tests.rs
2026-10-26 21:05:53 +00:00
aiongg
b17f6cbe93
refactor(lightcraft-ui-egui): move progress.rs to widgets/progress.rs
2026-10-26 20:41:12 +00:00
aiongg
0d3ee604f3
refactor(lightcraft-ui-egui): move text_field.rs to widgets/text_field.rs
2026-10-26 20:41:12 +00:00
aiongg
8a9de1f616
refactor(lightcraft-ui-egui): move rating.rs to widgets/rating.rs
2026-10-26 20:41:12 +00:00
aiongg
204f8ea365
refactor(lightcraft-ui-egui): move button.rs to widgets/button.rs
2026-10-26 20:41:12 +00:00
aiongg
2a4bd99a4d
refactor(lightcraft-ui-egui): move date_picker.rs to widgets/date_picker.rs
2026-10-26 20:41:12 +00:00
aiongg
6ea7f1dc55
refactor(lightcraft-ui-egui): move album_picker.rs to widgets/album_picker.rs
2026-10-26 20:41:12 +00:00
aiongg
74836daa84
refactor(lightcraft-ui-egui): move menu_level.rs to menus/menu_level.rs
2026-10-26 20:41:12 +00:00
aiongg
64b6a0e3c2
refactor(lightcraft-ui-egui): move menubar.rs to menus/menubar.rs
2026-10-26 20:41:12 +00:00
aiongg
c7171d6834
refactor(lightcraft-ui-egui): move panels/slide_titles.rs to dialogs/settings/slide_titles.rs
2026-10-26 20:41:12 +00:00
aiongg
f3d8862239
refactor(lightcraft-ui-egui): move panels/slide_templates.rs to dialogs/settings/slide_templates.rs
2026-10-26 20:41:12 +00:00