feat(scanner): published_at 统一用入库时刻,不再取网盘 mtime

- scanner.go 把 PublishedAt 从 orDefault(e.ModTime, now) 改成 now
- 删除已废弃的 orDefault 工具函数
- README 把'发布时间'语义点透为'即视频入库时刻'
- plan 追加 14.2.10 记录这次决策

历史数据不回填;新扫的视频起按新规则。
This commit is contained in:
nianzhibai
2026-05-23 11:29:47 +08:00
parent ada69fec87
commit cfeba94d16
3 changed files with 10 additions and 9 deletions
+1 -1
View File
@@ -10,7 +10,7 @@
## 当前功能
- 前台需要登录后访问,支持首页、列表页、搜索、分类/标签筛选、分页、详情播放和相关推荐。
- 首页"随机推荐"从最近 200 个视频里随机抽 12 个展示;"最新视频"按发布时间倒序展示最新 12 个。从详情页返回首页时不会刷新,保持之前看到的内容。手机端首页每个板块显示 8 个视频。
- 首页"随机推荐"从最近 200 个视频里随机抽 12 个展示;"最新视频"按发布时间(即视频入库时刻)倒序展示最新 12 个。从详情页返回首页时不会刷新,保持之前看到的内容。手机端首页每个板块显示 8 个视频。
- 列表页默认每页 24 个视频;选择具体标签筛选时每页显示 12 个。电脑端每行 4 个卡片,手机端每行 2 个。列表页会记住筛选、分页和滚动位置。
- 视频卡片支持封面、画质标签、时长、移动端点按预览。
- 播放页显示来源网盘类型,提供点赞、点踩、标签编辑和 **不再展示**。不再展示是全局隐藏:写入数据库后,该视频不会再出现在首页、列表、相关推荐中,详情接口也会返回 404。
+1 -8
View File
@@ -173,7 +173,7 @@ func (s *Scanner) walk(ctx context.Context, dirID, dirName string, depth int, st
ThumbnailURL: e.ThumbnailURL,
PreviewStatus: "pending",
Category: dirName,
PublishedAt: orDefault(e.ModTime, now),
PublishedAt: now,
CreatedAt: now,
UpdatedAt: now,
}
@@ -256,13 +256,6 @@ func (s *Scanner) backfillDuplicateThumbnail(ctx context.Context, canonical *cat
_ = s.Catalog.UpdateVideoMeta(ctx, canonical.ID, catalog.VideoMetaPatch{ThumbnailURL: thumbnailURL})
}
func orDefault(t time.Time, d time.Time) time.Time {
if t.IsZero() {
return d
}
return t
}
func sameTags(a, b []string) bool {
if len(a) != len(b) {
return false
+8
View File
@@ -1261,6 +1261,14 @@ src/
- 代码位置:`src/styles/tokens.css`
- 原因:实现复杂布局需要统一的间距和圆角尺度。
#### 14.2.10 published_at 一律用入库时刻,不取网盘 mtime2026-05-23
- plan 未明确 `published_at` 的取值规则。
- 早期实现:通用 scanner 取 `e.ModTime`115/夸克/PikPak/沃盘/OneDrive 都是网盘端文件 mtime),spider91 用爬取时刻。结果:早期上传到网盘的视频 mtime 很老,扫到后被 spider91 当下时刻的视频压在首页"最新视频"之外,体验上"凌晨明明扫到了 115 新视频却看不到"。
- 当前实现:所有 driver(含 spider91 / 通用 scanner / 手动上传)`PublishedAt = now`,等于 `CreatedAt``scanner.go` 不再读 `e.ModTime`,相应的 `orDefault` 工具函数也删掉。
- 历史数据保持不变(不回填);此后扫到的新视频按新规则。
- 代码位置:`backend/internal/scanner/scanner.go`
### 14.3 mock 数据的临时代用
以下内容仅在 mock 阶段成立,接真实后端时需要一并替换。