OTP (Doodstream two-factor):
- src/otp.rs: OtpBroker registers per-request oneshot channels with
180s timeout, survives abort via Cancelled answer.
- Doodstream login now loops: first attempt without OTP; if server
says OTP required, emit 'otp-required' event to the renderer with
a request_id, wait for provide_otp/cancel_otp commands, re-POST
with the code. Renderer can pop a modal on otp-required.
- UploadCtx carries the broker + app handle so any future hoster can
do the same pattern.
Drop-target floating window:
- src/drop-target.html: minimal always-on-top borderless window with
dashed drop-zone. Emits 'drop-target-files' to the main window on
drag-drop.
- show_drop_target / hide_drop_target commands create/close the
'drop-target' webview on demand.
- Capabilities updated for dual-window use.
In-app auto-update:
- updater::download_and_launch: fetches the NSIS/MSI from Gitea to
%TEMP%, launches detached, exits the app so the installer can
replace the running exe.
- Commands install_update + install_update_now both go through the
new helper. Renderer clicks 'Install Update' → Rust downloads and
hands off, then process exit.
Härtetest results:
- exe: 7.54 MB
- NSIS: 2.70 MB
- MSI: 3.69 MB
- RAM idle: 33 MB (vs Electron ~300 MB)
- All 3 unit tests pass (secret encryption round-trips).
22 lines
538 B
JSON
22 lines
538 B
JSON
{
|
|
"$schema": "../gen/schemas/desktop-schema.json",
|
|
"identifier": "default",
|
|
"description": "Default capability for the main window",
|
|
"windows": ["main", "drop-target"],
|
|
"permissions": [
|
|
"core:default",
|
|
"core:window:default",
|
|
"core:app:default",
|
|
"core:event:default",
|
|
"core:path:default",
|
|
"core:webview:default",
|
|
"shell:allow-open",
|
|
"dialog:allow-open",
|
|
"dialog:allow-save",
|
|
"dialog:allow-message",
|
|
"fs:allow-read-text-file",
|
|
"fs:allow-write-text-file",
|
|
"opener:default"
|
|
]
|
|
}
|