|
|
|
@ -6,6 +6,7 @@ import (
|
|
|
|
|
"math/rand"
|
|
|
|
|
"regexp"
|
|
|
|
|
"sort"
|
|
|
|
|
"sync"
|
|
|
|
|
"unicode"
|
|
|
|
|
|
|
|
|
|
irc "git.martyn.berlin/martyn/twitchsingstools/internal/irc"
|
|
|
|
@ -235,22 +236,8 @@ func AdminHandler(response http.ResponseWriter, request *http.Request) {
|
|
|
|
|
TopNSingers []SingerSings
|
|
|
|
|
ChannelKey string
|
|
|
|
|
}
|
|
|
|
|
updateCacheIfNecessary(vars["channel"])
|
|
|
|
|
channelData := ircBot.ChannelData[vars["channel"]]
|
|
|
|
|
if time.Now().Sub(ircBot.ChannelData[vars["channel"]].VideoCacheUpdated).Hours() > 1 {
|
|
|
|
|
fmt.Printf("Cache of %d performances is older than an hour - %.1f hours old to be precise... fetching.\n", len(ircBot.ChannelData[vars["channel"]].VideoCache), time.Now().Sub(ircBot.ChannelData[vars["channel"]].VideoCacheUpdated).Hours())
|
|
|
|
|
vids, err := fetchAllVoDs(channelData.TwitchUserID, channelData.Bearer)
|
|
|
|
|
if err != nil {
|
|
|
|
|
errCache := make([]irc.SingsVideoStruct, 0)
|
|
|
|
|
var ret irc.SingsVideoStruct
|
|
|
|
|
ret.FullTitle = "Error fetching videos: " + err.Error()
|
|
|
|
|
errCache = append(errCache, ret)
|
|
|
|
|
vids = errCache
|
|
|
|
|
}
|
|
|
|
|
updateCalculatedFields(vids)
|
|
|
|
|
ircBot.UpdateVideoCache(vars["channel"], vids)
|
|
|
|
|
} else {
|
|
|
|
|
fmt.Printf("Cache of %d performances is younger than an hour - %.1f hours old to be precise... not fetching.\n", len(ircBot.ChannelData[vars["channel"]].VideoCache), time.Now().Sub(ircBot.ChannelData[vars["channel"]].VideoCacheUpdated).Hours())
|
|
|
|
|
}
|
|
|
|
|
updateCalculatedFields(channelData.VideoCache)
|
|
|
|
|
for _, song := range channelData.VideoCache {
|
|
|
|
|
if song.Duet && song.OtherSinger == "" {
|
|
|
|
@ -490,6 +477,29 @@ func (h *KVHeap) Pop() interface{} {
|
|
|
|
|
return x
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
var cacheLock sync.Mutex
|
|
|
|
|
|
|
|
|
|
func updateCacheIfNecessary(channel string) {
|
|
|
|
|
cacheLock.Lock()
|
|
|
|
|
channelData := ircBot.ChannelData[channel]
|
|
|
|
|
if time.Now().Sub(channelData.VideoCacheUpdated).Hours() > 1 {
|
|
|
|
|
fmt.Printf("Cache of %d performances is older than an hour - %.1f hours old to be precise... fetching.\n", len(channelData.VideoCache), time.Now().Sub(ircBot.ChannelData[channel].VideoCacheUpdated).Hours())
|
|
|
|
|
vids, err := fetchAllVoDs(channelData.TwitchUserID, channelData.Bearer)
|
|
|
|
|
if err != nil {
|
|
|
|
|
errCache := make([]irc.SingsVideoStruct, 0)
|
|
|
|
|
var ret irc.SingsVideoStruct
|
|
|
|
|
ret.FullTitle = "Error fetching videos: " + err.Error()
|
|
|
|
|
errCache = append(errCache, ret)
|
|
|
|
|
vids = errCache
|
|
|
|
|
}
|
|
|
|
|
updateCalculatedFields(vids)
|
|
|
|
|
ircBot.UpdateVideoCache(channel, vids)
|
|
|
|
|
} else {
|
|
|
|
|
fmt.Printf("Cache of %d performances is younger than an hour - %.1f hours old to be precise... not fetching.\n", len(channelData.VideoCache), time.Now().Sub(ircBot.ChannelData[channel].VideoCacheUpdated).Hours())
|
|
|
|
|
}
|
|
|
|
|
cacheLock.Unlock()
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func calculateTopNSingers(songCache []irc.SingsVideoStruct, howMany int) []SingerSings {
|
|
|
|
|
songMap := map[string]int{}
|
|
|
|
|
songCount := 0
|
|
|
|
@ -746,22 +756,8 @@ func CSVHandler(response http.ResponseWriter, request *http.Request) {
|
|
|
|
|
TopNSongs []SongSings
|
|
|
|
|
TopNSingers []SingerSings
|
|
|
|
|
}
|
|
|
|
|
updateCacheIfNecessary(vars["channel"])
|
|
|
|
|
channelData := ircBot.ChannelData[vars["channel"]]
|
|
|
|
|
if time.Now().Sub(ircBot.ChannelData[vars["channel"]].VideoCacheUpdated).Hours() > 1 {
|
|
|
|
|
fmt.Printf("Cache of %d performances is older than an hour - %.1f hours old to be precise... fetching.\n", len(ircBot.ChannelData[vars["channel"]].VideoCache), time.Now().Sub(ircBot.ChannelData[vars["channel"]].VideoCacheUpdated).Hours())
|
|
|
|
|
vids, err := fetchAllVoDs(channelData.TwitchUserID, channelData.Bearer)
|
|
|
|
|
if err != nil {
|
|
|
|
|
errCache := make([]irc.SingsVideoStruct, 0)
|
|
|
|
|
var ret irc.SingsVideoStruct
|
|
|
|
|
ret.FullTitle = "Error fetching videos: " + err.Error()
|
|
|
|
|
errCache = append(errCache, ret)
|
|
|
|
|
vids = errCache
|
|
|
|
|
}
|
|
|
|
|
updateCalculatedFields(vids)
|
|
|
|
|
ircBot.UpdateVideoCache(vars["channel"], vids)
|
|
|
|
|
} else {
|
|
|
|
|
fmt.Printf("Cache of %d performances is younger than an hour - %.1f hours old to be precise... not fetching.\n", len(ircBot.ChannelData[vars["channel"]].VideoCache), time.Now().Sub(ircBot.ChannelData[vars["channel"]].VideoCacheUpdated).Hours())
|
|
|
|
|
}
|
|
|
|
|
topNSongs := calculateTopNSongs(channelData.VideoCache, 10)
|
|
|
|
|
topNSingers := calculateTopNSingers(channelData.VideoCache, 10)
|
|
|
|
|
var td = TemplateData{channelData.Name, channelData.Command, channelData.ExtraStrings, channelData.JoinTime, channelData.JoinTime.Format(irc.UTCFormat), false, channelData.HasLeft, AugmentSingsVideoStructSliceForCSV(channelData.VideoCache), topNSongs, topNSingers}
|
|
|
|
@ -796,22 +792,8 @@ func JSONHandler(response http.ResponseWriter, request *http.Request) {
|
|
|
|
|
TopNSongs []SongSings
|
|
|
|
|
TopNSingers []SingerSings
|
|
|
|
|
}
|
|
|
|
|
updateCacheIfNecessary(vars["channel"])
|
|
|
|
|
channelData := ircBot.ChannelData[vars["channel"]]
|
|
|
|
|
if time.Now().Sub(ircBot.ChannelData[vars["channel"]].VideoCacheUpdated).Hours() > 1 {
|
|
|
|
|
fmt.Printf("Cache of %d performances is older than an hour - %.1f hours old to be precise... fetching.\n", len(ircBot.ChannelData[vars["channel"]].VideoCache), time.Now().Sub(ircBot.ChannelData[vars["channel"]].VideoCacheUpdated).Hours())
|
|
|
|
|
vids, err := fetchAllVoDs(channelData.TwitchUserID, channelData.Bearer)
|
|
|
|
|
if err != nil {
|
|
|
|
|
errCache := make([]irc.SingsVideoStruct, 0)
|
|
|
|
|
var ret irc.SingsVideoStruct
|
|
|
|
|
ret.FullTitle = "Error fetching videos: " + err.Error()
|
|
|
|
|
errCache = append(errCache, ret)
|
|
|
|
|
vids = errCache
|
|
|
|
|
}
|
|
|
|
|
updateCalculatedFields(vids)
|
|
|
|
|
ircBot.UpdateVideoCache(vars["channel"], vids)
|
|
|
|
|
} else {
|
|
|
|
|
fmt.Printf("Cache of %d performances is younger than an hour - %.1f hours old to be precise... not fetching.\n", len(ircBot.ChannelData[vars["channel"]].VideoCache), time.Now().Sub(ircBot.ChannelData[vars["channel"]].VideoCacheUpdated).Hours())
|
|
|
|
|
}
|
|
|
|
|
topNSongs := calculateTopNSongs(channelData.VideoCache, 10)
|
|
|
|
|
topNSingers := calculateTopNSingers(channelData.VideoCache, 10)
|
|
|
|
|
var td = TemplateData{channelData.Name, channelData.Command, channelData.ExtraStrings, channelData.JoinTime, channelData.JoinTime.Format(irc.UTCFormat), false, channelData.HasLeft, AugmentSingsVideoStructSlice(channelData.VideoCache), topNSongs, topNSingers}
|
|
|
|
|