*исправления по считыванию данных без BOM

*добавлены работающие тесты
This commit is contained in:
K1ndWha1e committed 2026-09-29 23:26:34 +03:00
1 parent d03f6214aa
commit aa04fd4df0
11 files changed
+191 -55

No files matched your search

+25 -20
View File
@@ -48,7 +48,7 @@ pub fn (id3v1 ID3v1) to_v23() ID3v23 {
tyer: metadata.Frame{
data: id3v1.year
}
comment: metadata.Frame{
txxx: metadata.Frame{
data: id3v1.comment
}
}
@@ -59,23 +59,24 @@ pub fn (id3v1 ID3v1) to_v23() ID3v23 {
fn cut_or_trim(data string, capacity i8) []u8 {
mut final_data := []u8{len: capacity, init: 0}
bytes_data := iconv.vstring_to_encoding(data, "CP1251") or { []u8{len: capacity} }
if data.len > 0 {
bytes_data := iconv.vstring_to_encoding(data, "CP1251") or { []u8{len: capacity} }
diff := capacity - bytes_data.len
if diff > 0 {
for i, d in bytes_data {
final_data[i] = d
diff := capacity - bytes_data.len
if diff > 0 {
for i, d in bytes_data {
final_data[i] = d
}
} else {
final_data = bytes_data.clone()[..capacity]
}
} else {
final_data = bytes_data.clone()[..capacity]
}
return final_data
}
// Перевести тэг в байты
pub fn (id3v1 ID3v1) to_bytes() []u8 {
pub fn (mut id3v1 ID3v1) to_bytes() []u8 {
mut bytes := []u8{cap: 128}
bytes << "TAG".bytes()
@@ -88,23 +89,27 @@ pub fn (id3v1 ID3v1) to_bytes() []u8 {
// bytes << cut_or_trim(id3v1.track, i8(2))
bytes << if id3v1.track.len != 0 { [u8(0), id3v1.track.u8()]} else { [u8(1), u8(0)] }
id_genre := Genre.from(id3v1.genre) or { Genre.unknown }
id_genre := Genre.from(id3v1.genre.to_lower()) or { Genre.unknown }
bytes << u8(id_genre) // cut_or_trim([u8(id_genre)], i8(2))
id3v1.embedded = true
return bytes
}
// Добавление изменённого тэга
pub fn (id3v1 ID3v1) insert(mut audio File, position i8) []u8 {
bytes_tag := id3v1.to_bytes()
// Уcтановка указателя на последний байт
audio.seek(0, os.SeekMode.end) or { panic(err) }
// Положение указателя
size := audio.tell() or { panic(err) }
// Чтение всех байта, кроме последних 128
mut all_bytes := audio.read_bytes(int(size))#[..position]
pub fn (mut id3v1 ID3v1) insert(mut audio File, position i8) []u8 {
// if !id3v1.embedded {
bytes_tag := id3v1.to_bytes()
// Уcтановка указателя на последний байт
audio.seek(0, os.SeekMode.end) or { panic(err) }
// Положение указателя
size := audio.tell() or { panic(err) }
// Чтение всех байта, кроме последних 128
mut all_bytes := audio.read_bytes(int(size))#[..position]
all_bytes << bytes_tag
all_bytes << bytes_tag
// }
return all_bytes
}