Files
wechat_ipad_pro/srv/wxrouter/wxfavsync.go
2026-02-17 13:06:23 +08:00

93 lines
2.6 KiB
Go

package wxrouter
import (
"time"
"xiawan/wx/clientsdk"
"xiawan/wx/clientsdk/baseinfo"
"xiawan/wx/protobuf/wechat"
"xiawan/wx/srv/wxcore"
"xiawan/wx/srv/wxface"
"github.com/gogo/protobuf/proto"
)
// WXFavSyncRouter 同步收藏响应路由
type WXFavSyncRouter struct {
wxcore.WXBaseRouter
}
// Handle 处理conn业务的方法
func (hbr *WXFavSyncRouter) Handle(wxResp wxface.IWXResponse) error {
currentWXConn := wxResp.GetWXConncet()
currentWXAccount := currentWXConn.GetWXAccount()
currentUserInfo := currentWXAccount.GetUserInfo()
currentReqInvoker := currentWXConn.GetWXReqInvoker()
currentWXCache := currentWXConn.GetWXCache()
currentTaskMgr := currentWXConn.GetWXTaskMgr()
// currentSyncMgr := currentWXConn.GetWXSyncMgr()
taskMgr, _ := currentTaskMgr.(*wxcore.WXTaskMgr)
currentSnsTransTask := taskMgr.GetSnsTransTask()
// 解析同步收藏响应包
var favSyncResp wechat.FavSyncResponse
err := clientsdk.ParseResponseData(currentUserInfo, wxResp.GetPackHeader(), &favSyncResp)
if err != nil {
// 请求出问题了,判断是否掉线,并重连
time.Sleep(1 * time.Second)
go currentWXConn.CheckOnLineStatusLogin()
return err
}
// 保存同步key下次使用
// 解析同步收藏列表
cmdList := favSyncResp.GetCmdList()
tmpCount := cmdList.GetCount()
tmpKeyBuf := favSyncResp.KeyBuf.GetBuffer()
if len(tmpKeyBuf) <= 0 {
currentReqInvoker.SendGetFavInfoRequest()
return nil
}
currentUserInfo.FavSyncKey = tmpKeyBuf
if tmpCount < 1024 {
if !currentWXCache.IsInitFavSyncFinished() {
// 同步完成
currentWXCache.SetInitFavSyncFinished(true)
}
}
currentReqInvoker.SendGetFavInfoRequest()
// 如果还没开启转发收藏
if !currentSnsTransTask.IsAutoRelay() {
return nil
}
itemList := cmdList.GetItemList()
// 获取收藏缓存
favInfoCache := currentWXCache.GetFavInfoCache()
for index := uint32(0); index < tmpCount; index++ {
tmpItem := itemList[index]
// 判断是否是新增的收藏
tmpCmdID := tmpItem.GetCmdId()
if tmpCmdID != baseinfo.MMFavSyncCmdAddItem {
return nil
}
// 处理新增的收藏
addItem := &wechat.AddFavItem{}
err := proto.Unmarshal(tmpItem.GetCmdBuf().GetData(), addItem)
if err != nil {
return err
}
// 判断是否重复
if favInfoCache.LastFavID() == addItem.GetFavId() && favInfoCache.LastFavUpdateTime() == addItem.GetUpdateTime() {
continue
}
favInfoCache.SetLastFavID(addItem.GetFavId())
favInfoCache.SetLastFavUpdateTime(addItem.GetUpdateTime())
// 获取收藏详情
return currentReqInvoker.SendBatchGetFavItemRequest(favInfoCache.LastFavID())
}
return nil
}