首頁「沒被整理的檔案」修兩病:同一件事講兩次/不說是哪一個檔
leo 08-06 封測回報(附截圖+「他放一個 md 檔無法通過」)。
## ① 同一件事講兩次,而且「另外」前面沒有東西
截圖實況:
「看起來不是文件,所以跳過了。」 ← 底下是空的(非文件檔不逐檔點名)
「**另外**有 1 個不是文件的檔案(圖片、影片、壓縮檔之類)也沒有處理。」
真兇:app.go buildSkipped 的 else 分支先寫一句通用說明,
接著無條件再寫 Other 那句——後者的「另外」是為「兩種都有」寫的,
在「只有非文件檔」時就變成前面沒有東西可以「另外」。
解:該分支只講一句、自己帶數量,且不留 Other。「另外」只在兩種都有時出現。
## ② 只報總數=等於沒說(這才是 md 那題卡住的原因)
封測者放 .md 說「無法通過」,但畫面只寫「有 1 個不是文件的檔案」,
**沒說是哪一個** ⇒ 誰也判斷不出發生什麼事。
而 `.md` 明明在 allowedExt 白名單裡(scan.go:26),我在本機實測也一次就過:
"path":"arcrun-md-test.md","status":"ingested","http_status":200
⇒ 那個「1 個」必然不是他以為的那個檔(副檔名被 Windows 藏起來、存成別的格式…),
但沒有檔名就永遠查不出來。
解:scan 收集非文件檔的檔名(上限 5 個),一路帶到 status.json 與首頁。
「只報總數」在幾百張圖時是對的,在 1 個時是失職——少量就點名。
## 驗
· 兩支新測試釘住規則:只有非文件檔時不准出現第二句、不准出現「另外」;
兩種都有時「另外」才成立並帶數量
· 實際文案打出來看過(見下),不是只看測試綠
有 1 個檔案沒有被整理
看起來不是文件(圖片、影片、壓縮檔之類),所以跳過了。這是正常的,你不用做什麼。
· 我的筆記.md.txt
· 312 張圖的情況:列 5 個 +「…還有 307 個」,不洗版
· collector 全測試過、app 測試過、go vet 全綠
This commit is contained in:
+22
-6
@@ -88,6 +88,7 @@ type syncStatus struct {
|
||||
SkippedDocs []skippedDoc `json:"skipped_docs,omitempty"`
|
||||
SkippedDocCount int `json:"skipped_doc_count"`
|
||||
SkippedOtherCount int `json:"skipped_other_count"`
|
||||
SkippedOtherNames []string `json:"skipped_other_names"`
|
||||
}
|
||||
|
||||
type skippedDoc struct {
|
||||
@@ -222,14 +223,29 @@ func buildSkipped(s syncStatus) *UISkipped {
|
||||
// 誠實地告訴他「這不是你的錯,也不用你動手」——否則使用者會反覆重丟同一個檔。
|
||||
u.Note = "這些格式我們還沒支援,所以沒有進你的知識庫。等支援了會自動補上,你不用重丟。" +
|
||||
"急著要的話,先用原本的軟體另存成 PDF 或 Word(.docx)放進同一個資料夾就行。"
|
||||
// 兩種都有時,非文件檔那句用「另外」接在讀不了的檔之後(見下)。
|
||||
if s.SkippedOtherCount > 0 {
|
||||
u.Other = fmt.Sprintf("另外有 %d 個不是文件的檔案(圖片、影片、壓縮檔之類)也沒有處理。",
|
||||
s.SkippedOtherCount)
|
||||
}
|
||||
} else {
|
||||
// 只有非文件檔的情況(例如整個資料夾都是照片)——不需要驚動他,但也不能不說。
|
||||
u.Title = "有些檔案沒有被整理"
|
||||
u.Note = "看起來不是文件,所以跳過了。"
|
||||
}
|
||||
if s.SkippedOtherCount > 0 {
|
||||
u.Other = fmt.Sprintf("另外有 %d 個不是文件的檔案(圖片、影片、壓縮檔之類)也沒有處理。",
|
||||
s.SkippedOtherCount)
|
||||
//
|
||||
// 🔴 2026-08-06 leo 封測截圖:這張卡長成
|
||||
// 「看起來不是文件,所以跳過了。」(底下空的)
|
||||
// 「**另外**有 1 個不是文件的檔案(圖片、影片、壓縮檔之類)也沒有處理。」
|
||||
// 兩個病:① 同一件事講兩次 ② 「另外」前面沒有東西可以「另外」——
|
||||
// 因為 Files 是空的(非文件檔不逐檔點名),通用句下面什麼都沒有。
|
||||
// ⇒ 這個分支**只講一句**,把數量與例子併進來,且不留 Other。
|
||||
u.Title = fmt.Sprintf("有 %d 個檔案沒有被整理", s.SkippedOtherCount)
|
||||
u.Note = "看起來不是文件(圖片、影片、壓縮檔之類),所以跳過了。這是正常的,你不用做什麼。"
|
||||
// 🔴 少量時把檔名列出來(leo 08-06 封測):封測者放了 .md 進去說「無法通過」,
|
||||
// 而畫面只寫「有 1 個不是文件的檔案」——沒說是哪一個,誰都判斷不出發生什麼事。
|
||||
// `.md` 明明在支援清單裡 ⇒ 看到檔名才知道真相(副檔名被 Windows 藏起來、存錯格式…)。
|
||||
u.Files = append(u.Files, s.SkippedOtherNames...)
|
||||
if n := s.SkippedOtherCount - len(s.SkippedOtherNames); n > 0 {
|
||||
u.More = n
|
||||
}
|
||||
}
|
||||
return u
|
||||
}
|
||||
|
||||
@@ -68,6 +68,11 @@ func TestBuildSkippedShowsRemainderCount(t *testing.T) {
|
||||
}
|
||||
|
||||
// 整個資料夾都是照片這種情況:不必驚動他,但也不能一個字都不說。
|
||||
//
|
||||
// 🔴 2026-08-06 leo 封測截圖抓到的病:這張卡把同一件事講了兩次——
|
||||
// 先一句通用的「看起來不是文件,所以跳過了。」(底下是空的,因為非文件檔不點名),
|
||||
// 再一句「**另外**有 1 個…也沒有處理。」而「另外」前面根本沒有東西。
|
||||
// ⇒ 只有非文件檔時**只准講一句**,而且那一句要自己帶數量。
|
||||
func TestBuildSkippedOtherOnly(t *testing.T) {
|
||||
u := buildSkipped(syncStatus{SkippedOtherCount: 312})
|
||||
if u == nil {
|
||||
@@ -76,8 +81,29 @@ func TestBuildSkippedOtherOnly(t *testing.T) {
|
||||
if len(u.Files) != 0 {
|
||||
t.Error("非文件檔不逐檔點名(幾百張圖會變成噪音)")
|
||||
}
|
||||
if !strings.Contains(u.Other, "312") {
|
||||
t.Errorf("要講出數量,實得 %q", u.Other)
|
||||
if !strings.Contains(u.Title, "312") {
|
||||
t.Errorf("只有非文件檔時,數量要出現在標題(那是唯一會被看到的一句),實得 %q", u.Title)
|
||||
}
|
||||
if u.Other != "" {
|
||||
t.Errorf("同一件事不准講兩次——沒有讀不了的文件時不該再出現一句,實得 %q", u.Other)
|
||||
}
|
||||
if strings.Contains(u.Title+u.Note, "另外") {
|
||||
t.Errorf("前面沒有東西可以「另外」,實得 %q / %q", u.Title, u.Note)
|
||||
}
|
||||
}
|
||||
|
||||
// 兩種都有時,「另外」才成立——它接在「讀不了的檔」那段之後。
|
||||
func TestBuildSkippedBothKinds(t *testing.T) {
|
||||
u := buildSkipped(syncStatus{
|
||||
SkippedDocs: []skippedDoc{{Path: "舊報告.doc", Ext: ".doc"}},
|
||||
SkippedDocCount: 1,
|
||||
SkippedOtherCount: 3,
|
||||
})
|
||||
if !strings.Contains(u.Title, "讀不了") {
|
||||
t.Errorf("有讀不了的文件時,標題要講那件事,實得 %q", u.Title)
|
||||
}
|
||||
if !strings.Contains(u.Other, "另外") || !strings.Contains(u.Other, "3") {
|
||||
t.Errorf("兩種都有時才用「另外」並帶數量,實得 %q", u.Other)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user