PLT-3462 Add the ability to clear push notifications after channel is viewed (#3834)

* Add the ability to clear push notifications after channel is viewed

* Fix race condition between updating the mention count and reading it when sending push notifications
Этот коммит содержится в:
Joram Wilander
2016-08-31 12:52:14 -04:00
коммит произвёл GitHub
родитель b0b39ce71c
Коммит 26f96b240d
8 изменённых файлов: 181 добавлений и 70 удалений

Просмотреть файл

@@ -6,12 +6,16 @@ package model
import (
"encoding/json"
"io"
"strings"
)
const (
PUSH_NOTIFY_APPLE = "apple"
PUSH_NOTIFY_ANDROID = "android"
PUSH_TYPE_MESSAGE = "message"
PUSH_TYPE_CLEAR = "clear"
CATEGORY_DM = "DIRECT_MESSAGE"
MHPNS = "https://push.mattermost.com"
@@ -28,6 +32,7 @@ type PushNotification struct {
ContentAvailable int `json:"cont_ava"`
ChannelId string `json:"channel_id"`
ChannelName string `json:"channel_name"`
Type string `json:"type"`
}
func (me *PushNotification) ToJson() string {
@@ -39,6 +44,16 @@ func (me *PushNotification) ToJson() string {
}
}
func (me *PushNotification) SetDeviceIdAndPlatform(deviceId string) {
if strings.HasPrefix(deviceId, PUSH_NOTIFY_APPLE+":") {
me.Platform = PUSH_NOTIFY_APPLE
me.DeviceId = strings.TrimPrefix(deviceId, PUSH_NOTIFY_APPLE+":")
} else if strings.HasPrefix(deviceId, PUSH_NOTIFY_ANDROID+":") {
me.Platform = PUSH_NOTIFY_ANDROID
me.DeviceId = strings.TrimPrefix(deviceId, PUSH_NOTIFY_ANDROID+":")
}
}
func PushNotificationFromJson(data io.Reader) *PushNotification {
decoder := json.NewDecoder(data)
var me PushNotification

Просмотреть файл

@@ -6,6 +6,7 @@ package model
import (
"encoding/json"
"io"
"strings"
)
const (
@@ -109,6 +110,11 @@ func (me *Session) GetTeamByTeamId(teamId string) *TeamMember {
return nil
}
func (me *Session) IsMobileApp() bool {
return len(me.DeviceId) > 0 &&
(strings.HasPrefix(me.DeviceId, PUSH_NOTIFY_APPLE+":") || strings.HasPrefix(me.DeviceId, PUSH_NOTIFY_ANDROID+":"))
}
func SessionsToJson(o []*Session) string {
if b, err := json.Marshal(o); err != nil {
return "[]"