initial release
This commit is contained in:
117
wareztb.go
Normal file
117
wareztb.go
Normal file
@@ -0,0 +1,117 @@
|
||||
package wareztb
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"fmt"
|
||||
"strings"
|
||||
|
||||
"git.0x0001f346.de/andreas/utils"
|
||||
)
|
||||
|
||||
var whitelist map[string]string = utils.BuildWhitelistForStringSanitisation(
|
||||
getWhitelistedCharacters(),
|
||||
)
|
||||
|
||||
// GetComparableWarezString tries to make a file or folder name comparable in a warez context
|
||||
func GetComparableWarezString(s string) (string, error) {
|
||||
title, year, err := GetTitleAndYearFromWarezString(s)
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
|
||||
return utils.RemoveDoubledStrings(
|
||||
strings.ToLower(
|
||||
fmt.Sprintf("%s.%d", title, year),
|
||||
),
|
||||
".",
|
||||
), nil
|
||||
}
|
||||
|
||||
// GetTitleAndYearFromWarezString tries to get the title and year from a string in a warez context
|
||||
func GetTitleAndYearFromWarezString(s string) (string, int64, error) {
|
||||
sanitized := SanitizeStringForWarezUsage(s)
|
||||
|
||||
year, err := getYearFromWarezString(sanitized)
|
||||
if err != nil {
|
||||
return "", 0, err
|
||||
}
|
||||
|
||||
title, err := getTitleFromWarezString(sanitized, year)
|
||||
if err != nil {
|
||||
return "", 0, err
|
||||
}
|
||||
|
||||
return title, year, nil
|
||||
}
|
||||
|
||||
// SanitizeStringForWarezUsage sanitizes s for usage in a warez context ("John Wick: Kapitel 4 (2023)" --> "John.Wick.Kapitel.4.2023")
|
||||
func SanitizeStringForWarezUsage(s string) string {
|
||||
replacements := map[string]string{
|
||||
"Ö": "Oe",
|
||||
"ö": "oe",
|
||||
"Ä": "Ae",
|
||||
"ä": "ae",
|
||||
"Ü": "Ue",
|
||||
"ü": "ue",
|
||||
"ß": "ss",
|
||||
" ": ".",
|
||||
":": "",
|
||||
"_": ".",
|
||||
"/": ".",
|
||||
}
|
||||
|
||||
for old, new := range replacements {
|
||||
s = strings.Replace(s, old, new, -1)
|
||||
}
|
||||
s = strings.Replace(s, ".-.", ".", -1)
|
||||
|
||||
return utils.SanitizeStringWithWhitelist(
|
||||
utils.RemoveDoubledStrings(s, "."),
|
||||
whitelist,
|
||||
)
|
||||
}
|
||||
|
||||
func getTitleFromWarezString(s string, year int64) (string, error) {
|
||||
chuncks := strings.Split(s, ".")
|
||||
sYear := fmt.Sprintf("%d", year)
|
||||
|
||||
for i := len(chuncks) - 1; i >= 0; i-- {
|
||||
if chuncks[i] == sYear {
|
||||
return strings.Join(chuncks[:i], "."), nil
|
||||
}
|
||||
}
|
||||
|
||||
return "", errors.New("could not determine a valid title in s")
|
||||
}
|
||||
|
||||
func getWhitelistedCharacters() []string {
|
||||
return []string{
|
||||
".", "-",
|
||||
"0", "1", "2", "3", "4", "5", "6", "7", "8", "9",
|
||||
"A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M",
|
||||
"N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z",
|
||||
"a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m",
|
||||
"n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z",
|
||||
}
|
||||
}
|
||||
|
||||
func getYearFromWarezString(s string) (int64, error) {
|
||||
chuncks := strings.Split(s, ".")
|
||||
|
||||
for i := len(chuncks) - 1; i >= 0; i-- {
|
||||
porentialYear := utils.ConvertStringToIntOrZeroOnError(chuncks[i])
|
||||
if isValidYear(porentialYear) {
|
||||
return porentialYear, nil
|
||||
}
|
||||
}
|
||||
|
||||
return 0, errors.New("could not find any valid year in s")
|
||||
}
|
||||
|
||||
func isValidYear(i int64) bool {
|
||||
if i < 1900 || i > (utils.GetCurrentYear()+3) {
|
||||
return false
|
||||
}
|
||||
|
||||
return true
|
||||
}
|
Reference in New Issue
Block a user