/// 「设备上这个文件,是不是已经安全落袋了」—— /// **这是删除设备原件的唯一判据**,改它等于改一个不可逆操作的闸门。 library; /// 归档标题形如 `_<时间戳>_<设备文件名>` /// (`holder_20260907_181224_MIC0049.ogg` ← 设备上的 `MIC0049.OGG`)。 /// /// 在「已上传」的记录里按这个后缀找对应的那条,返回它在本机的音频路径; /// 找不到返回 null。[uploadedByTitle] 的 key 必须已大写。 /// /// ⚠️ **只匹配到名字还不够,调用方必须再比一次字节数**:设备用的是 8.3 短 /// 文件名,删掉后会**回绕复用**(`MIC0001.OGG` 下次录音可能又叫这个名)。 /// 只认名字的话,一条同名的新录音会被当成「已上传」直接删掉 —— 永久丢数据。 /// 字节数的来源刻意选了「本机那份音频的实际长度」而不是数据库里的字段: /// `meeting` 表**根本没有 size 列**(schema 见 database_helper.dart), /// 而且比文件长度顺带证明了本机这份没被截断、确实是同一个文件。 String? uploadedLocalPathFor( Map uploadedByTitle, String deviceFileName, ) { if (deviceFileName.isEmpty) return null; final suffix = '_${deviceFileName.toUpperCase()}'; for (final e in uploadedByTitle.entries) { if (e.key.endsWith(suffix) && e.value.isNotEmpty) return e.value; } return null; }