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 }