github.com/haalcala/mattermost-server-change-repo@v0.0.0-20210713015153-16753fbeee5f/store/localcachelayer/emoji_layer.go (about)

     1  // Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.
     2  // See LICENSE.txt for license information.
     3  
     4  package localcachelayer
     5  
     6  import (
     7  	"github.com/mattermost/mattermost-server/v5/model"
     8  	"github.com/mattermost/mattermost-server/v5/store"
     9  )
    10  
    11  type LocalCacheEmojiStore struct {
    12  	store.EmojiStore
    13  	rootStore *LocalCacheStore
    14  }
    15  
    16  func (es *LocalCacheEmojiStore) handleClusterInvalidateEmojiById(msg *model.ClusterMessage) {
    17  	if msg.Data == ClearCacheMessageData {
    18  		es.rootStore.emojiCacheById.Purge()
    19  	} else {
    20  		es.rootStore.emojiCacheById.Remove(msg.Data)
    21  	}
    22  }
    23  
    24  func (es *LocalCacheEmojiStore) handleClusterInvalidateEmojiIdByName(msg *model.ClusterMessage) {
    25  	if msg.Data == ClearCacheMessageData {
    26  		es.rootStore.emojiIdCacheByName.Purge()
    27  	} else {
    28  		es.rootStore.emojiIdCacheByName.Remove(msg.Data)
    29  	}
    30  }
    31  
    32  func (es LocalCacheEmojiStore) Get(id string, allowFromCache bool) (*model.Emoji, error) {
    33  	if allowFromCache {
    34  		if emoji, ok := es.getFromCacheById(id); ok {
    35  			return emoji, nil
    36  		}
    37  	}
    38  
    39  	emoji, err := es.EmojiStore.Get(id, allowFromCache)
    40  
    41  	if allowFromCache && err == nil {
    42  		es.addToCache(emoji)
    43  	}
    44  
    45  	return emoji, err
    46  }
    47  
    48  func (es LocalCacheEmojiStore) GetByName(name string, allowFromCache bool) (*model.Emoji, error) {
    49  	if id, ok := model.GetSystemEmojiId(name); ok {
    50  		return es.Get(id, allowFromCache)
    51  	}
    52  
    53  	if allowFromCache {
    54  		if emoji, ok := es.getFromCacheByName(name); ok {
    55  			return emoji, nil
    56  		}
    57  	}
    58  
    59  	emoji, err := es.EmojiStore.GetByName(name, allowFromCache)
    60  
    61  	if allowFromCache && err == nil {
    62  		es.addToCache(emoji)
    63  	}
    64  
    65  	return emoji, err
    66  }
    67  
    68  func (es LocalCacheEmojiStore) Delete(emoji *model.Emoji, time int64) error {
    69  	err := es.EmojiStore.Delete(emoji, time)
    70  
    71  	if err == nil {
    72  		es.removeFromCache(emoji)
    73  	}
    74  
    75  	return err
    76  }
    77  
    78  func (es LocalCacheEmojiStore) addToCache(emoji *model.Emoji) {
    79  	es.rootStore.doStandardAddToCache(es.rootStore.emojiCacheById, emoji.Id, emoji)
    80  	es.rootStore.doStandardAddToCache(es.rootStore.emojiIdCacheByName, emoji.Name, emoji.Id)
    81  }
    82  
    83  func (es LocalCacheEmojiStore) getFromCacheById(id string) (*model.Emoji, bool) {
    84  	var emoji *model.Emoji
    85  	if err := es.rootStore.doStandardReadCache(es.rootStore.emojiCacheById, id, &emoji); err == nil {
    86  		return emoji, true
    87  	}
    88  	return nil, false
    89  }
    90  
    91  func (es LocalCacheEmojiStore) getFromCacheByName(name string) (*model.Emoji, bool) {
    92  	var emojiId string
    93  	if err := es.rootStore.doStandardReadCache(es.rootStore.emojiIdCacheByName, name, &emojiId); err == nil {
    94  		return es.getFromCacheById(emojiId)
    95  	}
    96  	return nil, false
    97  }
    98  
    99  func (es LocalCacheEmojiStore) removeFromCache(emoji *model.Emoji) {
   100  	es.rootStore.doInvalidateCacheCluster(es.rootStore.emojiCacheById, emoji.Id)
   101  	es.rootStore.doInvalidateCacheCluster(es.rootStore.emojiIdCacheByName, emoji.Name)
   102  }