Commit graph

847 commits

Author SHA1 Message Date
Uwe Klotz
2132d0171e SplitAndRejoin: Add a read/modify/write usage example 2023-01-20 08:34:33 -05:00
Uwe Klotz
2b562c4a4b Split and rejoin tags for read/modify/write round trips 2023-01-20 08:34:33 -05:00
Uwe Klotz
19fe23cbeb id3v2: Change const fn into const 2023-01-15 11:36:16 -05:00
Uwe Klotz
b2250df119 id3v2: Replace literals with named constants 2023-01-15 11:36:16 -05:00
Uwe Klotz
7d1aab461b id3v2: Filter text frames by empty content descriptor 2023-01-15 11:36:16 -05:00
Uwe Klotz
4ea22ff44b id3v2: Distinguish COMM frames by content descriptor
Plain comments are supposed to have an empty description aka content
descriptor. Only those must appear as ItemKey::Comment.
2023-01-15 11:36:16 -05:00
Uwe Klotz
07606159ec ogg: Add a consuming iterator over all items 2023-01-15 11:35:09 -05:00
Uwe Klotz
751f5ca06f Add conversions between borrowed/owned data 2023-01-15 11:34:46 -05:00
Uwe Klotz
cff5d8fc6b id3v2: Retain frames by predicate 2023-01-15 11:34:29 -05:00
Serial
a769297545
RIFF: Return removed item from RIFFInfoList::remove 2023-01-14 20:31:09 -05:00
Serial
0c7ea31817 RIFF: Support year Accessor methods in RIFFInfoList 2023-01-14 20:27:10 -05:00
Uwe Klotz
06b3b6dbaf mp4: More robust parsing and updated mapping of rtng atom 2023-01-14 20:05:25 -05:00
Uwe Klotz
100b7e21b1 Let Tag::items() return an iterator 2023-01-14 11:45:06 -05:00
Uwe Klotz
31894bedfc Remove IntoIterator impls for Tag due to items/pictures ambiguity 2023-01-14 11:45:06 -05:00
Uwe Klotz
76cddb7719 Add Clone bounds to impl Iterator results 2023-01-14 11:45:06 -05:00
Uwe Klotz
3df98aff12 Add more IntoIterator implementations 2023-01-14 11:45:06 -05:00
Uwe Klotz
0616da11fb Fix and complete work/movement support 2023-01-14 11:41:37 -05:00
Uwe Klotz
d08d76616e id3v2: Handle three-letter language codes consistently 2023-01-14 11:40:18 -05:00
Uwe Klotz
1f3c49e6ac id3v2: Use is_ascii_alphabetic() instead of lowercase + uppercase 2023-01-14 11:40:18 -05:00
Serial
4f31729ae8
ID3v2: Allow uppercase languages in LanguageFrame 2023-01-13 11:52:16 -05:00
Serial
af5154b7fb TagExt: Add TagExt::len 2023-01-11 21:13:50 -05:00
Uwe Klotz
90a7683322 Fix base64 deprecation warnings 2023-01-11 18:07:21 -05:00
Uwe Klotz
7ca8a72ba3 Disambiguate ID3v2 TIT1/GRP1 2023-01-11 08:46:31 -05:00
Uwe Klotz
da27ed75f5 Use new naming convention for AppleXid 2023-01-11 08:37:21 -05:00
Uwe Klotz
bdf1547afb mp4: Implement IntoIterator for Ilst
This is needed for merging tags.
2023-01-11 08:35:19 -05:00
Uwe Klotz
ad3f447bf4 mp4: Write integer bpm 2023-01-10 20:07:51 -05:00
Uwe Klotz
dca773401d Use #[must_use] pub const fn new(...) whenever possible 2023-01-10 20:06:05 -05:00
Uwe Klotz
f73783aa8a id3v2: Use "XXX" if the actual language is unknown 2023-01-09 18:19:53 -05:00
Serial
fd1f9f62a0 FLAC: Store pictures separately from the VorbisComments tag 2023-01-08 21:26:50 -05:00
Serial
53050039a5 FLAC: Add FlacProperties 2023-01-08 17:16:26 -05:00
Serial
a6b114b2e4 Tags: Improve handling of Year tag 2023-01-08 16:14:37 -05:00
Uwe Klotz
53eb2184b8 id3v2: Do not require clients to use Cow in public API 2023-01-07 12:56:50 -05:00
Uwe Klotz
738d47fd4f Reduce memory allocations for id3v2::FrameID 2023-01-07 12:56:50 -05:00
Serial
42908415b4 OGG: Stop using no_audiofile_impl for LoftyFile derives 2023-01-07 00:10:53 -05:00
Serial
4d792bb480 AudioFile: Add AudioFile::save_to{_path} 2023-01-07 00:10:53 -05:00
Uwe Klotz
0f480a26c5 mp4: Map FlagCompilation to text "0"/"1"
This is consistent with other tag types.
2023-01-06 22:05:06 -05:00
Uwe Klotz
cf5f29af2f mp4: Use constant for advisory rating ident 2023-01-06 22:05:06 -05:00
Serial
366d6eb716 ItemKey: Add ItemKey::Color 2023-01-05 14:49:09 -05:00
Uwe Klotz
b265252dbd Add Director item 2023-01-05 14:13:23 -05:00
Uwe Klotz
5858a90112 mp4: Add new item key AppleXID 2023-01-05 13:58:01 -05:00
Serial
823f931d31 Misc: Remove id3v2{_restrictions} features 2023-01-05 00:43:04 -05:00
Serial
39c338e15b Misc: Remove riff_info_list feature 2023-01-05 00:43:04 -05:00
Serial
f9b97342d0 Misc: Remove aiff_text_chunks feature 2023-01-05 00:43:04 -05:00
Serial
c62981fc81 Misc: Remove ape feature 2023-01-05 00:43:04 -05:00
Serial
75d683a7bf Misc: Remove id3v1 feature 2023-01-05 00:43:04 -05:00
Serial
2fc30f3b5a Misc: Remove mp4_ilst feature 2023-01-05 00:43:04 -05:00
Serial
4e87434cf2 Misc: Remove vorbis_comments feature 2023-01-05 00:43:04 -05:00
Serial
75bcd6fac3 Docs: Remove mention of format features 2023-01-05 00:43:04 -05:00
Serial
e2253ff754 MP4: Implement TryFrom<ItemKey> for AtomIdent 2023-01-05 00:42:44 -05:00
Serial
47278e4ead
ItemKey: Fix formatting in gen_map!s 2023-01-04 23:19:05 -05:00
Uwe Klotz
d1bc6d436b Allow to create AtomIdent constants with 'static lifetime 2023-01-04 23:14:38 -05:00
Uwe Klotz
5ef093539e vorbis: Add MIXARTIST as variant for Remixer (DJ applications) 2023-01-04 13:15:29 -05:00
Uwe Klotz
d2d95d86ab vorbis: Add Label variant as recommended by MusicBrainz 2023-01-04 13:15:29 -05:00
Uwe Klotz
1abce01cf8 vorbis: Add common EncodedBy variants
MusicBrainz recommends "ENCODEDBY"
2023-01-04 13:15:29 -05:00
Uwe Klotz
25e36637bf mp4: Add replay gain items 2023-01-04 13:15:15 -05:00
Uwe Klotz
69cad746bb mp4: Add InitialKey item 2023-01-04 13:15:15 -05:00
Uwe Klotz
6e79bd3b3a mp4: Add support for precise (non-integer) BPM values 2023-01-04 13:15:15 -05:00
Serial
16a2419351 ID3v2: Support duplicate tags
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-12-27 15:24:32 -05:00
Serial
939f3f2f0d
Clippy: Fix manual_is_ascii_check 2022-12-27 13:41:53 -05:00
Serial
ecdb7ff878 MP4: Stop validating flags for gnre atom upgrade 2022-12-16 12:24:51 -05:00
Serial
4de9239af9 Clippy: Fix single_match 2022-12-12 14:00:26 -05:00
Serial
4c5538bba0 Accessor: Make text getters return Cow<str> to allow for editing
This is an unfortunate compromise that needed to be made to make it possible to change the null separators in ID3v2.4 to slashes prior to returning the value.
2022-12-12 14:00:26 -05:00
Serial
d971615952 ID3v2: Properly handle solidus character (U+002F) in text frames
V2 and V3 allow for the separation of multiple values with the solidus (/) character, while in V4 the separator is null (0). This was not accounted for previously, and would break valid V4 strings ("Foo / Bar" would be split into "Foo " and " Bar").

closes #82
2022-12-12 14:00:26 -05:00
Serial
21a4996226
Clippy: Fix unnecessary_lazy_evaluations 2022-12-10 12:27:27 -05:00
Serial
6df1a462b9
Misc: Switch enum Default impls to derives 2022-12-10 12:25:20 -05:00
Serial
42761e6bad TaggedFile: Add temporary fix for save_to breakage due to tag order
Depending on the order of the tags in a `TaggedFile`, since we write the tags independently of each other, they could step on each other's toes and leave the file in position where it cannot be probed. This wouldn't break the file, nor cause partial writes of tags, however there is a chance not *all* of the tags stored in the `TaggedFile` would be written.
2022-12-10 12:18:34 -05:00
Serial
c5bddba0cf file: Add BoundTaggedFile
closes #73
2022-12-10 12:18:34 -05:00
Serial
7573f60a0c TaggedFile: Split methods out into TaggedFileExt trait 2022-12-10 12:18:34 -05:00
Serial
81e52ce347
lofty_attr: Expose LoftyFile derive through main crate 2022-12-10 10:54:58 -05:00
Serial
ce4e2b1715 ogg_pager: Document Packets::{paginate, write_to} 2022-12-07 01:01:12 -05:00
Serial
56e1ec6b02 OGG: Remove unused code 2022-12-07 01:01:12 -05:00
Serial
62c2b72ad3 OGG: Only read necessary number of packets for format 2022-12-07 01:01:12 -05:00
Serial
2cc96f618b OGG/Opus: Fix property reading 2022-12-07 01:01:12 -05:00
Serial
365b5c1ce3 Vorbis Comments: Fix vorbis_comments_re_read test 2022-12-07 01:01:12 -05:00
Serial
4256bb254b OGG: Make use of packets when writing 2022-12-07 01:01:12 -05:00
Serial
1a866c0c32 Clippy: Apply new nightly lints 2022-11-24 15:12:56 -05:00
Serial
8051fafbc8 OGG: Read entire packets instead of pages
This makes the handling of OGG files a lot more spec-compliant, and simpler overall.
2022-11-24 14:24:57 -05:00
Serial
a08088ddf8 FileResolver: Fix link to Probe in docs 2022-11-24 14:24:57 -05:00
Serial
742eaa680f Ilst: Add AtomData::Bool for flag atoms 2022-11-09 14:14:17 -05:00
Serial
e4c0ea5579 TaggedFile: Rename take method to remove 2022-11-09 14:12:30 -05:00
Serial
544aa7a411
TagExt: Add TagExt::contains 2022-11-05 09:54:37 -04:00
Serial
4515bf3ae2
AACProperties: Specify possible MpegVersion variants 2022-10-28 22:18:29 -04:00
Serial
ec20ea7681
ItemKey: Fix wrong Comment key in AIFF_TEXT_MAP 2022-10-20 23:29:00 -04:00
Serial
a50bfe911f
ItemKey: Use spaces for alignment in gen_map! 2022-10-20 23:26:46 -04:00
Serial
0039c86182
docs: Make a slightly better comment for *Properties::duration 2022-10-15 10:27:21 -04:00
Serial
c675a5eb05
docs: Stop putting doc comments below attributes 2022-10-15 10:23:35 -04:00
Serial
e579aff672
TaggedFile: Unignore some doc tests 2022-10-15 10:14:41 -04:00
hummuseater44
6415c7e67c
Fixed Capitalization On AtomData::UTF16 (#72) 2022-10-14 22:02:39 -04:00
Ben Atkinson
49623cb570
ID3v2: populate popularimeter tag from frame value (#64)
Co-authored-by: Serial <69764315+Serial-ATA@users.noreply.github.com>
2022-10-14 09:23:33 -04:00
Alex
02f1314005
Add support for AAC (#71) 2022-10-14 09:06:27 -04:00
Serial
78723a7dd0
lofty_attr: Make it even harder to bypass the internal write module check 2022-10-14 08:22:53 -04:00
Serial
afe78368c2
iff: Separate wav and aiff into their own modules 2022-10-14 08:08:12 -04:00
Serial
b2da52196a
ID3v2: Export TextEncoding in crate root 2022-10-14 08:01:00 -04:00
Serial
be6662ea90
VorbisComments: Make use of new supported formats list 2022-10-14 07:53:37 -04:00
Serial
fcd9cee50f
Error: Add ErrorKind::SizeMismatch 2022-10-13 19:49:32 -04:00
Serial
2ff86e6e00
ID3v2: Prevent read only tag bypass with ID3v2Tag::write_to 2022-10-13 19:37:59 -04:00
Serial
2780bf2607
docs: Split supported formats out into its own file 2022-10-11 19:51:49 -04:00
Serial
efab7ca276
lofty_attr: Add tag attribute macro to generate some docs 2022-10-11 19:47:54 -04:00
Serial
f3d9176a48
Clippy: Satisfy uninlined_format_args 2022-10-11 04:05:27 -04:00
Serial
238b40c486
MP4: Remove trak module 2022-10-11 03:51:13 -04:00
Serial
510079c94e
MP4: Cleanup return 2022-10-11 03:47:12 -04:00
Serial
0819b83f32
FLAC: Decouple write handling from OGG formats 2022-10-04 00:49:30 -04:00
Serial
3a4b4f243e
lofty_attr: Add supported_formats attribute for tags 2022-10-04 00:34:20 -04:00
Serial
82a498f670
lofty_attr: Infer FileType::Custom when using non-internal names 2022-10-01 18:49:17 -04:00
Serial
f1ab92733a
Resolve: Move panic into lookup_resolver 2022-09-30 07:09:58 -04:00
Serial
0d4b907e31
Misc: Add debug logging via log crate 2022-09-30 07:05:33 -04:00
Serial
ac420960de
FileType: Remove feature dependent returns 2022-09-29 18:20:57 -04:00
Serial
8b8f355d89
MPEG: Remove write module 2022-09-29 18:11:24 -04:00
Serial
0a628df62c
ID3v1: Cleanup tag stripping 2022-09-29 15:52:05 -04:00
Serial
3b58f16996
lofty_attr: Generate internal write modules 2022-09-24 05:25:42 -04:00
Serial
5cd1dfc99c
lofty_attr: Remove #[lofty(always_present)] 2022-09-24 03:25:46 -04:00
Alex
ba6ef4f400
Probe: Add minimal ParseOptions (#70) 2022-09-24 02:34:22 -04:00
Serial
08082436e2
ID3v2: Use Option<T> for optional extra flag data 2022-09-14 21:31:29 -04:00
Serial
899f4e4664
Misc: Add decode_err! macro to cleanup FileDecodingError creation 2022-09-11 23:03:32 -04:00
Serial
ddffb169f7
MPEG: Fix unclear comments in BITRATES constant 2022-09-09 01:20:38 -04:00
Serial
3fa73f5065
FileProperties: Add new method 2022-09-09 01:13:14 -04:00
Serial
14a8548e4c
docs: Remove formats table from lib.rs 2022-09-09 01:10:23 -04:00
Serial
80f21fa61d
docs: Fix links to resolve::register_custom_resolver 2022-09-09 00:59:36 -04:00
Leonid Parfentev
b347ee0fd5
MP3: Improve validation of frame headers (#67) 2022-09-06 17:25:58 -04:00
Serial
c9c8a5f9f3
VorbisComments: Add get_all
closes: #66
2022-09-04 13:42:31 -04:00
Serial
859d084dbf
ID3v2: Handle tag-wide unsynchronisation flag 2022-09-02 23:37:03 -04:00
Serial
80f29cafef
WAV: Restrict visibility of some functions 2022-08-22 22:37:45 -04:00
Serial
4eb31023a3
fmt: Fix imports 2022-08-22 22:29:01 -04:00
Serial
9e82df3893
ID3v2: Extract out util::text_utils
This is used in multiple other places, makes sense to just make these utils global.
2022-08-22 22:26:42 -04:00
Serial
f25ed9b6c7
ID3v2: Simply parse_popularimeter 2022-08-21 12:29:11 -04:00
Serial
1b546700d5
MPEG: Change remaining references to mp3 to mpeg 2022-08-10 14:14:21 -04:00
Jack Purvis
dbb93fbc05
Fix typo in InitialKey key (#61) 2022-08-03 17:41:15 -04:00
Serial
f3a7e4d5f1
Vorbis Comments: Don't rely on the case of METADATA_BLOCK_PICTURE
closes: #60
2022-08-03 08:33:39 -04:00
Serial
81a8a616c1
Clippy: Revert assertions_on_result_states 2022-08-02 21:58:13 -04:00
Serial
a08b47bf31
Resolve: Remove remove_custom_resolver 2022-08-02 21:48:50 -04:00
Serial
390512bda3
MP4: Add Atom::push_data 2022-07-30 19:47:47 -04:00
Serial
c4fa8f99d8
MP4: Return all values in Atom::data 2022-07-30 19:41:13 -04:00
Serial
ec4fb07042
ID3v2: Expose {synch_u32, unsynch_u32} 2022-07-26 21:55:58 -04:00
Serial
efedf0f443
Resolve: FileResolver::guess docs 2022-07-26 21:09:52 -04:00
Serial
f54481026e
lofty_attr: Use full path for TagType 2022-07-24 16:36:23 -04:00
Serial
0805e6683b
MP3: Rename MP3File to MPEGFile 2022-07-24 16:28:28 -04:00
Serial
da45191187
ID3v2: Change LanguageFrame.lang's type to [u8; 3] 2022-07-24 16:21:18 -04:00
Serial
790e175b30
TaggedFile: Stop taking references to TagType 2022-07-24 16:14:42 -04:00
Alex
f48014fda8
Implement custom file resolvers (#40) 2022-07-24 16:08:46 -04:00
Serial
85ad435898
ID3v2: Update ID3v2Tag docs 2022-07-22 11:55:29 -04:00
Serial
edc9f6ac14
Revert "Clippy: Fix unnecessary_lazy_evaluations"
This reverts commit f5153b9318.
2022-07-21 16:31:40 -04:00
Serial
f5153b9318
Clippy: Fix unnecessary_lazy_evaluations 2022-07-21 16:23:03 -04:00
Serial
8d8158e105
ID3v2: Don't allow empty strings in Accessor::set_* 2022-07-21 16:15:43 -04:00
Serial
079885eefe
ID3v2: Properly handle TXXX/WXXX frames in Tag -> ID3v2Tag conversion 2022-07-21 16:11:41 -04:00
Serial
97f081fb48
Tags: Support ReplayGain keys
ID3v2: Properly store user defined frames after `Tag` conversion
2022-07-21 15:33:57 -04:00
Serial
69436e5c0a
Misc: Add tests and extension detection for MP1 and MP2 2022-07-18 16:04:21 -04:00
Serial
903531e07f
Tag: Add missing return 2022-07-17 13:58:27 -04:00
Serial
7f71053e52
OGG: Add length validation to Vorbis Comments reading 2022-07-12 21:17:18 -04:00
Serial
19cef0400e
FLAC: Return early when encountering invalid zero-sized blocks 2022-07-12 21:01:12 -04:00
Serial
5e35896dff
Misc: Add err! macro 2022-07-12 14:46:30 -04:00