Чтение тэгов без обложки: с диска только нужные текстовые фреймы, у APIC — лишь признак
read_book_tags читал тэг целиком вместе с картинкой (у книг с обложкой 3 МБ — 3 МБ на файл при каждом открытии книги). Теперь фреймы читаются по одному, обложка и ненужные фреймы пропускаются; тэг с unsynchronisation (v2.3) — целиком, как раньше. Тест: на тэге с обложкой 3 МБ выделяется меньше 1 МБ, теги и has_cover те же. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
dc13ae43b8
commit
4c9184aeb2
2 files changed
+113
-6
No files matched your search
@@ -82,6 +82,39 @@ fn test_roundtrip_v24() {
|
||||
check_roundtrip('test_id3v24.mp3')
|
||||
}
|
||||
|
||||
// Чтение тэгов не загружает обложку: у тэга с картинкой 3 МБ — только текстовые фреймы
|
||||
fn test_read_skips_cover() {
|
||||
for name in ['test_id3v23.mp3', 'test_id3v24.mp3'] {
|
||||
path := tmp_copy(name)
|
||||
defer {
|
||||
os.rm(path) or {}
|
||||
}
|
||||
mut data := []u8{len: 3 * 1024 * 1024, init: u8(index % 251)}
|
||||
data[0] = 0xFF
|
||||
data[1] = 0xD8
|
||||
tags := metadata.BookTags{
|
||||
title: 'Глава 1'
|
||||
album: 'Тень ветра'
|
||||
author: 'Сафон'
|
||||
series: 'Кладбище забытых книг'
|
||||
}
|
||||
metadata.write_book_tags(path, tags, cover: metadata.Cover{
|
||||
mime: 'image/jpeg'
|
||||
data: data
|
||||
}) or { panic(err) }
|
||||
before := u64(gc_heap_usage().total_bytes)
|
||||
t := metadata.read_book_tags(path) or { panic(err) }
|
||||
allocated := u64(gc_heap_usage().total_bytes) - before
|
||||
assert t.has_cover
|
||||
assert t.tags.title == 'Глава 1'
|
||||
assert t.tags.album == 'Тень ветра'
|
||||
assert t.tags.series == 'Кладбище забытых книг'
|
||||
assert allocated < 1024 * 1024, '${name}: при чтении выделено ${allocated} Б'
|
||||
// Обложку по-прежнему отдаёт read_cover
|
||||
assert (metadata.read_cover(path) or { panic(err) }).data.len == data.len
|
||||
}
|
||||
}
|
||||
|
||||
// В файл без ID3v2 тэг добавляется в начало
|
||||
fn test_write_without_id3v2() {
|
||||
path := tmp_copy('test_id3v1.mp3')
|
||||
|
||||
Reference in new issue
Block a user