Skip to content

Commit 71a222c

Browse files
authored
Fix deadloop for dirty (#127)
* fix: deadloop for dirty * base DirtyPayload * make ci green
1 parent 7f5ca0c commit 71a222c

File tree

5 files changed

+34
-25
lines changed

5 files changed

+34
-25
lines changed

wechaty-puppet-service/puppet_service.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -1128,7 +1128,7 @@ func (p *PuppetService) TagContactList(contactID string) ([]string, error) {
11281128
// DirtyPayload ...
11291129
func (p *PuppetService) DirtyPayload(payloadType schemas.PayloadType, id string) error {
11301130
log.Printf("PuppetService DirtyPayload(%v, %v)\n", payloadType, id)
1131-
err := p.Puppet.DirtyPayload(payloadType, id)
1131+
err := p.Puppet.OnDirty(payloadType, id)
11321132
if err != nil {
11331133
return err
11341134
}

wechaty-puppet/puppet.go

+19-4
Original file line numberDiff line numberDiff line change
@@ -132,7 +132,8 @@ func NewPuppet(option Option) (*Puppet, error) {
132132
if err != nil {
133133
return nil, err
134134
}
135-
return &Puppet{
135+
136+
p := &Puppet{
136137
Option: option,
137138
EventEmitter: events.New(),
138139
cacheMessagePayload: cacheMessage,
@@ -141,7 +142,16 @@ func NewPuppet(option Option) (*Puppet, error) {
141142
cacheRoomPayload: cacheRoomPayload,
142143
cacheRoomMemberPayload: cacheRoomMemberPayload,
143144
cacheContactPayload: cacheContactPayload,
144-
}, nil
145+
}
146+
147+
p.On(schemas.PuppetEventNameDirty, func(i ...interface{}) {
148+
payload, ok := i[0].(*schemas.EventDirtyPayload)
149+
if !ok {
150+
return
151+
}
152+
_ = p.OnDirty(payload.PayloadType, payload.PayloadId)
153+
})
154+
return p, nil
145155
}
146156

147157
// MessageList message list
@@ -725,8 +735,8 @@ func (p *Puppet) dirtyPayloadFriendship(friendshipID string) {
725735
p.cacheFriendshipPayload.Remove(friendshipID)
726736
}
727737

728-
// DirtyPayload ...
729-
func (p *Puppet) DirtyPayload(payloadType schemas.PayloadType, id string) error {
738+
// OnDirty clean cache
739+
func (p *Puppet) OnDirty(payloadType schemas.PayloadType, id string) error {
730740
switch payloadType {
731741
case schemas.PayloadTypeMessage:
732742
p.dirtyPayloadMessage(id)
@@ -760,3 +770,8 @@ func (p *Puppet) MessageMiniProgram(messageID string) (*schemas.MiniProgramPaylo
760770
}
761771
return miniapp, nil
762772
}
773+
774+
// DirtyPayload base clean cache
775+
func (p *Puppet) DirtyPayload(payloadType schemas.PayloadType, id string) error {
776+
return p.OnDirty(payloadType, id)
777+
}

wechaty/user/contact.go

+4-7
Original file line numberDiff line numberDiff line change
@@ -52,13 +52,6 @@ func (c *Contact) Ready(forceSync bool) (err error) {
5252
return nil
5353
}
5454

55-
if forceSync {
56-
err := c.GetPuppet().DirtyPayload(schemas.PayloadTypeContact, c.Id)
57-
if err != nil {
58-
return err
59-
}
60-
}
61-
6255
c.payload, err = c.GetPuppet().ContactPayload(c.Id)
6356
if err != nil {
6457
return err
@@ -72,6 +65,10 @@ func (c *Contact) IsReady() bool {
7265

7366
// Sync force reload data for Contact, sync data from lowlevel API again.
7467
func (c *Contact) Sync() error {
68+
err := c.GetPuppet().DirtyPayload(schemas.PayloadTypeContact, c.Id)
69+
if err != nil {
70+
return err
71+
}
7572
return c.Ready(true)
7673
}
7774

wechaty/user/room.go

+6-9
Original file line numberDiff line numberDiff line change
@@ -32,15 +32,6 @@ func (r *Room) Ready(forceSync bool) (err error) {
3232
return nil
3333
}
3434

35-
if forceSync {
36-
if err := r.GetPuppet().DirtyPayload(schemas.PayloadTypeRoom, r.id); err != nil {
37-
return err
38-
}
39-
if err := r.GetPuppet().DirtyPayload(schemas.PayloadTypeRoomMember, r.id); err != nil {
40-
return err
41-
}
42-
}
43-
4435
r.payLoad, err = r.GetPuppet().RoomPayload(r.id)
4536
if err != nil {
4637
return err
@@ -140,6 +131,12 @@ func (r *Room) Alias(contact _interface.IContact) (string, error) {
140131

141132
// Sync Force reload data for Room, Sync data from puppet API again.
142133
func (r *Room) Sync() error {
134+
if err := r.GetPuppet().DirtyPayload(schemas.PayloadTypeRoom, r.id); err != nil {
135+
return err
136+
}
137+
if err := r.GetPuppet().DirtyPayload(schemas.PayloadTypeRoomMember, r.id); err != nil {
138+
return err
139+
}
143140
return r.Ready(true)
144141
}
145142

wechaty/wechaty.go

+4-4
Original file line numberDiff line numberDiff line change
@@ -458,14 +458,14 @@ func (w *Wechaty) initPuppetEventBridge() {
458458
switch payload.PayloadType {
459459
case schemas.PayloadTypeRoomMember,
460460
schemas.PayloadTypeContact:
461-
if err := w.contact.Load(payload.PayloadId).Sync(); err != nil {
462-
log.Printf("emit dirty contact.Sync() err: %s\n", err.Error())
461+
if err := w.contact.Load(payload.PayloadId).Ready(true); err != nil {
462+
log.Printf("emit dirty contact.Ready() err: %s\n", err.Error())
463463
w.emit(schemas.PuppetEventNameError, NewContext(), err)
464464
return
465465
}
466466
case schemas.PayloadTypeRoom:
467-
if err := w.room.Load(payload.PayloadId).Sync(); err != nil {
468-
log.Printf("emit dirty room.Sync() err: %s\n", err.Error())
467+
if err := w.room.Load(payload.PayloadId).Ready(true); err != nil {
468+
log.Printf("emit dirty room.Ready() err: %s\n", err.Error())
469469
w.emit(schemas.PuppetEventNameError, NewContext(), err)
470470
return
471471
}

0 commit comments

Comments
 (0)