From 7834674381d86648c2f33606bff7ace59a85585d Mon Sep 17 00:00:00 2001 From: obskyr Date: Tue, 7 Apr 2026 03:35:22 +0200 Subject: [PATCH] fix(scanner): map ORIGYEAR tag for VorbisComment and MP4 formats MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Use ORIGYEAR tag for original date As it is a default mapping in MP3Tag. https://docs.mp3tag.de/mapping/#origyear * Test parsing `originaldate` and `ORIGYEAR` tags `originaldate` is populated by TagLib’s mappings. https://taglib.org/api/p_propertymapping.html --- adapters/gotaglib/gotaglib_test.go | 11 +++++++++++ resources/mappings.yaml | 2 +- .../01 Invisible (RED) Edit Version.m4a | Bin 38962 -> 38962 bytes tests/fixtures/test.aiff | Bin 109766 -> 109766 bytes tests/fixtures/test.flac | Bin 31146 -> 31146 bytes tests/fixtures/test.m4a | Bin 45120 -> 45120 bytes tests/fixtures/test.mp3 | Bin 64223 -> 64223 bytes tests/fixtures/test.ogg | Bin 32177 -> 32200 bytes tests/fixtures/test.opus | Bin 14236 -> 13219 bytes tests/fixtures/test.wav | Bin 109954 -> 109954 bytes tests/fixtures/test.wma | Bin 40717 -> 40717 bytes tests/fixtures/test.wv | Bin 42882 -> 42909 bytes 12 files changed, 12 insertions(+), 1 deletion(-) diff --git a/adapters/gotaglib/gotaglib_test.go b/adapters/gotaglib/gotaglib_test.go index 8fdf5b406..6756fb690 100644 --- a/adapters/gotaglib/gotaglib_test.go +++ b/adapters/gotaglib/gotaglib_test.go @@ -127,6 +127,17 @@ var _ = Describe("Extractor", func() { Expect(m.Tags).To(HaveKeyWithValue("albumartist", []string{"Album Artist"})) Expect(m.Tags).To(HaveKeyWithValue("genre", []string{"Rock"})) Expect(m.Tags).To(HaveKeyWithValue("date", []string{"2014"})) + // Still as of TagLib v2.2.1, TagLib only maps values in ID3, MP4, and ASF tags + // to `originaldate`. + if strings.HasSuffix(file, ".mp3") || strings.HasSuffix(file, ".wav") || strings.HasSuffix(file, ".aiff") || strings.HasSuffix(file, ".m4a") || strings.HasSuffix(file, ".wma") { + Expect(m.Tags).To(HaveKeyWithValue("originaldate", []string{"1996-11-21"})) + } + // MP3Tag sets `ORIGYEAR` in several formats for which it has no built-in mapping + // for original release dates. + Expect(m.Tags).To(Or( + HaveKeyWithValue("origyear", []string{"1998-07-28"}), + HaveKeyWithValue("----:com.apple.itunes:origyear", []string{"1998-07-28"}), + )) Expect(m.Tags).To(HaveKeyWithValue("bpm", []string{"123"})) Expect(m.Tags).To(Or( diff --git a/resources/mappings.yaml b/resources/mappings.yaml index 19ba0b090..16dddd504 100644 --- a/resources/mappings.yaml +++ b/resources/mappings.yaml @@ -116,7 +116,7 @@ main: aliases: [ comm:description, comment, ©cmt, description, icmt ] maxLength: 4096 originaldate: - aliases: [ tdor, originaldate, ----:com.apple.itunes:originaldate, wm/originalreleasetime, tory, originalyear, ----:com.apple.itunes:originalyear, wm/originalreleaseyear ] + aliases: [ tdor, originaldate, ----:com.apple.itunes:originaldate, wm/originalreleasetime, tory, originalyear, ----:com.apple.itunes:originalyear, wm/originalreleaseyear, origyear, ----:com.apple.itunes:origyear ] type: date recordingdate: aliases: [ tdrc, date, recordingdate, icrd, record date ] diff --git a/tests/fixtures/01 Invisible (RED) Edit Version.m4a b/tests/fixtures/01 Invisible (RED) Edit Version.m4a index 005792eb5f7f2447de71a3e6719f69697c3d21bd..76b61a2d4331923781ec3f342382b5661e5f3baa 100644 GIT binary patch delta 154 zcmdnAfoanQrVSikjMp}EdVOZ*4ATVy1_lP1$^Jgl))IM%xv4-NgMW~xyQiO{kBei7 zE08Odl30=mq!~eShL)CQx`u|jMutF65VC%45oG<5u8u)K73g{`bPddPjVw0r@T+y3 P{M&aw6I1v`gOARpq diff --git a/tests/fixtures/test.aiff b/tests/fixtures/test.aiff index 1435115d9ca65b2574798a29fe10d75f45dff76c..d179f0714d9b074becd26a169971147a5ad45600 100644 GIT binary patch delta 74 zcmX?hlkM0|wuUW?Gb2S@{DT-67Mm<=s0&2$Y7b&U+CPmg3wkqe24hyY570;T+e bJl!K*9fKHvYAkdO%yo?{w*QJ`oE`)K@_-Xe delta 27 jcmX?hlkM0|wuUW?Gb5+3k7P{RZV<&dEoi#HN=8!vu?!0& diff --git a/tests/fixtures/test.flac b/tests/fixtures/test.flac index 6c1270fd5091bde08bcdbcf147b9ac188dcc7367..50430f539ed2b9a4d350d46ec0e8f0fc719dcac7 100644 GIT binary patch delta 72 zcmZ4WnQ_%;#tFJY*LWBh7<>}T(##C>jP(o+3_>>Auj3XM28#LzdAdisItJMqT3TA@ b8kp-ES!{mGeMF5hZ1X{*Fp!0gx>czYG8X08C+aW;QS`GcGYOFjKKVt_!mS48$e@ZL`rbP85^i KG9R-aM~gDm5fQHd diff --git a/tests/fixtures/test.m4a b/tests/fixtures/test.m4a index c469dd9e411c678ec2b7548df4533c6f1fe4df0a..e9b54d44d26e997bae7a2cd2de3457f73663aa1e 100644 GIT binary patch delta 169 zcmX@`fa$;krVadIj7K*MgvBvV7K*mq{2}TR6Jyxqh6rV2iM+(zR0bgM5At;P^mFua zaSU+)JBS_BB($Y-V&`{UN5XcDv>6`p6oKp>?CDPR~2q=iI+(OsDT-V3~ pC=&xyzIk@I4D;lcB+JdeW2drh-jG`Dws}H|0wWW1{ziptW&qwoFMn*rmP MlMtN*v!R+kVBy*kkN^Mx delta 27 lcmV+$0ObGQ^#kAa1F)O{v%3M}n3JHEACnNB1hb)TBzmlT?~Jajr}~FGwgT#4|X=*0HE0v$%vEDBu*}Yinp^ED2;f`}_L3`i0m!=jZ08 z=9L(7K^aCMjX=o&Panq+Pk%pKLr$Q8i(`nZt&xGD2_J~#8SLyA>g(hhWNWBz#03;_ zcl8T$wGGNo&ej9+d?JH9Cm&~w5C=KUKgiQP($x{D)Y8&I*T7uY$YQcFV~;Y($swL0 qKCZSQnI$=?0w8XXqq8^EU}JqlgURwtw%m>gFgcy+_2xKsI|Bfb-beBP delta 334 zcmZ3SJ|};IEAQzy=Vo#IhXCP;eiFt)3=9n1Kpf&3;^S%?l39|I3gSBYIEDJ!I_4ym z=JJBLK_Q;OA-0Z1C7Hz~6Dwt6xqyQ1u6{wTwn6#H*_=S0i(`nZt&xGDi2#rj66EOY z?HB6n#exKVa; yGh+{<-eh}5waLbemXnQ`Y`I+>fxrnwxKFNPdOcat*l4nXu`-=8+vZeeI|BfT{91Pa diff --git a/tests/fixtures/test.wav b/tests/fixtures/test.wav index 155d88bdb51e4e8ea0e377305b02acf669d59e08..b8c1f9a650c2f414baacf4d4fa4fa3fae89906de 100644 GIT binary patch delta 79 zcmZp=&DM0Atzipef24?ue-Hx$0}lfOv!SJ>nXaLsu94yN-blt2xsZs62%wZGP|82Z g(>>DFF^B=E#zNP?T-V5A`-e!z=|R)?tYJI`04~%OZ~y=R delta 31 ncmZp=&DM0Atzipef8_L~k&H>()uI@u1x;JYXgYn*8pdM))jge z7050Il96Cm5m=)bgCT<@5SlUQ0$GMY(g;X0FbDz72x9PLa0jY(WpD(tK>()O0;tY_ l!5pmG0w_L_{m%C7E6;DP^>b!q+RVK9qW?nX&9{S%ya9K`A%Fk? delta 42 vcmeC($JD!zX@eFsXN)%k7)Wk5W_I@8{Lasdkx83n^TZjFESql!8+ii&0J02v diff --git a/tests/fixtures/test.wv b/tests/fixtures/test.wv index 3722d28a24f04c02edc0c73543796137debfbc99..7f4118bdb343988ff70f96dcbd8c5119d952e21f 100644 GIT binary patch delta 520 zcmYjO&o2W(6n^!iL?j|4BpfOc7s~Edv=W!aY9xeI>DFy_4JNj`&2$M4h(Ex=ySRw0 z#yXO?Ik-w3RQL=09}d=bCo#!;@0;(v@5`IadA;en-t_ofIIXV$j6!(4MgeG!!0hTW z$Vy6F=UK%Bc|vK4+C@q@D3UxWh%B`^g`8vV2`0~pxd*8US!#_$s%7k#Ak2Rh?t5Kn z(aST}q7dd-G(P8)%FH4zb8L{~!h^f4;sX8@29rXo**naplmjI|4Z$w6L$xu?32+0; zH+@oD0p79&9zf?qn~%>47WNP>W6;ECUl5Bk7BMfi5vg` delta 502 zcmbPxo~h|P(}rE)PFwsL7_=C`U;%_;U|@wZ9CMONa~Z%S53-PgV^K+FaS235VRC(h z%;bUyQGRBq8m9nX216s`$zLKBMH!)D&iT0onK_9infZAPhLd9>RVLq#l$7R#%jTt& zCYR(FF(l{bC4z{g&HoeX+$P_TkWhme>ylZV%wVW*#17Tul9iiTky^x%l9dR=lPe-+ zV_^<=%}dYBO9jfMCNiWZu|PGrr{)!Q6Z5bCy4{95++`p zUsS@7sH2brlAOFcDr)k^2ytPUExusua}ybIlO`{Wsh#W_lQH>FTo{loGFdJ*b8>xj z`sDW5OOqv|gEqIuS22PmBI7bAKZ_2YED@hOnLkp3k$rMPl*DAcD4xmjQEHQ|qAVuQ zh!PHiSrL+1l9S2+CSkq^DN0PvW-!(_G=PajrY06K7#SFvI0m?eIJ&z=TmbqHDP9|( HzG46XL`r_4