Files
xiaomihome/bridge/account.go
T
4566704 2b7de69403 refactor(logger): 日志改用 logrus 全局包级调用,移除 Logger 注入接口
为什么:并入宿主项目后须与宿主日志体系一致——宿主统一用 pkg/logger 初始化
logrus 全局实例并直接 logrus.Xxx 包级调用;包一层 Logger 接口会让 logrus 的
caller 定位(报告调用文件:行号)失准。

改动:
- 删除 logger 包(Logger 接口 / Default / SetDefault,默认本就是 logrus.StandardLogger)
- 11 个结构体移除 lgr logger.Logger 字段、SetLogger 方法及构造中的 lgr 初始化
- 192 处 lgr.Xxxf 调用改为 logrus.Xxxf,日志消息文本保持不变
- xiaomi.Client 移除 Logger() 访问器,air_conditioner 回读日志去掉判空调用直连 logrus
- miot_i18n.go 两处标准库 log.Printf 改为 logrus.Errorf,统一日志出口
- go.mod:logrus 从 indirect 提升为直接依赖
- goimports/goformat 全树规范化:此前部分文件未 gofmt(单行 if、对齐),本次顺带
  格式化,纯空白/换行变化,无逻辑改动

验证:go build / go vet / go test ./... 全部通过(bridge、miot、xiaomi、devices、specs)
2026-09-15 20:16:26 +08:00

104 lines
2.7 KiB
Go

package bridge
import (
"context"
"strconv"
"xiaomihome/xiaomi"
"xiaomihome/xiaomi/devices"
"github.com/sirupsen/logrus"
)
// ── 账号 / Token / 家庭 ──
func (b *Bridge) RefreshToken(ctx context.Context) (*xiaomi.TokenResult, error) {
return b.client.RefreshToken(ctx)
}
func (b *Bridge) GetUserInfo(ctx context.Context) (*xiaomi.UserInfo, error) {
return b.client.GetUserInfo(ctx)
}
func (b *Bridge) GetHomeList(ctx context.Context) ([]*xiaomi.HomeInfo, error) {
return b.client.GetHomeList(ctx)
}
func (b *Bridge) GetHomeDevices(ctx context.Context, homeID int64) ([]*xiaomi.DeviceInfo, error) {
return b.client.GetDevices(ctx, xiaomi.FilterByHome(strconv.FormatInt(homeID, 10)))
}
func (b *Bridge) GetHome(ctx context.Context, homeID int64) (*xiaomi.HomeInfo, error) {
return b.client.GetHome(ctx, homeID)
}
func (b *Bridge) GetRooms(ctx context.Context, homeID int64) ([]*xiaomi.RoomInfo, error) {
return b.client.GetRooms(ctx, homeID)
}
func (b *Bridge) GetRoomDevices(ctx context.Context, homeID, roomID int64) ([]string, error) {
return b.client.GetRoomDevices(ctx, homeID, roomID)
}
func (b *Bridge) RefreshDevices(ctx context.Context, homeIDs ...int64) error {
var ids []string
if len(homeIDs) > 0 {
ids = make([]string, len(homeIDs))
for i, v := range homeIDs {
ids[i] = strconv.FormatInt(v, 10)
}
}
err := b.client.RefreshDevices(ctx, ids...)
if err != nil {
return err
}
// 获取设备列表:指定家庭则只取家庭设备,否则全量
b.mu.Lock()
defer b.mu.Unlock()
// 全量设备列表(SDK 已在 RefreshDevices 中剔除米家已删除的设备),
// 本地控制器集合必须与它保持一致
all, err := b.client.GetDevices(ctx)
if err != nil {
return err
}
alive := make(map[string]struct{}, len(all))
for _, info := range all {
alive[info.DID] = struct{}{}
}
if removed := pruneControllers(b.dv, alive); len(removed) > 0 {
logrus.Infof("[bridge] %d: %d device(s) removed from Mi Home, controllers dropped: %v",
b.id, len(removed), removed)
}
if len(homeIDs) > 0 {
for _, hid := range homeIDs {
devs, err := b.client.GetDevices(ctx, xiaomi.FilterByHome(strconv.FormatInt(hid, 10)))
if err != nil {
return err
}
for _, info := range devs {
if _, exists := b.dv[info.DID]; !exists {
if d, createErr := devices.Create(b.client, info); createErr == nil && d != nil {
b.dv[info.DID] = d
b.subscribeDevice(info.DID, d)
}
}
}
}
return nil
}
// 全量
for _, info := range all {
if _, exists := b.dv[info.DID]; !exists {
if d, createErr := devices.Create(b.client, info); createErr == nil && d != nil {
b.dv[info.DID] = d
b.subscribeDevice(info.DID, d)
}
}
}
return nil
}