From fee96e6b49a7ff430c2a212c4268bfdd44ee3560 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Yannik=20B=C3=B6ttcher?= Date: Thu, 6 Aug 2020 17:26:50 +0200 Subject: [PATCH 01/12] add support for opus files --- Cargo.lock | 7 +++++++ Cargo.toml | 1 + src/index/metadata.rs | 33 +++++++++++++++++++++++++++++++++ src/utils.rs | 2 ++ test/sample.opus | Bin 0 -> 7188 bytes 5 files changed, 43 insertions(+) create mode 100644 test/sample.opus diff --git a/Cargo.lock b/Cargo.lock index 56722bd..2e69719 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1457,6 +1457,11 @@ dependencies = [ "vcpkg 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)", ] +[[package]] +name = "opus_headers" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" + [[package]] name = "parking_lot" version = "0.9.0" @@ -1589,6 +1594,7 @@ dependencies = [ "metaflac 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", "mp3-duration 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", "mp4ameta 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", + "opus_headers 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", "pbkdf2 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", "percent-encoding 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "rand 0.7.3 (registry+https://github.com/rust-lang/crates.io-index)", @@ -3079,6 +3085,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" "checksum openssl 0.10.30 (registry+https://github.com/rust-lang/crates.io-index)" = "8d575eff3665419f9b83678ff2815858ad9d11567e082f5ac1814baba4e2bcb4" "checksum openssl-probe 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "77af24da69f9d9341038eba93a073b1fdaaa1b788221b00a69bce9e762cb32de" "checksum openssl-sys 0.9.58 (registry+https://github.com/rust-lang/crates.io-index)" = "a842db4709b604f0fe5d1170ae3565899be2ad3d9cbc72dedc789ac0511f78de" +"checksum opus_headers 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "afbb993947f111397c2bc536944f8dac7f54a4e73383d478efe1990b56404b60" "checksum parking_lot 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)" = "a4893845fa2ca272e647da5d0e46660a314ead9c2fdd9a883aabc32e481a8733" "checksum parking_lot 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)" = "f842b1982eb6c2fe34036a4fbfb06dd185a3f5c8edfaacdf7d1ea10b07de6252" "checksum parking_lot_core 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)" = "b876b1b9e7ac6e1a74a6da34d25c42e17e8862aa409cbbbdcfc8d86c6f3bc62b" diff --git a/Cargo.toml b/Cargo.toml index 9517ef3..c2ca218 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -45,6 +45,7 @@ thiserror = "1.0.19" time = "0.1" toml = "0.5" url = "2.1" +opus_headers = "0.1.2" [dependencies.rocket_contrib] version = "0.4.5" diff --git a/src/index/metadata.rs b/src/index/metadata.rs index da08cb1..8f604df 100644 --- a/src/index/metadata.rs +++ b/src/index/metadata.rs @@ -9,6 +9,7 @@ use mp4ameta; use regex::Regex; use std::fs; use std::path::Path; +use opus_headers; use crate::utils; use crate::utils::AudioFormat; @@ -33,6 +34,7 @@ pub fn read(path: &Path) -> Option { Some(AudioFormat::MP4) => Some(read_mp4(path)), Some(AudioFormat::MPC) => Some(read_ape(path)), Some(AudioFormat::OGG) => Some(read_vorbis(path)), + Some(AudioFormat::OPUS) => Some(read_opus(path)), _ => None, }; match data { @@ -175,6 +177,37 @@ fn read_vorbis(path: &Path) -> Result { Ok(tags) } +#[cfg_attr(feature = "profile-index", flame)] +fn read_opus(path: &Path) -> Result { + let headers = opus_headers::parse_from_path(path)?; + + let mut tags = SongTags { + artist: None, + album_artist: None, + album: None, + title: None, + duration: None, + disc_number: None, + track_number: None, + year: None, + }; + + for (key, value) in headers.comments.user_comments { + match key.as_str().to_uppercase().as_str() { + "TITLE" => tags.title = Some(value), + "ALBUM" => tags.album = Some(value), + "ARTIST" => tags.artist = Some(value), + "ALBUMARTIST" => tags.album_artist = Some(value), + "TRACKNUMBER" => tags.track_number = value.parse::().ok(), + "DISCNUMBER" => tags.disc_number = value.parse::().ok(), + "DATE" => tags.year = value.parse::().ok(), + _ => (), + } + } + + Ok(tags) +} + #[cfg_attr(feature = "profile-index", flame)] fn read_flac(path: &Path) -> Result { let tag = metaflac::Tag::read_from_path(path)?; diff --git a/src/utils.rs b/src/utils.rs index 45e5e44..7578b93 100644 --- a/src/utils.rs +++ b/src/utils.rs @@ -30,6 +30,7 @@ pub enum AudioFormat { MP4, MPC, OGG, + OPUS, } #[cfg_attr(feature = "profile-index", flame)] @@ -48,6 +49,7 @@ pub fn get_audio_format(path: &Path) -> Option { "m4a" => Some(AudioFormat::MP4), "mpc" => Some(AudioFormat::MPC), "ogg" => Some(AudioFormat::OGG), + "opus" => Some(AudioFormat::OPUS), _ => None, } } diff --git a/test/sample.opus b/test/sample.opus new file mode 100644 index 0000000000000000000000000000000000000000..5b4ed6ff1be6caed032651239a0096b2e15f8f31 GIT binary patch literal 7188 zcmds+O=uHA6vt6;Jhp*7q{e_3BODknrDqJG;zp-kW)| zJ6b#*W<{(}zC67V!NZA(cb!s|*4J0Z%-6YJ|n z+$;xEyD<>+G&i|-G;MXcO2JSCe{XwBM?mQ{Qc*b_lZ|9|e`?Kdvp1ys!@80;b{QEf zVOq=aTEUz*bXi8c7K}bE5Kx1Di9Wl#_|>G%#TMcdEgVDsJeBR)RtI>+Pxn z4d}8GRx(z%Up-8x%7$QH1BT#s88EEa{OO3=3 zSr|v4K*S|b{RhWeVu-u~N1#9~1D)pmpNJu{M>Zm^@y-ssXds5jkKrUEyod|iBiUOH zVu;L(lZ-&b<-B#&`Is0Y|7jyS0kP)EIJq_IZJbAi7xC>d$cCO#^P-9Ks6fQ`*XP;X zHDZWt3(lhg5kCt!i#vZ1L*zLdaU~*d+H4X-WLGd%2rsSzoqsiTf*2wFha= Date: Thu, 6 Aug 2020 18:17:55 +0200 Subject: [PATCH 02/12] remove redundant to_str --- src/index/metadata.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/index/metadata.rs b/src/index/metadata.rs index 8f604df..8355d1d 100644 --- a/src/index/metadata.rs +++ b/src/index/metadata.rs @@ -193,7 +193,7 @@ fn read_opus(path: &Path) -> Result { }; for (key, value) in headers.comments.user_comments { - match key.as_str().to_uppercase().as_str() { + match key.to_uppercase().as_str() { "TITLE" => tags.title = Some(value), "ALBUM" => tags.album = Some(value), "ARTIST" => tags.artist = Some(value), From db97dbea46d2236acf196b8c9e5db624c1b28d97 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Yannik=20B=C3=B6ttcher?= Date: Thu, 6 Aug 2020 19:32:52 +0200 Subject: [PATCH 03/12] use eq_ignore_ascii_case instead of to_uppercase --- src/index/metadata.rs | 23 ++++++++++++++--------- 1 file changed, 14 insertions(+), 9 deletions(-) diff --git a/src/index/metadata.rs b/src/index/metadata.rs index 8355d1d..e867c50 100644 --- a/src/index/metadata.rs +++ b/src/index/metadata.rs @@ -193,15 +193,20 @@ fn read_opus(path: &Path) -> Result { }; for (key, value) in headers.comments.user_comments { - match key.to_uppercase().as_str() { - "TITLE" => tags.title = Some(value), - "ALBUM" => tags.album = Some(value), - "ARTIST" => tags.artist = Some(value), - "ALBUMARTIST" => tags.album_artist = Some(value), - "TRACKNUMBER" => tags.track_number = value.parse::().ok(), - "DISCNUMBER" => tags.disc_number = value.parse::().ok(), - "DATE" => tags.year = value.parse::().ok(), - _ => (), + if "TITLE".eq_ignore_ascii_case(key.as_str()) { + tags.title = Some(value); + } else if "ALBUM".eq_ignore_ascii_case(key.as_str()) { + tags.album = Some(value); + } else if "ARTIST".eq_ignore_ascii_case(key.as_str()) { + tags.artist = Some(value); + } else if "ALBUMARTIST".eq_ignore_ascii_case(key.as_str()) { + tags.album_artist = Some(value); + } else if "TRACKNUMBER".eq_ignore_ascii_case(key.as_str()) { + tags.track_number = value.parse::().ok(); + } else if "DISCNUMBER".eq_ignore_ascii_case(key.as_str()) { + tags.disc_number = value.parse::().ok(); + } else if "DATE".eq_ignore_ascii_case(key.as_str()) { + tags.year = value.parse::().ok(); } } From 14a6466c2d1896f32c9867a6eda3d1d23e767cdc Mon Sep 17 00:00:00 2001 From: zaethan <39460066+zaethan@users.noreply.github.com> Date: Thu, 6 Aug 2020 19:07:21 +0000 Subject: [PATCH 04/12] Update src/index/metadata.rs MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Laurențiu Nicola --- src/index/metadata.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/index/metadata.rs b/src/index/metadata.rs index e867c50..88e5212 100644 --- a/src/index/metadata.rs +++ b/src/index/metadata.rs @@ -193,7 +193,7 @@ fn read_opus(path: &Path) -> Result { }; for (key, value) in headers.comments.user_comments { - if "TITLE".eq_ignore_ascii_case(key.as_str()) { + if "TITLE".eq_ignore_ascii_case(&key) { tags.title = Some(value); } else if "ALBUM".eq_ignore_ascii_case(key.as_str()) { tags.album = Some(value); From 70c7463f6f0dbfe7d9a9ec56d8fd472b348b2de6 Mon Sep 17 00:00:00 2001 From: zaethan <39460066+zaethan@users.noreply.github.com> Date: Thu, 6 Aug 2020 19:07:49 +0000 Subject: [PATCH 05/12] Update src/index/metadata.rs MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Laurențiu Nicola --- src/index/metadata.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/index/metadata.rs b/src/index/metadata.rs index 88e5212..5fee3ef 100644 --- a/src/index/metadata.rs +++ b/src/index/metadata.rs @@ -202,7 +202,7 @@ fn read_opus(path: &Path) -> Result { } else if "ALBUMARTIST".eq_ignore_ascii_case(key.as_str()) { tags.album_artist = Some(value); } else if "TRACKNUMBER".eq_ignore_ascii_case(key.as_str()) { - tags.track_number = value.parse::().ok(); + tags.track_number = value.parse().ok(); } else if "DISCNUMBER".eq_ignore_ascii_case(key.as_str()) { tags.disc_number = value.parse::().ok(); } else if "DATE".eq_ignore_ascii_case(key.as_str()) { From 86a935fd7969b0a4252f8e0e724891bee453e05d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Yannik=20B=C3=B6ttcher?= Date: Thu, 6 Aug 2020 21:09:41 +0200 Subject: [PATCH 06/12] update all instances of key.to_str --- src/index/metadata.rs | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/src/index/metadata.rs b/src/index/metadata.rs index 5fee3ef..551af8d 100644 --- a/src/index/metadata.rs +++ b/src/index/metadata.rs @@ -195,18 +195,18 @@ fn read_opus(path: &Path) -> Result { for (key, value) in headers.comments.user_comments { if "TITLE".eq_ignore_ascii_case(&key) { tags.title = Some(value); - } else if "ALBUM".eq_ignore_ascii_case(key.as_str()) { + } else if "ALBUM".eq_ignore_ascii_case(&key) { tags.album = Some(value); - } else if "ARTIST".eq_ignore_ascii_case(key.as_str()) { + } else if "ARTIST".eq_ignore_ascii_case(&key) { tags.artist = Some(value); - } else if "ALBUMARTIST".eq_ignore_ascii_case(key.as_str()) { + } else if "ALBUMARTIST".eq_ignore_ascii_case(&key) { tags.album_artist = Some(value); - } else if "TRACKNUMBER".eq_ignore_ascii_case(key.as_str()) { + } else if "TRACKNUMBER".eq_ignore_ascii_case(&key) { tags.track_number = value.parse().ok(); - } else if "DISCNUMBER".eq_ignore_ascii_case(key.as_str()) { - tags.disc_number = value.parse::().ok(); - } else if "DATE".eq_ignore_ascii_case(key.as_str()) { - tags.year = value.parse::().ok(); + } else if "DISCNUMBER".eq_ignore_ascii_case(&key) { + tags.disc_number = value.parse().ok(); + } else if "DATE".eq_ignore_ascii_case(&key) { + tags.year = value.parse().ok(); } } From b2152cecc363a7c354b9a0cb16f4bde82eb98edc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Yannik=20B=C3=B6ttcher?= Date: Fri, 7 Aug 2020 12:44:36 +0200 Subject: [PATCH 07/12] use match_ignore_case macro --- src/index/metadata.rs | 55 +++++++++++++++++++++++++------------------ 1 file changed, 32 insertions(+), 23 deletions(-) diff --git a/src/index/metadata.rs b/src/index/metadata.rs index 551af8d..6216280 100644 --- a/src/index/metadata.rs +++ b/src/index/metadata.rs @@ -14,6 +14,16 @@ use opus_headers; use crate::utils; use crate::utils::AudioFormat; +macro_rules! match_ignore_case { + (match $v:ident { + $( $lit:literal => $res:expr, )* + _ => $catch_all:expr $(,)? + }) => {{ + $( if $lit.eq_ignore_ascii_case(&$v) { $res } else )* + { $catch_all } + }}; +} + #[derive(Debug, Clone, PartialEq)] pub struct SongTags { pub disc_number: Option, @@ -162,15 +172,17 @@ fn read_vorbis(path: &Path) -> Result { }; for (key, value) in source.comment_hdr.comment_list { - match key.as_str() { - "TITLE" => tags.title = Some(value), - "ALBUM" => tags.album = Some(value), - "ARTIST" => tags.artist = Some(value), - "ALBUMARTIST" => tags.album_artist = Some(value), - "TRACKNUMBER" => tags.track_number = value.parse::().ok(), - "DISCNUMBER" => tags.disc_number = value.parse::().ok(), - "DATE" => tags.year = value.parse::().ok(), - _ => (), + match_ignore_case! { + match key { + "TITLE" => tags.title = Some(value), + "ALBUM" => tags.album = Some(value), + "ARTIST" => tags.artist = Some(value), + "ALBUMARTIST" => tags.album_artist = Some(value), + "TRACKNUMBER" => tags.track_number = value.parse::().ok(), + "DISCNUMBER" => tags.disc_number = value.parse::().ok(), + "DATE" => tags.year = value.parse::().ok(), + _ => (), + } } } @@ -193,20 +205,17 @@ fn read_opus(path: &Path) -> Result { }; for (key, value) in headers.comments.user_comments { - if "TITLE".eq_ignore_ascii_case(&key) { - tags.title = Some(value); - } else if "ALBUM".eq_ignore_ascii_case(&key) { - tags.album = Some(value); - } else if "ARTIST".eq_ignore_ascii_case(&key) { - tags.artist = Some(value); - } else if "ALBUMARTIST".eq_ignore_ascii_case(&key) { - tags.album_artist = Some(value); - } else if "TRACKNUMBER".eq_ignore_ascii_case(&key) { - tags.track_number = value.parse().ok(); - } else if "DISCNUMBER".eq_ignore_ascii_case(&key) { - tags.disc_number = value.parse().ok(); - } else if "DATE".eq_ignore_ascii_case(&key) { - tags.year = value.parse().ok(); + match_ignore_case! { + match key { + "TITLE" => tags.title = Some(value), + "ALBUM" => tags.album = Some(value), + "ARTIST" => tags.artist = Some(value), + "ALBUMARTIST" => tags.album_artist = Some(value), + "TRACKNUMBER" => tags.track_number = value.parse::().ok(), + "DISCNUMBER" => tags.disc_number = value.parse::().ok(), + "DATE" => tags.year = value.parse::().ok(), + _ => (), + } } } From 6c4b4d3e20c68b474dbf2af998d61e7e166d1ee3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Yannik=20B=C3=B6ttcher?= Date: Fri, 7 Aug 2020 12:45:43 +0200 Subject: [PATCH 08/12] order dependencies alphabetically --- Cargo.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Cargo.toml b/Cargo.toml index c2ca218..faa7dc6 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -30,6 +30,7 @@ log = "0.4.5" metaflac = "0.2.3" mp3-duration = "0.1.9" mp4ameta = "0.2.2" +opus_headers = "0.1.2" pbkdf2 = "0.4" rand = "0.7" rayon = "1.3" @@ -45,7 +46,6 @@ thiserror = "1.0.19" time = "0.1" toml = "0.5" url = "2.1" -opus_headers = "0.1.2" [dependencies.rocket_contrib] version = "0.4.5" From 9ee9786c0a561e3e4e06af98fd51177c8cb00c5e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Yannik=20B=C3=B6ttcher?= Date: Fri, 7 Aug 2020 12:51:32 +0200 Subject: [PATCH 09/12] include opus sample in test suite --- src/index/metadata.rs | 1 + test/sample.opus | Bin 7188 -> 7190 bytes 2 files changed, 1 insertion(+) diff --git a/src/index/metadata.rs b/src/index/metadata.rs index 6216280..c1d9389 100644 --- a/src/index/metadata.rs +++ b/src/index/metadata.rs @@ -305,4 +305,5 @@ fn test_read_metadata() { assert_eq!(read(Path::new("test/sample.ogg")).unwrap(), sample_tags); assert_eq!(read(Path::new("test/sample.flac")).unwrap(), flac_sample_tag); assert_eq!(read(Path::new("test/sample.m4a")).unwrap(), m4a_sample_tag); + assert_eq!(read(Path::new("test/sample.opus")).unwrap(), sample_tags); } diff --git a/test/sample.opus b/test/sample.opus index 5b4ed6ff1be6caed032651239a0096b2e15f8f31..ca9f7af6aba5849adffa668e32788432a2736ee4 100644 GIT binary patch delta 183 zcmbPYG0kFvD|^tM<@=fb3r+Nq^%h`YU~u$t3iY)OaSaYp05fG_Vva!}p1~nVG71n8 zA&>%OIWT+TMlB6PGmxB%Yp`>WXF!Ojzn^V!W=?8e2@gorGuYWL)Yr*1$kuq`XCqaR d)ghiCKCTc8z)W6{SdgQ$H&mhF=4i&9QUE4SF+~6X delta 163 zcmbPcF~wqnD|_}U#=T7c1t$8)dI&QxFgW@+h5Fj&CFZ6oO@W?OJ From 1ff845d48e673f472314dc08c452fb33e08a4246 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Yannik=20B=C3=B6ttcher?= Date: Fri, 7 Aug 2020 12:54:07 +0200 Subject: [PATCH 10/12] make case insensitivity mandatory for the tests to pass --- test/sample.opus | Bin 7190 -> 7190 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/test/sample.opus b/test/sample.opus index ca9f7af6aba5849adffa668e32788432a2736ee4..b5291d53303bc4875f4cee6aebd909e5158ea5a5 100644 GIT binary patch delta 55 zcmbPcG0kE^o@|a&sjqE_YjB8yqmNUluPg%tgCj^RF{s3|cw)CSWAVi0hKz|5Zz?fn JZu}!94FKz&5;Xt- delta 55 zcmbPcG0kE^o~(~ksIP5^YjB8yBZw)>z`y`zI0l7y22bpkW(=OV+>p_6;!Pz+&y9bi Fqyfzy5cL26 From 943174bafa1f91c9d33d81caeb15a53efdd6fc46 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Yannik=20B=C3=B6ttcher?= Date: Fri, 7 Aug 2020 14:41:07 +0200 Subject: [PATCH 11/12] move match macro into utils module --- src/index/metadata.rs | 10 +--------- src/utils.rs | 11 +++++++++++ 2 files changed, 12 insertions(+), 9 deletions(-) diff --git a/src/index/metadata.rs b/src/index/metadata.rs index c1d9389..a4bf4ec 100644 --- a/src/index/metadata.rs +++ b/src/index/metadata.rs @@ -14,15 +14,7 @@ use opus_headers; use crate::utils; use crate::utils::AudioFormat; -macro_rules! match_ignore_case { - (match $v:ident { - $( $lit:literal => $res:expr, )* - _ => $catch_all:expr $(,)? - }) => {{ - $( if $lit.eq_ignore_ascii_case(&$v) { $res } else )* - { $catch_all } - }}; -} +use crate::match_ignore_case; #[derive(Debug, Clone, PartialEq)] pub struct SongTags { diff --git a/src/utils.rs b/src/utils.rs index 7578b93..356a845 100644 --- a/src/utils.rs +++ b/src/utils.rs @@ -3,6 +3,17 @@ use app_dirs::{app_root, AppDataType, AppInfo}; use std::fs; use std::path::{Path, PathBuf}; +#[macro_export] +macro_rules! match_ignore_case { + (match $v:ident { + $( $lit:literal => $res:expr, )* + _ => $catch_all:expr $(,)? + }) => {{ + $( if $lit.eq_ignore_ascii_case(&$v) { $res } else )* + { $catch_all } + }}; +} + #[cfg(target_family = "windows")] const APP_INFO: AppInfo = AppInfo { name: "Polaris", From 8de736e563787688f9c7305fefd98fa8871c8d00 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Yannik=20B=C3=B6ttcher?= Date: Fri, 7 Aug 2020 15:03:36 +0200 Subject: [PATCH 12/12] properly export and use the match macro --- src/index/metadata.rs | 6 ++---- src/utils.rs | 1 + 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/src/index/metadata.rs b/src/index/metadata.rs index a4bf4ec..5040c3e 100644 --- a/src/index/metadata.rs +++ b/src/index/metadata.rs @@ -14,8 +14,6 @@ use opus_headers; use crate::utils; use crate::utils::AudioFormat; -use crate::match_ignore_case; - #[derive(Debug, Clone, PartialEq)] pub struct SongTags { pub disc_number: Option, @@ -164,7 +162,7 @@ fn read_vorbis(path: &Path) -> Result { }; for (key, value) in source.comment_hdr.comment_list { - match_ignore_case! { + utils::match_ignore_case! { match key { "TITLE" => tags.title = Some(value), "ALBUM" => tags.album = Some(value), @@ -197,7 +195,7 @@ fn read_opus(path: &Path) -> Result { }; for (key, value) in headers.comments.user_comments { - match_ignore_case! { + utils::match_ignore_case! { match key { "TITLE" => tags.title = Some(value), "ALBUM" => tags.album = Some(value), diff --git a/src/utils.rs b/src/utils.rs index 356a845..edd847a 100644 --- a/src/utils.rs +++ b/src/utils.rs @@ -13,6 +13,7 @@ macro_rules! match_ignore_case { { $catch_all } }}; } +pub use crate::match_ignore_case; #[cfg(target_family = "windows")] const APP_INFO: AppInfo = AppInfo {