12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758 |
- package controllers
- import (
- "encoding/json"
- "net/http"
- "os"
- "path"
- "path/filepath"
- "strings"
- "time"
- "github.com/owncast/owncast/config"
- "github.com/owncast/owncast/models"
- log "github.com/sirupsen/logrus"
- )
- var emojiCache = make([]models.CustomEmoji, 0)
- var emojiCacheTimestamp time.Time
- // getCustomEmojiList returns a list of custom emoji either from the cache or from the emoji directory.
- func getCustomEmojiList() []models.CustomEmoji {
- fullPath := filepath.Join(config.WebRoot, config.EmojiDir)
- emojiDirInfo, err := os.Stat(fullPath)
- if err != nil {
- log.Errorln(err)
- }
- if emojiDirInfo.ModTime() != emojiCacheTimestamp {
- log.Traceln("Emoji cache invalid")
- emojiCache = make([]models.CustomEmoji, 0)
- }
- if len(emojiCache) == 0 {
- files, err := os.ReadDir(fullPath)
- if err != nil {
- log.Errorln(err)
- return emojiCache
- }
- for _, f := range files {
- name := strings.TrimSuffix(f.Name(), path.Ext(f.Name()))
- emojiPath := filepath.Join(config.EmojiDir, f.Name())
- singleEmoji := models.CustomEmoji{Name: name, Emoji: emojiPath}
- emojiCache = append(emojiCache, singleEmoji)
- }
- emojiCacheTimestamp = emojiDirInfo.ModTime()
- }
- return emojiCache
- }
- // GetCustomEmoji returns a list of custom emoji via the API.
- func GetCustomEmoji(w http.ResponseWriter, r *http.Request) {
- emojiList := getCustomEmojiList()
- if err := json.NewEncoder(w).Encode(emojiList); err != nil {
- InternalErrorHandler(w, err)
- }
- }
|