新增: 星座运势+AI资讯+知识卡片+桌面设置窗口+秒显示开关
- 星座运势: 天聚数行API集成,5维进度条+幸运标签+今日概述 - AI资讯: 天聚数行API,图文布局5条展示,文件缓存2小时刷新 - 知识卡片: AI生成,关键字+提示词配置,30分钟刷新 - 桌面设置: 独立WebView2窗口,760x1350,含壁纸/布局/城市/颜色等配置 - 显示控制: 壁纸/时间/天气/星座/知识/AI资讯独立开关,秒显示开关 - 文件缓存: 星座运势+AI资讯缓存到本地,启动即显示上次数据 - initDone防抖: 防止设置窗口初始化触发卡片重载
This commit is contained in:
33
weather.go
33
weather.go
@@ -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)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user