crunchy-cli/utils/format.go
2022-07-25 10:53:29 +02:00

63 lines
1.8 KiB
Go

package utils
import (
"fmt"
"github.com/crunchy-labs/crunchyroll-go/v3"
"reflect"
"runtime"
"strings"
)
type FormatInformation struct {
// the Format to download
Format *crunchyroll.Format
// additional formats which are only used by archive.go
AdditionalFormats []*crunchyroll.Format
Title string `json:"title"`
SeriesName string `json:"series_name"`
SeasonName string `json:"season_name"`
SeasonNumber int `json:"season_number"`
EpisodeNumber int `json:"episode_number"`
Resolution string `json:"resolution"`
FPS float64 `json:"fps"`
Audio crunchyroll.LOCALE `json:"audio"`
Subtitle crunchyroll.LOCALE `json:"subtitle"`
}
func (fi FormatInformation) FormatString(source string) string {
fields := reflect.TypeOf(fi)
values := reflect.ValueOf(fi)
for i := 0; i < fields.NumField(); i++ {
var valueAsString string
switch value := values.Field(i); value.Kind() {
case reflect.String:
valueAsString = value.String()
case reflect.Int:
valueAsString = fmt.Sprintf("%02d", value.Int())
case reflect.Float64:
valueAsString = fmt.Sprintf("%.2f", value.Float())
case reflect.Bool:
valueAsString = fields.Field(i).Tag.Get("json")
if !value.Bool() {
valueAsString = "no " + valueAsString
}
}
if runtime.GOOS != "windows" {
for _, char := range []string{"/"} {
valueAsString = strings.ReplaceAll(valueAsString, char, "")
}
} else {
for _, char := range []string{"\\", "<", ">", ":", "\"", "/", "|", "?", "*"} {
valueAsString = strings.ReplaceAll(valueAsString, char, "")
}
}
source = strings.ReplaceAll(source, "{"+fields.Field(i).Tag.Get("json")+"}", valueAsString)
}
return source
}