recognize: название из метабазы санитизируется перед попаданием в план
- чистка стоит на каждой точке входа значения метабазы в план — сборка матча, копия кандидата для ревью, набор закреплённых значений источника и его чтение: гарантия, поставленная только на запись, обходится данными, сохранёнными прежними версиями - название, непригодное как имя каталога (пустое или без единой буквы и цифры), не подставляется — раздача уходит в review с названной причиной - гейт подтверждения матча не сдвинут: сравнение с планом идёт по значениям провайдера, чистится только копия, уходящая дальше
This commit is contained in:
@@ -20,6 +20,7 @@ import (
|
||||
"log/slog"
|
||||
"strconv"
|
||||
"strings"
|
||||
"unicode"
|
||||
"unicode/utf8"
|
||||
|
||||
"git.vakhrushev.me/av/jellybit/internal/llm"
|
||||
@@ -202,13 +203,18 @@ func render(f Fields) string {
|
||||
return Label(f.Title, f.Director, f.Year, f.SeasonLabel())
|
||||
}
|
||||
|
||||
// sanitize убирает управляющие символы и переводы строк, схлопывает пробелы.
|
||||
// sanitize убирает управляющие и невидимые символы, переводы строк, схлопывает
|
||||
// пробелы. Категорию Cf (zero-width, BOM, RLO) снимаем наравне с C0: значения
|
||||
// приходят из метабазы и из сохранённого контекста, то есть снаружи, а ярлык
|
||||
// уезжает в карточку Telegram, в шапку веб-UI и в имя раздачи qBittorrent —
|
||||
// RLO там переворачивает отображение. Это же обещает требование metadata-match:
|
||||
// режиссёр в плане не чистится именно потому, что его чистит рендер.
|
||||
func sanitize(s string) string {
|
||||
s = strings.Map(func(r rune) rune {
|
||||
if r == '\n' || r == '\t' || r == '\r' {
|
||||
return ' '
|
||||
}
|
||||
if r < 0x20 {
|
||||
if r < 0x20 || unicode.Is(unicode.Cf, r) {
|
||||
return -1
|
||||
}
|
||||
return r
|
||||
|
||||
Reference in New Issue
Block a user