github.com/cjdelisle/matterfoss@v5.11.1+incompatible/model/status.go (about)

     1  // Copyright (c) 2016-present Mattermost, Inc. All Rights Reserved.
     2  // See License.txt for license information.
     3  
     4  package model
     5  
     6  import (
     7  	"encoding/json"
     8  	"io"
     9  )
    10  
    11  const (
    12  	STATUS_OUT_OF_OFFICE   = "ooo"
    13  	STATUS_OFFLINE         = "offline"
    14  	STATUS_AWAY            = "away"
    15  	STATUS_DND             = "dnd"
    16  	STATUS_ONLINE          = "online"
    17  	STATUS_CACHE_SIZE      = SESSION_CACHE_SIZE
    18  	STATUS_CHANNEL_TIMEOUT = 20000  // 20 seconds
    19  	STATUS_MIN_UPDATE_TIME = 120000 // 2 minutes
    20  )
    21  
    22  type Status struct {
    23  	UserId         string `json:"user_id"`
    24  	Status         string `json:"status"`
    25  	Manual         bool   `json:"manual"`
    26  	LastActivityAt int64  `json:"last_activity_at"`
    27  	ActiveChannel  string `json:"active_channel,omitempty" db:"-"`
    28  }
    29  
    30  func (o *Status) ToJson() string {
    31  	tempChannelId := o.ActiveChannel
    32  	o.ActiveChannel = ""
    33  	b, _ := json.Marshal(o)
    34  	o.ActiveChannel = tempChannelId
    35  	return string(b)
    36  }
    37  
    38  func (o *Status) ToClusterJson() string {
    39  	b, _ := json.Marshal(o)
    40  	return string(b)
    41  }
    42  
    43  func StatusFromJson(data io.Reader) *Status {
    44  	var o *Status
    45  	json.NewDecoder(data).Decode(&o)
    46  	return o
    47  }
    48  
    49  func StatusListToJson(u []*Status) string {
    50  	activeChannels := make([]string, len(u))
    51  	for index, s := range u {
    52  		activeChannels[index] = s.ActiveChannel
    53  		s.ActiveChannel = ""
    54  	}
    55  
    56  	b, _ := json.Marshal(u)
    57  
    58  	for index, s := range u {
    59  		s.ActiveChannel = activeChannels[index]
    60  	}
    61  
    62  	return string(b)
    63  }
    64  
    65  func StatusListFromJson(data io.Reader) []*Status {
    66  	var statuses []*Status
    67  	json.NewDecoder(data).Decode(&statuses)
    68  	return statuses
    69  }
    70  
    71  func StatusMapToInterfaceMap(statusMap map[string]*Status) map[string]interface{} {
    72  	interfaceMap := map[string]interface{}{}
    73  	for _, s := range statusMap {
    74  		// Omitted statues mean offline
    75  		if s.Status != STATUS_OFFLINE {
    76  			interfaceMap[s.UserId] = s.Status
    77  		}
    78  	}
    79  	return interfaceMap
    80  }