修复: Bing壁纸浏览方向改为旧到新并保最新2000张
- 历史排序改为日期升序, 左键更旧右键更新, 位置显示 idx+1/total - 修复排序翻转后裁剪逻辑误删最新图的问题, 改为淘汰最旧 - dislike跳过与定时切换同步改为向更新方向推进
This commit is contained in:
@@ -315,23 +315,24 @@ func fetchBingHistory() {
|
|||||||
allMap[k] = r
|
allMap[k] = r
|
||||||
}
|
}
|
||||||
|
|
||||||
// Sort by date descending, then by market for determinism
|
// Sort by date ascending (oldest first), so index 0 = oldest, index N = newest
|
||||||
|
// Left-to-right navigation: left = older (smaller idx), right = newer (larger idx)
|
||||||
var records []BingRecord
|
var records []BingRecord
|
||||||
for _, r := range allMap {
|
for _, r := range allMap {
|
||||||
records = append(records, r)
|
records = append(records, r)
|
||||||
}
|
}
|
||||||
sort.Slice(records, func(i, j int) bool {
|
sort.Slice(records, func(i, j int) bool {
|
||||||
if records[i].Date != records[j].Date {
|
if records[i].Date != records[j].Date {
|
||||||
return records[i].Date > records[j].Date
|
return records[i].Date < records[j].Date
|
||||||
}
|
}
|
||||||
return records[i].Market < records[j].Market
|
return records[i].Market < records[j].Market
|
||||||
})
|
})
|
||||||
|
|
||||||
// ---- Phase 3: Enforce 2000 cap ----
|
// ---- Phase 3: Enforce 2000 cap ----
|
||||||
if len(records) > maxBingRecords {
|
if len(records) > maxBingRecords {
|
||||||
// Remove oldest records and their files
|
// Records sorted oldest-first, so oldest are at the head
|
||||||
toRemove := records[maxBingRecords:]
|
toRemove := records[:len(records)-maxBingRecords]
|
||||||
records = records[:maxBingRecords]
|
records = records[len(records)-maxBingRecords:]
|
||||||
for _, r := range toRemove {
|
for _, r := range toRemove {
|
||||||
p := filepath.Join(bingDir(), r.Filename)
|
p := filepath.Join(bingDir(), r.Filename)
|
||||||
os.Remove(p)
|
os.Remove(p)
|
||||||
@@ -380,6 +381,7 @@ func getCurrentBingRecord() *BingRecord {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// bingPrev moves to the previous (older) image, skipping hidden ones.
|
// bingPrev moves to the previous (older) image, skipping hidden ones.
|
||||||
|
// Records sorted oldest-first, so prev = decrement index.
|
||||||
func bingPrev() {
|
func bingPrev() {
|
||||||
bingMu.Lock()
|
bingMu.Lock()
|
||||||
defer bingMu.Unlock()
|
defer bingMu.Unlock()
|
||||||
@@ -390,7 +392,7 @@ func bingPrev() {
|
|||||||
}
|
}
|
||||||
attempts := 0
|
attempts := 0
|
||||||
for {
|
for {
|
||||||
h.CurrentIdx = (h.CurrentIdx + 1) % len(h.Records)
|
h.CurrentIdx = (h.CurrentIdx - 1 + len(h.Records)) % len(h.Records)
|
||||||
if !h.Records[h.CurrentIdx].Hidden {
|
if !h.Records[h.CurrentIdx].Hidden {
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
@@ -405,6 +407,7 @@ func bingPrev() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// bingNext moves to the next (newer) image, skipping hidden ones.
|
// bingNext moves to the next (newer) image, skipping hidden ones.
|
||||||
|
// Records sorted oldest-first, so next = increment index.
|
||||||
func bingNext() {
|
func bingNext() {
|
||||||
bingMu.Lock()
|
bingMu.Lock()
|
||||||
defer bingMu.Unlock()
|
defer bingMu.Unlock()
|
||||||
@@ -415,7 +418,7 @@ func bingNext() {
|
|||||||
}
|
}
|
||||||
attempts := 0
|
attempts := 0
|
||||||
for {
|
for {
|
||||||
h.CurrentIdx = (h.CurrentIdx - 1 + len(h.Records)) % len(h.Records)
|
h.CurrentIdx = (h.CurrentIdx + 1) % len(h.Records)
|
||||||
if !h.Records[h.CurrentIdx].Hidden {
|
if !h.Records[h.CurrentIdx].Hidden {
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
@@ -464,10 +467,10 @@ func bingToggleDislike() string {
|
|||||||
|
|
||||||
if r.Hidden {
|
if r.Hidden {
|
||||||
log.Printf("Bing 壁纸: 已隐藏 (date=%s)", r.Date)
|
log.Printf("Bing 壁纸: 已隐藏 (date=%s)", r.Date)
|
||||||
// Advance to next visible
|
// Advance to next visible (newer = +1)
|
||||||
attempts := 0
|
attempts := 0
|
||||||
for {
|
for {
|
||||||
h.CurrentIdx = (h.CurrentIdx - 1 + len(h.Records)) % len(h.Records)
|
h.CurrentIdx = (h.CurrentIdx + 1) % len(h.Records)
|
||||||
if !h.Records[h.CurrentIdx].Hidden {
|
if !h.Records[h.CurrentIdx].Hidden {
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
@@ -587,7 +590,7 @@ func bingWallpaperLoop() {
|
|||||||
// Move to next (newer) image, skip hidden
|
// Move to next (newer) image, skip hidden
|
||||||
attempts := 0
|
attempts := 0
|
||||||
for {
|
for {
|
||||||
h.CurrentIdx = (h.CurrentIdx - 1 + len(h.Records)) % len(h.Records)
|
h.CurrentIdx = (h.CurrentIdx + 1) % len(h.Records)
|
||||||
if !h.Records[h.CurrentIdx].Hidden {
|
if !h.Records[h.CurrentIdx].Hidden {
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -84,7 +84,7 @@
|
|||||||
<img v-if="bing.url" :src="bingThumb" class="w-16 h-10 object-cover rounded flex-shrink-0">
|
<img v-if="bing.url" :src="bingThumb" class="w-16 h-10 object-cover rounded flex-shrink-0">
|
||||||
<div class="min-w-0">
|
<div class="min-w-0">
|
||||||
<div class="text-xs font-medium text-[var(--text-muted)] truncate">{{ bing.copyright || 'Bing 每日壁纸' }}</div>
|
<div class="text-xs font-medium text-[var(--text-muted)] truncate">{{ bing.copyright || 'Bing 每日壁纸' }}</div>
|
||||||
<div class="text-[10px] text-[var(--text-weak)]">{{ bing.idx > 0 ? `${bing.idx} / ${bing.total}` : '' }}</div>
|
<div class="text-[10px] text-[var(--text-weak)]">{{ bing.total > 0 ? `${bing.idx + 1} / ${bing.total}` : '' }}</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="flex gap-1 flex-shrink-0">
|
<div class="flex gap-1 flex-shrink-0">
|
||||||
|
|||||||
+2
-2
File diff suppressed because one or more lines are too long
Reference in New Issue
Block a user