@@ -622,7 +613,6 @@ const seenPostIds = new Set()
// NOTE: Backend `/api/sns/timeline` uses SQL OFFSET on the raw timeline rows.
// The UI filters out some rows (e.g. type=7 cover), so `posts.length` must NOT be used as the next OFFSET.
const timelineOffset = ref(0)
-const timelineSource = ref('')
const hasMore = ref(true)
// When timeline API reports `hasMore=false` but cached sidebar count indicates more, keep paging.
// If we hit an empty page, stop trying to avoid infinite requests.
@@ -1615,7 +1605,6 @@ const loadPosts = async ({ reset }) => {
try {
if (reset) {
timelineOffset.value = 0
- timelineSource.value = ''
hasMore.value = true
cachePagingExhausted.value = false
seenPostIds.clear()
@@ -1633,7 +1622,6 @@ const loadPosts = async ({ reset }) => {
offset,
usernames: selectedSnsUser.value ? [String(selectedSnsUser.value).trim()] : []
})
- timelineSource.value = String(resp?.source || '').trim()
const items = Array.isArray(resp?.timeline) ? resp.timeline : []
// Advance offset by the number of rows consumed by the backend.
// When `hasMore` is true, the backend definitely scanned at least `limit` raw rows (even if it filtered some out).
diff --git a/src/wechat_decrypt_tool/sns_export_service.py b/src/wechat_decrypt_tool/sns_export_service.py
index 0e4fa6e..81a940b 100644
--- a/src/wechat_decrypt_tool/sns_export_service.py
+++ b/src/wechat_decrypt_tool/sns_export_service.py
@@ -1204,29 +1204,24 @@ class SnsExportManager:
ff = post.get("finderFeed") if isinstance(post.get("finderFeed"), dict) else {}
thumb_url = str(ff.get("thumbUrl") or "").strip() if isinstance(ff, dict) else ""
thumb_arc = export_external_thumb(thumb_url, kind="finder") if thumb_url else ""
- out.append('