package main import ( _ "embed" "encoding/json" "fmt" "os" "slices" "strings" "unicode" "github.com/daniwalter001/jackett_fiber/types" "golang.org/x/text/runes" "golang.org/x/text/transform" "golang.org/x/text/unicode/norm" ) func PrettyPrint(i interface{}) string { enc := json.NewEncoder(os.Stdout) enc.SetEscapeHTML(false) s, err := json.MarshalIndent(i, "", "\t") if err != nil { return "" } return string(s) } func containEandS(name string, s string, e string, abs bool, abs_season string, abs_episode string) bool { lower := strings.ToLower(name) return strings.Contains(lower, fmt.Sprintf("s%02se%02s ", s, e)) || strings.Contains(lower, fmt.Sprintf("s%02se%02s.", s, e)) || strings.Contains(lower, fmt.Sprintf("s%02se%02s-", s, e)) || // ----- strings.Contains(lower, fmt.Sprintf("s%se%02s ", s, e)) || strings.Contains(lower, fmt.Sprintf("s%se%02s.", s, e)) || strings.Contains(lower, fmt.Sprintf("s%se%02s-", s, e)) || // ----- strings.Contains(lower, fmt.Sprintf("s%sx%s", s, e)) || // ----- strings.Contains(lower, fmt.Sprintf("s%02s - e%02s ", s, e)) || strings.Contains(lower, fmt.Sprintf("s%02s.e%02s ", s, e)) || // ----- strings.Contains(lower, fmt.Sprintf("s%02se%s ", s, e)) || strings.Contains(lower, fmt.Sprintf("s%02se%s.", s, e)) || strings.Contains(lower, fmt.Sprintf("s%02se%s-", s, e)) || // ----- strings.Contains(lower, fmt.Sprintf("season %s e%s", s, e)) || // ----- abs (abs && (strings.Contains(lower, fmt.Sprintf("s%02se%02s", abs_season, abs_episode)) || strings.Contains(lower, fmt.Sprintf("s%02se%03s", abs_season, abs_episode)) || strings.Contains(lower, fmt.Sprintf("s%02se%04s", abs_season, abs_episode)) || strings.Contains(lower, fmt.Sprintf("s%02se%02s", s, abs_episode)) || strings.Contains(lower, fmt.Sprintf("s%02se%03s", s, abs_episode)) || strings.Contains(lower, fmt.Sprintf("season %s e%s", s, e)) || strings.Contains(lower, fmt.Sprintf("s%02se%s-", s, e)) || strings.Contains(lower, fmt.Sprintf("s%02se%s-", s, e)) || false)) } func containE_S(name string, s string, e string, abs bool, abs_season string, abs_episode string) bool { lower := strings.ToLower(name) return strings.Contains(lower, fmt.Sprintf("s%02s - %02s", s, e)) || strings.Contains(lower, fmt.Sprintf("s%s - %02s", s, e)) || strings.Contains(lower, fmt.Sprintf("season %s - %02s", s, e)) || strings.Contains(lower, fmt.Sprintf("season %s - %03s", s, e)) } func containsAbsoluteE(name string, s string, e string, abs bool, abs_season string, abs_episode string) bool { lower := strings.ToLower(name) return strings.Contains(lower, fmt.Sprintf("%02s ", abs_episode)) || strings.Contains(lower, fmt.Sprintf("%03s ", abs_episode)) || strings.Contains(lower, fmt.Sprintf("0%s ", abs_episode)) || strings.Contains(lower, fmt.Sprintf("%04s ", abs_episode)) || strings.Contains(lower, fmt.Sprintf("e%02s ", abs_episode)) || strings.Contains(lower, fmt.Sprintf("e%03s ", abs_episode)) || strings.Contains(lower, fmt.Sprintf("e0%s ", abs_episode)) || strings.Contains(lower, fmt.Sprintf("e%04s ", abs_episode)) } func containsAbsoluteE_(name string, s string, e string, abs bool, abs_season string, abs_episode string) bool { lower := strings.ToLower(name) return strings.Contains(lower, fmt.Sprintf(" %02s.", abs_episode)) || strings.Contains(lower, fmt.Sprintf(" %03s.", abs_episode)) || strings.Contains(lower, fmt.Sprintf(" 0%s.", abs_episode)) || strings.Contains(lower, fmt.Sprintf(" %04s.", abs_episode)) || strings.Contains(lower, fmt.Sprintf(" %02s-", abs_episode)) || strings.Contains(lower, fmt.Sprintf(" %03s-", abs_episode)) || strings.Contains(lower, fmt.Sprintf(" 0%s-", abs_episode)) || strings.Contains(lower, fmt.Sprintf(" %04s-", abs_episode)) } func isVideo(name string) bool { lower := strings.ToLower(name) return strings.Contains(lower, ".mp4") || strings.Contains(lower, ".mkv") || strings.Contains(lower, ".avi") || strings.Contains(lower, ".ts") || strings.Contains(lower, ".m3u") || strings.Contains(lower, ".m3u8") || strings.Contains(lower, ".flv") } func getQuality(name string) string { lower := strings.ToLower(name) if slices.ContainsFunc([]string{"2160", "4k", "uhd"}, func(e string) bool { return strings.Contains(lower, e) }) { return " 🌟4k" } if slices.ContainsFunc([]string{"1080", "fhd"}, func(e string) bool { return strings.Contains(lower, e) }) { return " 🎥FHD" } if slices.ContainsFunc([]string{"720", "hd"}, func(e string) bool { return strings.Contains(lower, e) }) { return " 📺HD" } if slices.ContainsFunc([]string{"480p", "380p", "sd"}, func(e string) bool { return strings.Contains(lower, e) }) { return " 📱SD" } return "" } func getSize(size int) string { gb := 1024 * 1024 * 1024 mb := 1024 * 1024 kb := 1024 size_ := "💾 " if size/gb >= 1 { size_ = size_ + fmt.Sprintf("%.2f GB", float64(size)/float64(gb)) } else if size/mb >= 1 { size_ = size_ + fmt.Sprintf("%.2f MB", float64(size)/float64(mb)) } else { size_ = size_ + fmt.Sprintf("%.2f KB", float64(size)/float64(kb)) } return size_ } func removeDuplicates(strList []types.ItemsParsed) []types.ItemsParsed { list := []types.ItemsParsed{} for _, item := range strList { if !(contains(list, item)) { list = append(list, item) } } return list } func contains(s []types.ItemsParsed, e types.ItemsParsed) bool { for _, a := range s { if a.Title == e.Title { return true } } return false } func filter[T any](slice []T, cb func(T) bool) (ret []T) { for _, v := range slice { if cb(v) { ret = append(ret, v) } } return ret } //go:embed assets/servers.db var servers string func getServers() []types.Server { serversArr := strings.Split(servers, "\n") var servers []types.Server for _, line := range serversArr { //fmt.Println(line) if len(line)!=0 { servers = append(servers, types.Server{ Host: strings.Split(line, "|")[0], ApiKey: strings.Split(line, "|")[1], }) } } return servers } func createIfNotExist(path string) bool { if _, err := os.Stat(path); err != nil { if os.IsNotExist(err) { errMkdir := os.MkdirAll(path, 0755) return errMkdir == nil } return false } fmt.Printf("%s already exists\n", path) return true } func removeAccents(s string) string { t := transform.Chain(norm.NFD, runes.Remove(runes.In(unicode.Mn)), norm.NFC) output, _, e := transform.String(t, s) if e != nil { panic(e) } return output }