mirror of
https://github.com/Serial-ATA/lofty-rs
synced 2024-12-13 14:12:31 +00:00
Preserve vendor string on VorbisFile/OpusFile -> TaggedFile conversion
This commit is contained in:
parent
575d7af692
commit
fa97d27eb1
3 changed files with 30 additions and 9 deletions
|
@ -48,12 +48,11 @@ pub(crate) fn parse_id3v2(bytes: &mut &[u8]) -> Result<Tag> {
|
|||
&& flags & 0x20 == 0x20,
|
||||
footer: (version == Id3v2Version::V4 || version == Id3v2Version::V3)
|
||||
&& flags & 0x10 == 0x10,
|
||||
crc: false, // Retrieved later if applicable
|
||||
crc: false, // Retrieved later if applicable
|
||||
#[cfg(feature = "id3v2_restrictions")]
|
||||
restrictions: (false, TagRestrictions::default()), // Retrieved later if applicable
|
||||
};
|
||||
|
||||
#[cfg(feature = "id3v2_restrictions")]
|
||||
if flags_parsed.extended_header {
|
||||
let extended_size = decode_u32(bytes.read_u32::<BigEndian>()?);
|
||||
|
||||
|
@ -78,6 +77,7 @@ pub(crate) fn parse_id3v2(bytes: &mut &[u8]) -> Result<Tag> {
|
|||
bytes.read_exact(&mut crc)?;
|
||||
}
|
||||
|
||||
#[cfg(feature = "id3v2_restrictions")]
|
||||
if extended_flags & 0x10 == 0x10 {
|
||||
flags_parsed.restrictions.0 = true;
|
||||
flags_parsed.restrictions.1 = parse_restrictions(bytes)?;
|
||||
|
|
|
@ -1,7 +1,5 @@
|
|||
use crate::types::file::AudioFile;
|
||||
use crate::{
|
||||
FileProperties, ItemKey, ItemValue, LoftyError, Result, Tag, TagItem, TagType
|
||||
};
|
||||
use crate::{FileProperties, ItemKey, ItemValue, LoftyError, Result, Tag, TagItem, TagType};
|
||||
|
||||
use std::io::{Read, Seek, SeekFrom};
|
||||
use std::time::Duration;
|
||||
|
|
|
@ -1,6 +1,9 @@
|
|||
use crate::logic::id3::v2::Id3v2Version;
|
||||
use crate::{FileProperties, LoftyError, Result, Tag, TagType};
|
||||
use super::item::ItemKey;
|
||||
use super::properties::FileProperties;
|
||||
use super::tag::{ItemValue, Tag, TagItem, TagType};
|
||||
use crate::error::{LoftyError, Result};
|
||||
use crate::logic::ape::ApeFile;
|
||||
use crate::logic::id3::v2::Id3v2Version;
|
||||
use crate::logic::iff::aiff::AiffFile;
|
||||
use crate::logic::iff::wav::WavFile;
|
||||
use crate::logic::mp4::Mp4File;
|
||||
|
@ -124,20 +127,40 @@ impl From<AiffFile> for TaggedFile {
|
|||
|
||||
impl From<OpusFile> for TaggedFile {
|
||||
fn from(input: OpusFile) -> Self {
|
||||
// Preserve vendor string
|
||||
let mut tag = input.vorbis_comments;
|
||||
|
||||
if !input.vendor.is_empty() {
|
||||
tag.insert_item_unchecked(TagItem::new(
|
||||
ItemKey::EncoderSoftware,
|
||||
ItemValue::Text(input.vendor),
|
||||
))
|
||||
}
|
||||
|
||||
Self {
|
||||
ty: FileType::Opus,
|
||||
properties: input.properties,
|
||||
tags: vec![input.vorbis_comments],
|
||||
tags: vec![tag],
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl From<VorbisFile> for TaggedFile {
|
||||
fn from(input: VorbisFile) -> Self {
|
||||
// Preserve vendor string
|
||||
let mut tag = input.vorbis_comments;
|
||||
|
||||
if !input.vendor.is_empty() {
|
||||
tag.insert_item_unchecked(TagItem::new(
|
||||
ItemKey::EncoderSoftware,
|
||||
ItemValue::Text(input.vendor),
|
||||
))
|
||||
}
|
||||
|
||||
Self {
|
||||
ty: FileType::Vorbis,
|
||||
properties: input.properties,
|
||||
tags: vec![input.vorbis_comments],
|
||||
tags: vec![tag],
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue