feat(native): async recorder (#14700)

#### PR Dependency Tree


* **PR #14700** 👈

This tree was auto-generated by
[Charcoal](https://github.com/danerwilliams/charcoal)

<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->
## Summary by CodeRabbit

* **New Features**
* Durable, resumable import queue with explicit import lifecycle and
updated popup/tray status behavior.
* Async native recording APIs and ability to abort recordings; audio
quality metrics (degraded, overflow count).
  * Added "Importing..." translation.

* **Bug Fixes**
* More reliable single-claim import processing, retries and cleanup to
avoid duplicate imports.
  * Improved stop/abort teardown stability and safer shutdown behavior.

* **Tests**
* New/updated tests covering coordinator, import queue, native async
flows and teardown scenarios.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
This commit is contained in:
DarkSky
2026-03-23 22:38:52 +08:00
committed by GitHub
parent b0251c93cb
commit 9b56a05159
26 changed files with 3560 additions and 1277 deletions
+4
View File
@@ -8525,6 +8525,10 @@ export function useAFFiNEI18N(): {
* `Audio activity`
*/
["com.affine.recording.new"](): string;
/**
* `Importing...`
*/
["com.affine.recording.importing.prompt"](): string;
/**
* `Finished`
*/
@@ -2137,6 +2137,7 @@
"com.affine.audio.transcribe.non-owner.confirm.title": "Unable to retrieve AI results for others",
"com.affine.audio.transcribe.non-owner.confirm.message": "Please contact <1>{{user}}</1> to upgrade AI rights or resend the attachment.",
"com.affine.recording.new": "Audio activity",
"com.affine.recording.importing.prompt": "Importing...",
"com.affine.recording.success.prompt": "Finished",
"com.affine.recording.success.button": "Open app",
"com.affine.recording.failed.prompt": "Failed to save",
@@ -2081,6 +2081,7 @@
"com.affine.audio.transcribe.non-owner.confirm.title": "无法检索他人的 AI 结果",
"com.affine.audio.transcribe.non-owner.confirm.message": "请联系 <1>{{user}}</1> 提升 AI 权限或重新发送附件。",
"com.affine.recording.new": "音频活动中",
"com.affine.recording.importing.prompt": "正在导入...",
"com.affine.recording.success.prompt": "已完成",
"com.affine.recording.success.button": "打开应用",
"com.affine.recording.failed.prompt": "保存失败",