v0.2.0

刷新流程

最後更新

本頁說明一次「檢查更新」從觸發、比對新文章、背景萃取全文到產生概要的完整順序。

觸發來源

來源 呼叫 狀態列
啟動 Run() → getList(false) Loading...
Ctrl+R getList(true) Checking...
自動檢查 每 5 分鐘 ticker → getList(true) Refreshing... → Checking...

自動檢查在 New() 建立 ticker 後即啟動,沒有開關可關閉;結束程式時 stopRefresh() 停止 ticker。

檢查步驟

getList() 在背景 goroutine 依序執行:

步驟 動作
1 若列表為空,先以 database.Get(72) 取出 72 小時內的文章顯示
2 Collector.GetNews() 抓取所有啟用中的訂閱源,回傳 72 小時內的文章
3 逐篇以 GetFromURL() 查資料庫:查不到計為新文章;查得到則改用資料庫中的發布時間
4 依發布時間由新到舊排序,更新 News List
5 有新文章時另開 goroutine 執行 loadContent()

第 3 步沿用資料庫時間,是因為 RSS 項目沒有可解析的 pubDate 時會以當下時間代替,每次檢查都會漂移。

背景全文萃取

loadContent() 對本次抓到的每篇文章:

條件 動作
資料庫已有全文 略過
萃取成功 寫入文章與全文,更新進度,等待 500ms 後處理下一篇
萃取失敗 寫入文章(全文為空)並寫 log,立即處理下一篇

全文為空的文章下次檢查時會再嘗試萃取。全部處理完後進入 LLM 新聞概要。

預覽時的即時萃取

在 News List 移動時,showPreview() 另外處理單篇:

條件 顯示
資料庫已有全文 直接顯示全文
資料庫沒有全文且即時萃取成功 顯示全文,並在背景寫入資料庫
即時萃取失敗 顯示 RSS 描述
EN