From b707fcb89055871d1a272e55e31d83c917d01cb5 Mon Sep 17 00:00:00 2001 From: Odboy Date: Mon, 4 Aug 2025 21:17:15 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E7=A7=BB=E5=8A=A8=E6=96=87=E4=BB=B6?= =?UTF-8?q?=E5=90=8E=E6=9B=B4=E6=96=B0=20media=5Finfo=20=E7=9A=84=20file?= =?UTF-8?q?=5Fpath=20=E4=B8=BA=E6=96=B0=E8=B7=AF=E5=BE=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- internal/service/scan.go | 9 ++++++++- internal/store/store.go | 21 +++++++++++++++++++++ 2 files changed, 29 insertions(+), 1 deletion(-) diff --git a/internal/service/scan.go b/internal/service/scan.go index bf074c6..5474962 100644 --- a/internal/service/scan.go +++ b/internal/service/scan.go @@ -348,7 +348,7 @@ func (s *ScanService) runMove(ctx context.Context) { // 执行移动 mv := &mover.Mover{} - mv.MoveAll(jobs, func(doneCount int) { + moved := mv.MoveAll(jobs, func(doneCount int) { s.setProgress(stageMove, doneCount, len(jobs)) if ctx.Err() != nil { return @@ -360,6 +360,13 @@ func (s *ScanService) runMove(ctx context.Context) { return } + // 更新 media_info 中的 file_path 为新路径 + if len(moved) > 0 { + if err := s.store.UpdateMediaFilePaths(moved); err != nil { + fmt.Printf("=== 更新媒体文件路径失败: %v\n", err) + } + } + // 移动完成后清空续传记录 if err := s.store.ClearScanLog(); err != nil { fmt.Printf("=== 清空续传记录失败: %v\n", err) diff --git a/internal/store/store.go b/internal/store/store.go index 09018ba..15d836c 100644 --- a/internal/store/store.go +++ b/internal/store/store.go @@ -198,6 +198,27 @@ func (s *Store) ClearScanLog() error { return err } +// UpdateMediaFilePaths 批量更新 media_info 的 file_path。 +// moved 的 key 是源路径,value 是新路径。 +func (s *Store) UpdateMediaFilePaths(moved map[string]string) error { + if s == nil || s.engine == nil || len(moved) == 0 { + return nil + } + sess := s.engine.NewSession() + defer sess.Close() + if err := sess.Begin(); err != nil { + return err + } + for oldPath, newPath := range moved { + if _, err := sess.Where("file_path = ?", oldPath). + Update(&MediaInfo{FilePath: newPath}); err != nil { + _ = sess.Rollback() + return err + } + } + return sess.Commit() +} + // ============================ 媒体记录的新增/更新 ============================ // SaveMedia 保存/更新一条媒体记录:按 MD5 找,有就更新,没有就新增。