新增: 星座运势+AI资讯+知识卡片+桌面设置窗口+秒显示开关

- 星座运势: 天聚数行API集成,5维进度条+幸运标签+今日概述
- AI资讯: 天聚数行API,图文布局5条展示,文件缓存2小时刷新
- 知识卡片: AI生成,关键字+提示词配置,30分钟刷新
- 桌面设置: 独立WebView2窗口,760x1350,含壁纸/布局/城市/颜色等配置
- 显示控制: 壁纸/时间/天气/星座/知识/AI资讯独立开关,秒显示开关
- 文件缓存: 星座运势+AI资讯缓存到本地,启动即显示上次数据
- initDone防抖: 防止设置窗口初始化触发卡片重载
This commit is contained in:
2026-05-26 04:34:00 +08:00
parent 2287e12e0d
commit 9fd3acede3
15 changed files with 2607 additions and 384 deletions

View File

@@ -8,6 +8,7 @@ import (
"net/http"
"regexp"
"strings"
"sync"
"time"
)
@@ -34,6 +35,12 @@ var cities = []City{
{"101050101", "哈尔滨", "哈尔滨", "黑龙江"},
{"101250101", "长沙", "长沙", "湖南"},
{"101270101", "成都", "成都", "四川"},
{"101090101", "石家庄", "石家庄", "河北"},
{"101090206", "任丘", "任丘", "河北"},
{"101090301", "邯郸", "邯郸", "河北"},
{"101290106", "宣威", "宣威", "云南"},
{"101290101", "昆明", "昆明", "云南"},
{"101260101", "贵阳", "贵阳", "贵州"},
}
var defaultCity = City{"101200101", "武汉", "武汉", "湖北"}
@@ -174,7 +181,29 @@ type currentWeather struct {
Temp string `json:"temp"`
}
var (
weatherCacheMu sync.Mutex
weatherCache map[string]time.Time
weatherCacheData map[string]string
)
func init() {
weatherCache = make(map[string]time.Time)
weatherCacheData = make(map[string]string)
}
func fetchAndPushWeather(city City) {
// 5 分钟内同一城市不重复请求
weatherCacheMu.Lock()
if last, ok := weatherCache[city.ID]; ok && time.Since(last) < 5*time.Minute {
if cached, ok := weatherCacheData[city.ID]; ok {
weatherCacheMu.Unlock()
evalJS(fmt.Sprintf(`if(window.updateWeatherFromGo) window.updateWeatherFromGo(%s)`, cached))
return
}
}
weatherCacheMu.Unlock()
type weatherData struct {
Current string `json:"current"`
Hourly []hourlyItem `json:"hourly"`
@@ -200,6 +229,10 @@ func fetchAndPushWeather(city City) {
wd.Daily = fetchDailyForecast(city.ID)
jsonData, _ := json.Marshal(wd)
weatherCacheMu.Lock()
weatherCache[city.ID] = time.Now()
weatherCacheData[city.ID] = string(jsonData)
weatherCacheMu.Unlock()
evalJS(fmt.Sprintf(`if(window.updateWeatherFromGo) window.updateWeatherFromGo(%s)`, string(jsonData)))
log.Println("天气已推送:", wd.Current)
}