Add cache to xiaomi cloud logins

This commit is contained in:
Alex X
2026-01-17 09:41:41 +03:00
parent 4ffdeb06d0
commit 9a1eac8ef4
+19 -11
View File
@@ -50,18 +50,26 @@ func Init() {
} }
var tokens map[string]string var tokens map[string]string
var tokensMu sync.Mutex var clouds map[string]*xiaomi.Cloud
var cloudsMu sync.Mutex
func getCloud(userID string) (*xiaomi.Cloud, error) { func getCloud(userID string) (*xiaomi.Cloud, error) {
tokensMu.Lock() cloudsMu.Lock()
defer tokensMu.Unlock() defer cloudsMu.Unlock()
token := tokens[userID] if cloud := clouds[userID]; cloud != nil {
cloud := xiaomi.NewCloud(AppXiaomiHome) return cloud, nil
if err := cloud.LoginWithToken(userID, token); err != nil {
return nil, err
} }
cloud := xiaomi.NewCloud(AppXiaomiHome)
if err := cloud.LoginWithToken(userID, tokens[userID]); err != nil {
return nil, err
}
if clouds == nil {
clouds = map[string]*xiaomi.Cloud{userID: cloud}
} else {
clouds[userID] = cloud
}
return cloud, nil return cloud, nil
} }
@@ -221,12 +229,12 @@ func apiDeviceList(w http.ResponseWriter, r *http.Request) {
user := query.Get("id") user := query.Get("id")
if user == "" { if user == "" {
tokensMu.Lock() cloudsMu.Lock()
users := make([]string, 0, len(tokens)) users := make([]string, 0, len(tokens))
for s := range tokens { for s := range tokens {
users = append(users, s) users = append(users, s)
} }
tokensMu.Unlock() cloudsMu.Unlock()
api.ResponseJSON(w, users) api.ResponseJSON(w, users)
return return
@@ -308,13 +316,13 @@ func apiAuth(w http.ResponseWriter, r *http.Request) {
userID, token := auth.UserToken() userID, token := auth.UserToken()
auth = nil auth = nil
tokensMu.Lock() cloudsMu.Lock()
if tokens == nil { if tokens == nil {
tokens = map[string]string{userID: token} tokens = map[string]string{userID: token}
} else { } else {
tokens[userID] = token tokens[userID] = token
} }
tokensMu.Unlock() cloudsMu.Unlock()
err = app.PatchConfig([]string{"xiaomi", userID}, token) err = app.PatchConfig([]string{"xiaomi", userID}, token)
} }