You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

27 lines
1.4 KiB

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