2022-02-19 16:03:05 +00:00
# Changelog
All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog ](https://keepachangelog.com/en/1.0.0/ ),
and this project adheres to [Semantic Versioning ](https://semver.org/spec/v2.0.0.html ).
2022-02-20 23:00:00 +00:00
## [Unreleased]
2022-04-09 06:02:49 +00:00
2023-01-05 04:43:22 +00:00
### Added
2023-01-05 06:04:57 +00:00
- **MP4**:
- The `InitialKey` , `ReplayGain*` , and "precise BPM" identifiers now have `ItemKey` mappings ([PR](https://github.com/Serial-ATA/lofty-rs/pull/93))
- `AtomIdent` now implements `TryFrom<ItemKey>` ([PR](https://github.com/Serial-ATA/lofty-rs/pull/96))
2023-01-11 10:40:36 +00:00
- Added support for the vendor-supplied XID in files from the Apple iTunes store as `ItemKey::AppleXid` . ([PR](https://github.com/Serial-ATA/lofty-rs/pull/98))
2023-01-07 23:28:09 +00:00
- Added support for `ItemKey::FlagCompilation` ([PR](https://github.com/Serial-ATA/lofty-rs/pull/103))
2023-01-05 06:04:57 +00:00
- **Vorbis Comments**:
- Additional mappings for the `Label` , `Remixer` , and `EncodedBy` `ItemKey` variants ([PR](https://github.com/Serial-ATA/lofty-rs/pull/94))
- **ID3v2**: A new `id3v2_compression_support` feature to optionally depend on `flate2` for decompressing frames
2023-01-05 19:41:23 +00:00
- **ItemKey**:
2023-01-11 10:40:36 +00:00
- New Variants: `AppleXid` , `Director` , `Color`
2023-01-07 23:28:09 +00:00
- **AudioFile**: `AudioFile::save_to{_path}` ([PR](https://github.com/Serial-ATA/lofty-rs/pull/104))
2023-01-07 05:21:42 +00:00
- **Files**: `<File>::set_{tag}`
2023-01-08 22:13:43 +00:00
- **FLAC**: `FlacProperties`
- Previously, FLAC files used `FileProperties` . `FlacProperties` was added to support getting the MD5 signature
of the audio data.
2023-01-09 02:20:54 +00:00
- **OGG**: `OggPictureStorage`
- This was added to cover the overlap in functionality between `VorbisComments` and `FlacFile` in that they both
store `(Picture, PictureInformation)` .
2023-01-12 02:07:52 +00:00
- **TagExt**: `TagExt::len`
2023-01-05 06:04:57 +00:00
### Changed
- **MP4**: `AtomIdent` stores freeform identifiers as `Cow<str>` opposed to `String` ([PR](https://github.com/Serial-ATA/lofty-rs/pull/95))
- This allows freeform identifiers to be constructed in a const context.
2023-01-07 23:28:09 +00:00
- **ID3v2**: `FrameID` now uses `Cow<str>` opposed to `String` ([PR](https://github.com/Serial-ATA/lofty-rs/pull/102))
2023-01-09 02:20:54 +00:00
- **FLAC**: `FlacFile` now stores pictures separately from its `VorbisComments` tag
2023-01-05 06:04:57 +00:00
### Removed
- **Metadata format features** ([PR](https://github.com/Serial-ATA/lofty-rs/pull/97)):
- All of the format-specific features have been removed, as they served no purpose. They used to bring in
optional dependencies, but they have long since been removed.
2023-01-05 04:43:22 +00:00
2023-01-08 20:52:42 +00:00
### Fixed
- **Tag**: Handling of the `Year` tag has been improved.
- Previously, setting a year with `Tag::set_year` required a `RecordingDate` . Now it will check if the format
supports the `Year` tag, and if not, then it will set a `RecordingDate` .
2022-12-27 20:56:05 +00:00
## [0.10.0] - 2022-12-27
2022-11-05 13:57:39 +00:00
### Added
- **TagExt**: `TagExt::contains`
2022-11-09 19:10:03 +00:00
- **Ilst**: `AtomData::Bool` for the various flag atoms such as `cpil` , `pcst` , etc.
2022-12-27 20:41:01 +00:00
- **ogg_pager**: Support for reading packets with the new `Packets` struct. ([PR](https://github.com/Serial-ATA/lofty-rs/pull/76))
- **ogg_pager**: `PageHeader` struct. ([PR](https://github.com/Serial-ATA/lofty-rs/pull/76))
- **BoundTaggedFile**: A `TaggedFile` variant bound to a `File` handle. ([issue](https://github.com/Serial-ATA/lofty-rs/issues/73)) ([PR](https://github.com/Serial-ATA/lofty-rs/pull/80))
2022-11-05 13:57:39 +00:00
2022-11-09 18:09:42 +00:00
### Changed
2022-12-27 20:41:01 +00:00
- **Files**: Return the removed tag from `<File>::remove(TagType)` ([PR](https://github.com/Serial-ATA/lofty-rs/pull/74))
2022-11-09 18:47:21 +00:00
- Previously, the only way to remove and take ownership of a tag was through `TaggedFile::take` .
2022-11-09 18:09:42 +00:00
This was not possible when using a concrete type, such as `OpusFile` .
2022-12-27 20:41:01 +00:00
- **TaggedFile**: Renamed `TaggedFile::take` to `TaggedFile::remove` ([PR](https://github.com/Serial-ATA/lofty-rs/pull/74))
2022-11-24 18:58:04 +00:00
- **OGG**: The reading of OGG files has switched to using packets opposed to pages, making it more
spec-compliant and efficient.
2022-11-24 19:16:07 +00:00
- **ogg_pager**: Most fields in `Page` have been separated out into the new `PageHeader` struct.
2022-12-27 20:41:01 +00:00
- **ogg_pager**: `paginate` now works with a collection of packets. ([PR](https://github.com/Serial-ATA/lofty-rs/pull/79))
2022-12-10 16:10:23 +00:00
- **lofty_attr**: The `lofty_attr::LoftyFile` derive proc macro is now exported as `lofty::LoftyFile` .
2022-12-27 20:41:01 +00:00
- **TaggedFile**: All methods have been split out into a new trait, `TaggedFileExt` . ([PR](https://github.com/Serial-ATA/lofty-rs/pull/80))
- **Accessor**: All methods returning string values now return `Cow<str>` . ([PR](https://github.com/Serial-ATA/lofty-rs/pull/83))
2022-12-12 18:45:30 +00:00
- This is an unfortunate change that needed to be made in order to accommodate the handling of the different
possible text separators between ID3v2 versions.
2022-12-27 20:56:05 +00:00
- **ID3v2**: Support reading of duplicate tags ([issue](https://github.com/Serial-ATA/lofty-rs/issues/87)) ([PR](https://github.com/Serial-ATA/lofty-rs/pull/88))
2022-12-27 18:38:32 +00:00
- Previously, if we were reading a file and encountered an ID3v2 tag after having already read one,
we would overwrite the last one, losing all of its information. Now we preserve all of the information,
overwriting frames as necessary.
2022-11-09 18:09:42 +00:00
2022-11-26 19:13:37 +00:00
### Removed
- **ogg_pager**: Removed `Page::new` , now pages can only be created through `ogg_pager::paginate` or
2022-12-27 20:41:01 +00:00
`Packets::paginate` . ([PR](https://github.com/Serial-ATA/lofty-rs/pull/79))
2022-11-26 19:13:37 +00:00
2022-12-12 18:45:30 +00:00
### Fixed
2022-12-12 18:48:16 +00:00
- **ID3v2**: The `'/'` character is no longer used as a separator ([issue](https://github.com/Serial-ATA/lofty-rs/issues/82))
2022-12-27 20:41:01 +00:00
- **MP4**: Stopped expecting certain flags for the `gnre` atom prior to upgrading it ([issue](https://github.com/Serial-ATA/lofty-rs/issues/84)) ([PR](https://github.com/Serial-ATA/lofty-rs/pull/85))
2022-12-12 18:45:30 +00:00
2022-10-30 20:55:12 +00:00
## [0.9.0] - 2022-10-30
2022-09-09 05:13:14 +00:00
### Added
2022-10-14 13:29:05 +00:00
- `ParseOptions` ([issue](https://github.com/Serial-ATA/lofty-rs/issues/50)) ([PR](https://github.com/Serial-ATA/lofty-rs/pull/70)):
2022-09-24 06:34:22 +00:00
- ⚠️ Important ⚠️: This update introduces `ParseOptions` to allow for finer grained control over error
eagerness and other settings. Previously, when reading a file the only option available was
`read_properties` , specified with a `bool` in `read_from{_path}` . This will now default to `true` ,
and can be overridden when using `Probe` .
2022-10-14 13:29:05 +00:00
- **🎉 Support for AAC (ADTS) files** ([issue](https://github.com/Serial-ATA/lofty-rs/issues/58)) ([PR](https://github.com/Serial-ATA/lofty-rs/pull/71))
2022-09-09 05:13:14 +00:00
- **FileProperties**: `FileProperties::new`
2022-10-01 22:53:28 +00:00
- Debug logging via the [log ](https://crates.io/crates/log ) crate for exposing recoverable errors.
2022-10-13 23:49:32 +00:00
- **Error**: `ErrorKind::SizeMismatch`
2022-09-09 05:13:14 +00:00
2022-09-15 01:31:29 +00:00
### Changed
2022-10-14 11:59:42 +00:00
- **ID3v2**:
- Frame/tag flags with optional additional data are now `Option<T>` instead of `(bool, T)`
- `id3::v2::TextEncoding` is now exported as `lofty::TextEncoding`
2022-09-24 06:34:22 +00:00
- `read_from{_path}` will no longer take a `bool` for reading properties, and will do it by default. To
change this behavior, you must now use `Probe` .
2022-09-29 22:20:57 +00:00
- **FileType**: `primary_tag_type` will no longer change its return depending on the enabled features.
2022-10-01 22:53:28 +00:00
- **lofty_attr**: Simplified the `file_type` attribute:
2022-10-01 22:49:17 +00:00
- Before, you had to specify custom file types as `#[lofty(file_type = "Custom(\"MyFile\")")]` . Now
you can simply do `#[lofty(file_type = "MyFile")]` and it will infer the rest.
2022-10-14 12:08:12 +00:00
- **IFF**: `WAV` and `AIFF` items are no longer combined in the `iff` module. They are now separated
into their own modules at `iff::wav` and `iff::aiff` respectively.
2022-09-15 01:31:29 +00:00
2022-10-14 13:29:05 +00:00
### Fixed
- **ID3v2**: Populate the `Populatimeter` field in the `ID3v2` -> `Tag` conversion ([issue](https://github.com/Serial-ATA/lofty-rs/issues/63)) ([PR](https://github.com/Serial-ATA/lofty-rs/pull/64))
2022-10-01 22:53:28 +00:00
### Removed
2022-09-24 07:25:46 +00:00
- **lofty_attr**: The `#[lofty(always_present)]` attribute has been removed, and is now inferred.
2022-09-09 05:03:49 +00:00
## [0.8.1] - 2022-09-09
2022-09-04 17:42:31 +00:00
### Added
2022-09-04 17:44:48 +00:00
- **VorbisComments**: `VorbisComments::get_all` , same as `Tag::get_strings` ([issue](https://github.com/Serial-ATA/lofty-rs/issues/66))
2022-09-04 17:42:31 +00:00
2022-09-03 03:36:44 +00:00
### Fixed
- **ID3v2**: Handle tag-wide unsynchronisation flag ([amberol#235](https://gitlab.gnome.org/World/amberol/-/issues/235))
2022-09-06 21:29:47 +00:00
- **MP3**: Stop using partial frame headers ([PR](https://github.com/Serial-ATA/lofty-rs/pull/67))
2022-09-03 03:36:44 +00:00
2022-08-10 18:42:55 +00:00
## [0.8.0] - 2022-08-10
2022-07-24 20:08:46 +00:00
### Added
- **A new file resolver system**:
- New module: `lofty::resolve`
- With this, you will be able to create your own `FileType` s, while continuing
to use lofty's traditional API. Read the module docs for more info.
- **A proc macro for file creation**:
- With the new `lofty_attr` crate, file creation has been simplified significantly.
It is available for both internal and external usage.
2022-07-27 01:55:58 +00:00
- **ID3v2**: Exposed internal functions `id3::v2::util::{synch_u32, unsynch_u32}`
2022-07-30 23:47:47 +00:00
- **MP4**: `Atom::push_data`
2022-07-24 20:08:46 +00:00
2022-07-24 20:12:14 +00:00
### Changed
- **TaggedFile**: `tag{_mut}` no longer takes a reference to `TagType`
2022-07-24 20:21:18 +00:00
- **ID3v2**: `LanguageFrame` 's `lang` field has changed type - `String` -> `[u8; 3]`
2022-08-10 18:13:29 +00:00
- **MP3**:
- Renamed `lofty::mp3` -> `lofty::mpeg`
- Renamed `MP3File` -> `MPEGFile`
- Renamed `MP3Properties` -> `MPEGProperties`
2022-07-30 23:41:13 +00:00
- **MP4**: `Atom::data` will now return all values
2022-08-04 09:20:27 +00:00
- **Vorbis Comments**: Recognize lowercase `METADATA_BLOCK_PICTURE` as a picture ([issue](https://github.com/Serial-ATA/lofty-rs/issues/60))
### Fixed
- **ID3v2**: `ItemKey::InitialKey` now maps to `TKEY` ([PR](https://github.com/Serial-ATA/lofty-rs/pull/61))
2022-07-24 20:12:14 +00:00
2022-07-22 15:41:15 +00:00
## [0.7.3] - 2022-07-22
2022-07-18 20:04:21 +00:00
### Added
- **FileType**: `FileType::from_ext` detects MP1/MP2 as `FileType::MP3` , allowing these files to be read with
`read_from_path` /`Probe::open`.
2022-07-21 19:33:57 +00:00
- **ItemKey**: `ItemKey::{REPLAYGAIN_ALBUM_GAIN, REPLAYGAIN_ALBUM_PEAK, REPLAYGAIN_TRACK_GAIN, REPLAYGAIN_TRACK_PEAK}`
### Changed
2022-07-21 20:15:43 +00:00
- **ID3v2**:
- `TXXX` /`WXXX` frames will be stored by their descriptions in `ID3v2Tag` -> `Tag` conversions
- Stopped allowing empty strings in `Accessor::set_*`
2022-07-18 20:04:21 +00:00
2022-07-17 17:58:27 +00:00
### Fixed
- **Tag**: The `Accessor::set_*` methods will stop falling through, and adding empty strings
2022-07-13 05:46:40 +00:00
## [0.7.2] - 2022-07-13
This release mostly addresses issues uncovered by fuzzing, thanks to [@5225225 ](https://github.com/5225225 )!
2022-07-10 22:15:38 +00:00
### Changed
2022-07-11 19:11:33 +00:00
- **Tag**: The `Accessor::set_*` methods will now remove the item when given an empty string
2022-07-10 22:15:38 +00:00
2022-07-11 20:52:52 +00:00
### Fixed
2022-07-13 05:46:40 +00:00
- **AIFF/WAV**: Stop relying on the file-provided size when reading (Fixes OOM)
2022-07-12 18:19:02 +00:00
- **MP3/APE**: Stop trusting the lengths of APE tag items (Fixes OOM)
2022-07-13 05:46:40 +00:00
- **PictureInformation**: Fix potential integer overflow in `{from_jpeg, from_png}`
2022-07-12 03:01:17 +00:00
- **MP4**: The parser has received a major facelift, and shouldn't be so eager to allocate or trust user data (Fixes OOM)
2022-07-13 01:01:12 +00:00
- **FLAC**: Return early when encountering invalid zero-sized blocks
2022-07-13 01:17:18 +00:00
- **FLAC/Opus/Vorbis/Speex**: Add better length validity checks while reading Vorbis Comments (Fixes OOM)
2022-07-11 20:52:52 +00:00
2022-07-09 01:19:17 +00:00
## [0.7.1] - 2022-07-08
2022-07-04 19:37:25 +00:00
### Added
- **Vorbis Comments**: `VorbisComments::{pictures, set_picture, remove_picture}`
- **Tag**: `Tag::{set_picture, remove_picture}`
2022-07-05 17:14:09 +00:00
- **MP4**: Support property reading for files with FLAC audio
2022-07-04 19:37:25 +00:00
2022-06-30 03:03:31 +00:00
### Changed
- **ID3v2**: `ID3v2Tag` now derives `Eq`
2022-06-28 02:08:55 +00:00
## [0.7.0] - 2022-06-27
2022-06-03 01:32:11 +00:00
### Added
- **WavPack** support
2022-06-20 15:16:27 +00:00
- **Accessor**:
- The following new accessor methods have been added:
- `track`
- `track_total`
- `disk`
- `disk_total`
- `year`
- `comment`
2022-06-03 01:32:11 +00:00
### Changed
- Bitrates in properties will be rounded up, similar to FFmpeg and TagLib
2022-06-26 15:46:47 +00:00
- **ID3v1**: Renamed `Id3v1Tag` -> `ID3v1Tag`
2022-06-26 15:36:21 +00:00
- **ID3v2**:
2022-06-20 04:01:19 +00:00
- Insert multi-value frames separately when converting to `Tag`
- E.g. An artist of "foo/bar/baz" will become 3 different `TagItem` s with `ItemKey::TrackArtist`
- Join multiple artists with "/" during `Tag` -> `Id3v2Tag` conversion
- Inverse of the previous entry
2022-06-26 15:36:21 +00:00
- Properly capitalized the following:
- `Id3v2Error` -> `ID3v2Error`
- `Id3v2ErrorKind` -> `ID3v2ErrorKind`
- `ErrorKind::Id3v2` -> `ErrorKind::ID3v2`
2022-06-26 15:38:17 +00:00
- `Id3v2TagFlags` -> `ID3v2TagFlags`
2022-06-26 15:39:12 +00:00
- `Id3v2Version` -> `ID3v2Version`
2022-06-26 15:44:27 +00:00
- `Id3v2Tag` -> `ID3v2Tag`
2022-06-08 00:00:05 +00:00
- Properly capitalized the variants of `TagType`
- `Ape` -> `APE`
- `Id3v1` -> `ID3v1`
- `Id3v2` -> `ID3v2`
- `Mp4Ilst` -> `MP4ilst`
- `RiffInfo` -> `RIFFInfo`
- `AiffText` -> `AIFFText`
2022-06-10 12:26:29 +00:00
- All types implementing `PartialEq` now implement `Eq`
2022-06-26 15:49:46 +00:00
- **MP4**: `Ilst::track_number` has been moved to the `Accessor::track` implementation
- **Tag**: Renamed `Tag::get_texts` to `Tag::get_strings`
- **AIFF**: Renamed `AiffTextChunks` -> `AIFFTextChunks`
2022-06-26 15:51:52 +00:00
- **WAV**: Renamed `RiffInfoList` -> `RIFFInfoList`
2022-06-03 01:32:11 +00:00
2022-06-21 19:31:41 +00:00
### Fixed
- **AIFF**: Fixed division by zero panic during property reading ([issue](https://github.com/Serial-ATA/lofty-rs/issues/56))
2022-06-26 01:21:47 +00:00
- **ID3v2**: Support decoding UTF-16 T/WXXX frames with missing content BOM ([issue](https://github.com/Serial-ATA/lofty-rs/issues/53))
2022-06-21 19:31:41 +00:00
2022-05-18 15:01:51 +00:00
## [0.6.3] - 2022-05-18
2022-05-13 21:06:55 +00:00
### Added
- **MP4**:
- Support atoms with multiple values ([issue](https://github.com/Serial-ATA/lofty-rs/issues/48))
- `Atom::from_collection`
2022-05-05 21:59:23 +00:00
### Changed
- **ID3v2**: Discard empty frames, rather than error
2022-05-08 15:21:20 +00:00
- **APE**: Allow empty tag items
- Rather than error on empty items, they will just be discarded
2022-05-05 21:59:23 +00:00
2022-04-28 21:08:38 +00:00
### Fixed
- **Pictures**: Treat "image/jpg" as `MimeType::Jpeg` ([PR](https://github.com/Serial-ATA/lofty-rs/pull/41))
2022-05-08 23:19:28 +00:00
- **MP3**:
- Properly validate the contents of Xing/LAME/VBRI headers ([issue](https://github.com/Serial-ATA/lofty-rs/issues/42))
- A header with any field zeroed out would result in a division by zero panic
- Fix duration estimation for files with Xing headers without the necessary flags
2022-05-05 01:11:14 +00:00
- **FLAC**: Fix property reading of zero-length files ([issue](https://github.com/Serial-ATA/lofty-rs/issues/46))
- **Vorbis Comments**: Fix reading of vendor strings with invalid mixed UTF-8 and UTF-16 encodings
2022-05-07 14:57:06 +00:00
- **ID3v2**:
- Fix reading of zero-size tags
- Attempt to read invalid v2 frame IDs in v3 tags
- For some reason, some apps write v2 frame IDs in otherwise valid v3 frames
- Attempt to decode invalid `COMM` languages
- **MP4**:
- Fix hang when reading invalid padding ([issue](https://github.com/Serial-ATA/lofty-rs/issues/44))
- If invalid padding was encountered at the end of the file, the reader would get stuck in an infinite loop
attempting to read zero size atoms
- Fallback to bitrate calculation from `mdat` when necessary ([issue](https://github.com/Serial-ATA/lofty-rs/issues/43))
- When reading a file that doesn't provide a valid bitrate or duration, a division by zero panic would occur.
Now, it attempts to calculate the bitrate from the `mdat` atom.
2022-04-28 21:08:38 +00:00
2022-04-24 20:59:53 +00:00
## [0.6.2] - 2022-04-24
### Fixed
2022-05-03 20:43:19 +00:00
- **MP3**: Fix panic when reading files with no MPEG frames ([issue](https://github.com/Serial-ATA/lofty-rs/issues/39))
2022-04-24 20:59:53 +00:00
- Attempting to read an MP3 file with `read_properties = true` would result in a panic if the file contained no
MPEG frames
2022-04-09 06:02:49 +00:00
## [0.6.1] - 2022-04-09
2022-04-09 05:58:25 +00:00
### Fixed
- **MP3**: Fix reading of ID3v2 tags with an extended header
- Restrictions were unnecessarily put on the reader, keeping it from continuing to read into the extended header
if it was present
- **ID3v2**: Fix reading of tags with an extended header
- The size of the extended header was not being subtracted from the total tag size, causing the reading to continue
outside the tag boundaries
2022-02-20 23:00:00 +00:00
2022-04-05 22:54:08 +00:00
## [0.6.0] - 2022-04-05
2022-03-08 01:46:19 +00:00
### Added
- `TagItem::{into_key, into_value, consume}`
2022-03-12 17:58:48 +00:00
- **MP4**: `Mp4Codec::MP3`
- **MP4**: `mp4::AudioObjectType`
- This new type is used in `mp4::Mp4Properties` , accessible with `Mp4Properties::audio_object_type` .
This provides additional information for the type of audio being dealt with.
2022-03-18 19:22:40 +00:00
- `TagExt::clear`
- This allows tags to be cleared of any items or pictures, while retaining any flags (if applicable)
2022-03-20 04:00:23 +00:00
- **ID3v2**: Respect `Id3v2TagFlags::crc` when writing
- Previously, this flag was ignored, but it will now calculate a CRC for the extended header
2022-03-20 16:05:38 +00:00
- **ID3v2**: `FrameValue::Popularimeter`
2022-03-31 20:13:35 +00:00
- `ItemValue::{into_string, into_binary}`
2022-03-31 20:20:49 +00:00
- `Tag::take_strings`
2022-04-03 21:18:11 +00:00
- `TaggedFile` now implements `AudioFile`
2022-03-09 04:08:04 +00:00
### Changed
2022-03-26 00:27:50 +00:00
- **MP4**: Sample rates and channels are now retrieved from the [audio specific config ](https://wiki.multimedia.cx/index.php?title=MPEG-4_Audio#Audio_Specific_Config ) (if possible).
2022-03-09 04:08:04 +00:00
If the information is invalid or unavailable, the existing value from the `mp4a` box will be used instead.
2022-03-12 16:35:03 +00:00
- **Vorbis Comments**: Support non-PNG/JPEG images in `PictureInformation::from_picture`
- The method still only supports PNG and JPEG, but rather than error when it encounters an unknown image, it will return
`PictureInformation::default`
2022-03-18 18:47:00 +00:00
- `lofty::read_from` will now wrap the `File` in a `BufReader`
2022-03-18 19:06:42 +00:00
- **FLAC**: FLAC now has its own module at `lofty::flac`
2022-03-20 16:05:38 +00:00
- **ID3v2**: `FrameValue` is now `#[non_exhaustive]`
2022-03-27 18:12:32 +00:00
- `TagType::remove_from` now works for ID3v2 tags in APE and FLAC files
- This previously verified that the `FileType` supported the tag. It now has special exceptions for these formats to
allow stripping out these unsupported tags
2022-03-28 23:18:35 +00:00
- **MP4**: Renamed `AdvisoryRating::None` to `AdvisoryRating::Inoffensive`
2022-04-03 21:22:18 +00:00
- Renamed `TaggedFile::remove_tag` to `TaggedFile::take`
2022-04-05 00:32:11 +00:00
- **Vorbis Comments**: `VorbisComments::insert_picture` now accepts a user provided `PictureInformation`
2022-04-05 00:46:22 +00:00
- **Vorbis Comments**: Rename `VorbisComments::{get_item, insert_item, remove_key}` to `VorbisComments::{get, insert, remove}`
- **Vorbis Comments**: `VorbisComments::remove` now returns an iterator over the removed items
2022-03-08 01:46:19 +00:00
2022-03-06 18:17:16 +00:00
### Fixed
- **MP4**: Non-full `meta` atoms are now properly handled.
- It is possible for these to be a regular atom (no version or flags).
This information was assumed to be present and would get skipped,
which would affect the reading of subsequent atoms.
2023-01-05 09:46:05 +00:00
2022-03-06 18:17:16 +00:00
This behavior has been noticed by:
- https://leo-van-stee.github.io/
- https://github.com/axiomatic-systems/Bento4/blob/v1.6.0-639/Source/C%2B%2B/Core/Ap4ContainerAtom.cpp#L60
- https://github.com/taglib/taglib/issues/1041
2022-03-09 04:08:04 +00:00
- **MP4**: Properly search for `soun` atom
- The search wasn't adding read bytes correctly, but tests passed due to the atom being immediately available.
It would attempt to read until it reached an EOF if it managed to make it through multiple iterations.
2022-03-16 20:59:55 +00:00
- **FLAC**: Support files with an ID3v2 tag
- This will be read only just like APE, but will allow such files to be read
2022-03-21 20:53:32 +00:00
- **ID3v2**: Fix writing certain proprietary Apple frames
2022-03-20 14:43:19 +00:00
- When writing, frame IDs are verified with their content. The Apple specific frames "MVNM" and "MVIN" were missing,
causing an error if they were written with their proper type (`FrameValue::Text`)
2022-04-01 20:54:49 +00:00
- **ID3v2**: Stop writing a BOM for `TextEncoding::UTF16BE`
2022-03-06 18:17:16 +00:00
2022-03-03 22:50:29 +00:00
## [0.5.3] - 2022-03-03
2022-03-06 18:17:16 +00:00
### Fixed
2022-03-05 17:07:54 +00:00
- **OGG**: Segment tables are written correctly with data spanning multiple pages ([issue](https://github.com/Serial-ATA/lofty-rs/issues/37))
2022-03-03 22:50:29 +00:00
2022-02-26 15:24:42 +00:00
## [0.5.2] - 2022-02-26
2022-02-26 01:38:58 +00:00
### Added
- **MP4**: `Ilst::{atoms, retain}`
2022-02-23 22:13:48 +00:00
### Fixed
- **ID3v2**: The footer flag is written to the tag
2022-02-24 21:07:26 +00:00
- **ID3v2**: Pictures are written when using `Tag`
2022-02-23 22:13:48 +00:00
2022-02-21 18:55:58 +00:00
## [0.5.1] - 2022-02-21
2022-02-20 23:00:00 +00:00
### Changed
- **MP4**: Padding atoms (`free`) are used when writing
2022-02-21 18:10:42 +00:00
- **Opus**: Channel count is verified in accordance to the channel mapping family
2022-02-20 23:00:00 +00:00
### Fixed
- **MP4**: `meta` atoms are written correctly
2022-02-20 14:19:41 +00:00
## [0.5.0] - 2022-02-20
2022-02-19 16:03:05 +00:00
### Added
- Support for Speex files
- `TagExt` trait to unify tag behavior
- `doc_cfg` feature for docs.rs
- Fallible allocation with `ErrorKind::Alloc` to help prevent OOM
- New dependency: `cfg-if`
- **MP3**: Emphasis struct (`mp3::Emphasis`) for use in `Mp3Properties`
- **ID3v2**: Respect the footer flag (`id3::v2::Id3v2TagFlags::footer`) when writing
- **MP4**: Constants for all well-known data types (`mp4::constants`)
- **MP4**: Support `rtng` (Parental advisory) atom, with corresponding `mp4::AdvisoryRating` enum
### Changed
2022-02-20 14:12:40 +00:00
- Added `#[non_exhaustive]` to `MimeType`
- Added `#[non_exhaustive]` to `PictureType`
- Added `#[non_exhaustive]` to `Mp4Codec`
2022-02-19 16:03:05 +00:00
- **APE**: Clarify why ID3v2 is read only
- **MP3**: No longer error on missing Xing/VBRI header when reading properties
- **MP3**: Read the entire MPEG frame header, which is exposed in `Mp3Properties`
- `AudioFile` now requires `Into<TaggedFile>`
- **MP4**: Empty atoms are discarded
- **MP4**: Variable-size integers are shrunk when writing
### Fixed
- **MP4**: Panic in `Mp4File::read_from` ([commit](https://github.com/Serial-ATA/lofty-rs/commit/9e18616a6882c659ba2d5ca6bdad9bf41171135d))
- **WAV/AIFF**: Chunk reading now makes use of fallible allocation, preventing OOM
- **ID3v2**: Text is properly encoded when writing
2022-02-20 01:08:34 +00:00
- **ID3v2**: `MVNM` and `MVIN` frames are now treated as text frames
2022-02-20 13:59:52 +00:00
- **ID3v2**: Text encodings are verified for V2 tags
2022-02-19 16:03:05 +00:00
- **MP4**: `plID` atom is properly treated as a 64-bit signed integer ([issue](https://github.com/Serial-ATA/lofty-rs/issues/34))
- **MP4**: `rate` and `rtng` now map to the correct `ItemKey`
2022-02-20 00:48:19 +00:00
- **MP4**: Integer pairs are now written correctly
2022-02-19 16:03:05 +00:00
- `TagType` and `FileType` are no longer taken by reference in any method
### Removed
- `ErrorKind::BadExtension`
2022-02-21 18:10:42 +00:00
2022-12-27 20:56:05 +00:00
[Unreleased]: https://github.com/Serial-ATA/lofty-rs/compare/0.10.0...HEAD
[0.10.0]: https://github.com/Serial-ATA/lofty-rs/compare/0.9.0...0.10.0
2022-10-30 20:55:12 +00:00
[0.9.0]: https://github.com/Serial-ATA/lofty-rs/compare/0.8.1...0.9.0
2022-09-09 05:16:11 +00:00
[0.8.1]: https://github.com/Serial-ATA/lofty-rs/compare/0.8.0...0.8.1
2022-08-10 18:42:55 +00:00
[0.8.0]: https://github.com/Serial-ATA/lofty-rs/compare/0.7.3...0.8.0
2022-07-22 15:41:15 +00:00
[0.7.3]: https://github.com/Serial-ATA/lofty-rs/compare/0.7.2...0.7.3
2022-07-13 05:46:40 +00:00
[0.7.2]: https://github.com/Serial-ATA/lofty-rs/compare/0.7.1...0.7.2
2022-07-13 01:39:51 +00:00
[0.7.1]: https://github.com/Serial-ATA/lofty-rs/compare/0.7.0...0.7.1
[0.7.0]: https://github.com/Serial-ATA/lofty-rs/compare/0.6.3...0.7.0
[0.6.3]: https://github.com/Serial-ATA/lofty-rs/compare/0.6.2...0.6.3
[0.6.2]: https://github.com/Serial-ATA/lofty-rs/compare/0.6.1...0.6.2
[0.6.1]: https://github.com/Serial-ATA/lofty-rs/compare/0.6.0...0.6.1
[0.6.0]: https://github.com/Serial-ATA/lofty-rs/compare/0.5.3...0.6.0
[0.5.3]: https://github.com/Serial-ATA/lofty-rs/compare/0.5.2...0.5.3
[0.5.2]: https://github.com/Serial-ATA/lofty-rs/compare/0.5.1...0.5.2
[0.5.1]: https://github.com/Serial-ATA/lofty-rs/compare/0.5.0...0.5.1
[0.5.0]: https://github.com/Serial-ATA/lofty-rs/compare/64f0eff...0.5.0