feat: 断点续传与色情识别提速/修复,支持 Linux 交叉编译
- feat: 新增续传表 scan_log,重扫跳过已归类文件(尺寸/头尾指纹校验) - fix: 色情识别记录批量入库超 SQLite 999 变量上限,改每 100 条一批 - perf: NudeNet 检测改为多线程推理池(每线程独立模型实例) - perf: 明暗分析 JPEG(YCbCr) 快路径;SQLite 读并发放开;加阶段耗时统计 - fix: 前端色情识别状态由后端如实上报(配置开关+检测服务是否起来) - feat: ffprobe 内嵌按平台拆分,Linux 构建回退系统 ffprobe,支持交叉编译 - docs: README 补充断点续传与 CentOS 交叉编译步骤 - chore: organize.workers 默认 8
This commit is contained in:
@@ -0,0 +1,40 @@
|
||||
package store
|
||||
|
||||
import (
|
||||
"path/filepath"
|
||||
"testing"
|
||||
)
|
||||
|
||||
func TestScanLogRoundTrip(t *testing.T) {
|
||||
s, err := Open(filepath.Join(t.TempDir(), "t.db"))
|
||||
if err != nil {
|
||||
t.Fatalf("Open: %v", err)
|
||||
}
|
||||
defer s.Close()
|
||||
|
||||
if err := s.SaveScanLogs([]ScanLog{
|
||||
{SourcePath: "/a.jpg", TargetDir: "/out/图片_A", FileSize: 100},
|
||||
{SourcePath: "/b.mp4", TargetDir: "/out/视频_B", FileSize: 200},
|
||||
}); err != nil {
|
||||
t.Fatalf("SaveScanLogs: %v", err)
|
||||
}
|
||||
|
||||
m, err := s.LoadScanLog()
|
||||
if err != nil {
|
||||
t.Fatalf("LoadScanLog: %v", err)
|
||||
}
|
||||
if len(m) != 2 || m["/a.jpg"].TargetDir != "/out/图片_A" {
|
||||
t.Fatalf("加载结果不对: %v", m)
|
||||
}
|
||||
|
||||
// 同路径 upsert:覆盖旧目标目录与大小,不新增行
|
||||
if err := s.SaveScanLogs([]ScanLog{
|
||||
{SourcePath: "/a.jpg", TargetDir: "/out/图片_A2", FileSize: 99},
|
||||
}); err != nil {
|
||||
t.Fatalf("SaveScanLogs upsert: %v", err)
|
||||
}
|
||||
m2, _ := s.LoadScanLog()
|
||||
if len(m2) != 2 || m2["/a.jpg"].TargetDir != "/out/图片_A2" || m2["/a.jpg"].FileSize != 99 {
|
||||
t.Fatalf("upsert 结果不对: %v", m2)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user