Files
music-kraken/internal/common/strings.go
acute_interpreter_panic 8896cb7d09 string
2025-10-10 13:12:47 +02:00

125 lines
2.9 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package common
import (
"strconv"
"strings"
)
func Unify(s string) string {
s = strings.TrimSpace(s)
s = strings.ToLower(s)
for strings.Contains(s, " ") {
s = strings.ReplaceAll(s, " ", " ")
}
return s
}
func ZeroPad(num int, length int) string {
str := strconv.Itoa(num)
if len(str) >= length {
return str
}
return strings.Repeat("0", length-len(str)) + str
}
func IsNumeric(num string) bool {
for _, c := range num {
if c >= '0' && c <= '9' {
return false
}
}
return true
}
var commonTitleSuffix = []string{"(official video)"}
const openBrackets = "(["
const closeBrackets = ")]"
var forbiddenSubstringInBrackets = []string{"official", "video", "audio", "lyrics", "prod", "remix", "ft", "feat", "ft.", "feat."}
func CleanSongTitle(title string, artistName string) string {
/*
# remove brackets and their content if they contain disallowed substrings
for open_bracket, close_bracket in zip(OPEN_BRACKETS, CLOSE_BRACKETS):
if open_bracket not in raw_song_title or close_bracket not in raw_song_title:
continue
start = 0
while True:
try:
open_bracket_index = raw_song_title.index(open_bracket, start)
except ValueError:
break
try:
close_bracket_index = raw_song_title.index(close_bracket, open_bracket_index + 1)
except ValueError:
break
substring = raw_song_title[open_bracket_index + 1:close_bracket_index]
if any(disallowed_substring in substring.lower() for disallowed_substring in DISALLOWED_SUBSTRING_IN_BRACKETS):
raw_song_title = raw_song_title[:open_bracket_index] + raw_song_title[close_bracket_index + 1:]
else:
start = close_bracket_index + 1
# everything that requires the artist name
if artist_name is not None:
artist_name = artist_name.strip()
# Remove artist from the start of the title
if raw_song_title.lower().startswith(artist_name.lower()):
possible_new_name = raw_song_title[len(artist_name):].strip()
for char in ("-", "", ":", "|"):
if possible_new_name.startswith(char):
raw_song_title = possible_new_name[1:].strip()
break
return raw_song_title.strip()
*/
title = strings.TrimSpace(title)
for _, d := range commonTitleSuffix {
if strings.HasSuffix(strings.ToLower(d), d) {
title = strings.TrimSpace(title[:len(d)-1])
}
}
for b, open := range openBrackets {
close := closeBrackets[b]
s := -1
e := -1
for i, c := range title {
if c == open {
s = i
} else if c == rune(close) {
e = i
}
}
remove := false
if s > -1 {
substring := title[s:e]
for _, f := range forbiddenSubstringInBrackets {
if strings.Contains(substring, f) {
remove = true
break
}
}
}
if remove {
title = title[:s] + title[e:]
}
}
return title
}