82 lines
2.1 KiB
Go
82 lines
2.1 KiB
Go
|
package main
|
||
|
|
||
|
import (
|
||
|
"fmt"
|
||
|
"math"
|
||
|
"sort"
|
||
|
|
||
|
"github.com/confusedpolarbear/intro_skipper_verifier/structs"
|
||
|
)
|
||
|
|
||
|
// report template helper functions
|
||
|
|
||
|
// Sort show names alphabetically
|
||
|
func templateSortShows(shows map[string]structs.Seasons) []string {
|
||
|
var showNames []string
|
||
|
|
||
|
for show := range shows {
|
||
|
showNames = append(showNames, show)
|
||
|
}
|
||
|
|
||
|
sort.Strings(showNames)
|
||
|
|
||
|
return showNames
|
||
|
}
|
||
|
|
||
|
// Sort season numbers
|
||
|
func templateSortSeason(show structs.Seasons) []int {
|
||
|
var keys []int
|
||
|
|
||
|
for season := range show {
|
||
|
keys = append(keys, season)
|
||
|
}
|
||
|
|
||
|
sort.Ints(keys)
|
||
|
|
||
|
return keys
|
||
|
}
|
||
|
|
||
|
// Compare the episode with the provided ID in the old report to the episode in the new report.
|
||
|
func templateCompareEpisodes(id string, reports structs.TemplateReportData) structs.IntroPair {
|
||
|
var pair structs.IntroPair
|
||
|
var tolerance int = 5
|
||
|
|
||
|
// Locate both episodes
|
||
|
pair.Old = reports.OldReport.IntroMap[id]
|
||
|
pair.New = reports.NewReport.IntroMap[id]
|
||
|
|
||
|
// Mark the timestamps as similar if they are within a few seconds of each other
|
||
|
similar := func(oldTime, newTime float32) bool {
|
||
|
diff := math.Abs(float64(newTime) - float64(oldTime))
|
||
|
return diff <= float64(tolerance)
|
||
|
}
|
||
|
|
||
|
if pair.Old.Valid && !pair.New.Valid {
|
||
|
// If an intro was found previously, but not now, flag it
|
||
|
pair.WarningShort = "only_previous"
|
||
|
pair.Warning = "Introduction found in previous report, but not the current one"
|
||
|
|
||
|
} else if !pair.Old.Valid && pair.New.Valid {
|
||
|
// If an intro was not found previously, but found now, flag it
|
||
|
pair.WarningShort = "improvement"
|
||
|
pair.Warning = "New introduction discovered"
|
||
|
|
||
|
} else if !pair.Old.Valid && !pair.New.Valid {
|
||
|
// If an intro has never been found for this episode
|
||
|
pair.WarningShort = "missing"
|
||
|
pair.Warning = "No introduction has ever been found for this episode"
|
||
|
|
||
|
} else if !similar(pair.Old.IntroStart, pair.New.IntroStart) || !similar(pair.Old.IntroEnd, pair.New.IntroEnd) {
|
||
|
// If the intro timestamps are too different, flag it
|
||
|
pair.WarningShort = "different"
|
||
|
pair.Warning = fmt.Sprintf("Timestamps differ by more than %d seconds", tolerance)
|
||
|
|
||
|
} else {
|
||
|
// No warning was generated
|
||
|
pair.WarningShort = "okay"
|
||
|
pair.Warning = "Okay"
|
||
|
}
|
||
|
|
||
|
return pair
|
||
|
}
|