diff --git a/server/mailserver/common/types.go b/server/mailserver/common/types.go index ea17db9a..c6fc1bd0 100644 --- a/server/mailserver/common/types.go +++ b/server/mailserver/common/types.go @@ -38,6 +38,7 @@ type Player interface { GetAttachment([]Mail) error DeleteMails([]Mail) error IsReadable(Mail) bool + IsUnread(Mail) bool } type PlayerMgr interface { diff --git a/server/mailserver/mail/mail.go b/server/mailserver/mail/mail.go index 30ecbe02..71a470e9 100644 --- a/server/mailserver/mail/mail.go +++ b/server/mailserver/mail/mail.go @@ -95,6 +95,11 @@ func (this *mail) fillMailDto(hum common.Player, p *common.MailDto) bool { p.Subject = this.subject p.Content = this.content //p.Flags + if hum.IsUnread(this) { + p.Flags = 1 << 0 + } else { + p.Flags = 0 + } p.SendTime = this.sendTime p.ExpireTime = this.expireTime p.MailType = this.mailType diff --git a/server/mailserver/player/player.go b/server/mailserver/player/player.go index a4aecad3..426ba728 100644 --- a/server/mailserver/player/player.go +++ b/server/mailserver/player/player.go @@ -117,7 +117,7 @@ func (this *player) DeleteMails(mails []common.Mail) error { } func (this *player) checkLock() { - if !this.lock.TryLock() { + if this.lock.TryLock() { panic("player checkLock error") } } @@ -153,7 +153,19 @@ func (this *player) getInbox(mailId int64) *inbox { } } -func (this* player) IsReadable(mail common.Mail) bool { +func (this* player) IsReadable(m common.Mail) bool { + mi := this.getInbox(m.GetMailId()) + if mi != nil { + return mi.state != constant.INBOX_STATE_DELETED + } + return true +} + +func (this* player) IsUnread(m common.Mail) bool { + mi := this.getInbox(m.GetMailId()) + if mi != nil { + return mi.state != constant.INBOX_STATE_NONE + } return true }