Skip to content

Commit 8eef539

Browse files
committed
General : Using an alternative case for the field ID in AdditionalValues doesn't get detected as a new field [#379]
1 parent 8d27355 commit 8eef539

10 files changed

Lines changed: 178 additions & 34 deletions

File tree

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,9 @@
77
namespace ATL.test.IO.MetaData
88
{
99
[TestClass]
10-
public class APE : MetaIOTest
10+
public class APEtag : MetaIOTest
1111
{
12-
public APE()
12+
public APEtag()
1313
{
1414
emptyFile = "MP3/empty.mp3";
1515
notEmptyFile = "MP3/APE.mp3";
@@ -188,5 +188,11 @@ public void TagIO_RW_APE_ID3v2()
188188
{
189189
test_RW_Cohabitation(MetaDataIOFactory.TagType.APE, MetaDataIOFactory.TagType.ID3V2);
190190
}
191+
192+
[TestMethod]
193+
public void TagIO_RW_VorbisFLAC_AdditionalFieldsCase()
194+
{
195+
additionalFieldsCase(emptyFile, MetaDataIOFactory.TagType.APE);
196+
}
191197
}
192198
}

ATL.unit-test/IO/MetaData/ID3v2.cs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1619,5 +1619,11 @@ public void TagIO_RW_ID3v2_APE()
16191619
{
16201620
test_RW_Cohabitation(MetaDataIOFactory.TagType.ID3V2, MetaDataIOFactory.TagType.APE);
16211621
}
1622+
1623+
[TestMethod]
1624+
public void TagIO_RW_ID3v2_AdditionalFieldsCase()
1625+
{
1626+
additionalFieldsCase(emptyFile, MetaDataIOFactory.TagType.ID3V2);
1627+
}
16221628
}
16231629
}

ATL.unit-test/IO/MetaData/MP4.cs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2075,5 +2075,11 @@ public void TagIO_RW_MP4_RemoveTag_AddMetaAndChap2Images_RemoveTag()
20752075
// Get rid of the working copy
20762076
if (Settings.DeleteAfterSuccess) File.Delete(testFileLocation);
20772077
}
2078+
2079+
[TestMethod]
2080+
public void TagIO_RW_MP4_AdditionalFieldsCase()
2081+
{
2082+
additionalFieldsCase(emptyFile, MetaDataIOFactory.TagType.NATIVE);
2083+
}
20782084
}
20792085
}

ATL.unit-test/IO/MetaData/MetaIOTest.cs

Lines changed: 130 additions & 28 deletions
Large diffs are not rendered by default.

ATL.unit-test/IO/MetaData/Vorbis_FLAC.cs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -567,5 +567,11 @@ private static void checkLyricsMultiple(IMetaData meta)
567567
Assert.AreEqual(LyricsInfo.LyricsFormat.LRC, meta.Lyrics[0].Format);
568568
Assert.AreEqual(99, meta.Lyrics[0].SynchronizedLyrics.Count);
569569
}
570+
571+
[TestMethod]
572+
public void TagIO_RW_VorbisFLAC_AdditionalFieldsCase()
573+
{
574+
additionalFieldsCase(emptyFile, MetaDataIOFactory.TagType.NATIVE);
575+
}
570576
}
571577
}

ATL.unit-test/IO/MetaData/WAV.cs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -606,5 +606,11 @@ public void TagIO_RW_WAV_Even_ID3()
606606
// Get rid of the working copy
607607
if (Settings.DeleteAfterSuccess) File.Delete(testFileLocation);
608608
}
609+
610+
[TestMethod]
611+
public void TagIO_RW_WAV_AdditionalFieldsCase()
612+
{
613+
additionalFieldsCase(emptyFile, MetaDataIOFactory.TagType.NATIVE, "info.ICMS");
614+
}
609615
}
610616
}

ATL.unit-test/IO/MetaData/WMA.cs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -538,5 +538,11 @@ public void TagIO_RW_WMA_APE()
538538
{
539539
test_RW_Cohabitation(MetaDataIOFactory.TagType.NATIVE, MetaDataIOFactory.TagType.APE);
540540
}
541+
542+
[TestMethod]
543+
public void TagIO_RW_WMA_AdditionalFieldsCase()
544+
{
545+
additionalFieldsCase(emptyFile, MetaDataIOFactory.TagType.NATIVE);
546+
}
541547
}
542548
}

ATL/AudioData/IO/VorbisTag.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -315,6 +315,7 @@ public void ReadPicture(Stream s, ReadTagParams readTagParams)
315315

316316
tagData.AdditionalFields.Remove(fieldInfo);
317317
}
318+
318319
tagData.AdditionalFields.Add(fieldInfo);
319320
}
320321
}
@@ -533,7 +534,7 @@ private uint writeFrames(Stream w, TagData tag)
533534
foreach (MetaFieldInfo fieldInfo in tag.AdditionalFields.Where(isMetaFieldWritable))
534535
{
535536
if (fieldInfo.NativeFieldCode.Equals(VENDOR_METADATA_ID)
536-
|| writtenFieldCodes.Contains(fieldInfo.NativeFieldCode.ToUpper())) continue;
537+
|| writtenFieldCodes.Contains(fieldInfo.NativeFieldCode)) continue;
537538

538539
string value = FormatBeforeWriting(fieldInfo.Value);
539540
if (value.Contains(Settings.DisplayValueSeparator + ""))

ATL/Entities/MetaFieldInfo.cs

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
using System.Diagnostics.CodeAnalysis;
1+
using System;
2+
using System.Diagnostics.CodeAnalysis;
23
using ATL.AudioData;
34
using Commons;
45
using HashDepot;
@@ -172,7 +173,7 @@ public bool EqualsWithoutZone(object obj)
172173
if (obj.GetType() != this.GetType()) return false;
173174

174175
// Call the implementation from IEquatable
175-
return this.ToStringWithoutZone().Equals(((MetaFieldInfo)obj).ToStringWithoutZone());
176+
return this.ToStringWithoutZone().Equals(((MetaFieldInfo)obj).ToStringWithoutZone(), StringComparison.InvariantCultureIgnoreCase);
176177
}
177178

178179
/// <summary>
@@ -185,7 +186,7 @@ public bool EqualsApproximate(MetaFieldInfo obj)
185186
if (ReferenceEquals(null, obj)) return false;
186187
if (ReferenceEquals(this, obj)) return true;
187188

188-
bool result = MetaDataIOFactory.TagType.ANY == obj.TagType && obj.NativeFieldCode.Equals(this.NativeFieldCode);
189+
bool result = MetaDataIOFactory.TagType.ANY == obj.TagType && obj.NativeFieldCode.Equals(this.NativeFieldCode, StringComparison.InvariantCultureIgnoreCase);
189190
if (obj.StreamNumber > 0) result = result && obj.StreamNumber == this.StreamNumber;
190191
if (obj.Language.Length > 0) result = result && obj.Language.Equals(this.Language);
191192

ATL/Entities/TagData.cs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -416,6 +416,10 @@ public void IntegrateValues(TagData targetData, bool integratePictures = true, b
416416
if (metaInfo.EqualsWithoutZone(newMetaInfo) || metaInfo.EqualsApproximate(newMetaInfo))
417417
{
418418
found = true;
419+
420+
if (!newMetaInfo.NativeFieldCode.Equals(metaInfo.NativeFieldCode) && newMetaInfo.NativeFieldCode.Equals(metaInfo.NativeFieldCode, StringComparison.InvariantCultureIgnoreCase))
421+
LogDelegator.GetLogDelegate()(Log.LV_WARNING, "Adding an AdditionalField with the same field code and a different case (" + metaInfo.NativeFieldCode + " => " + newMetaInfo.NativeFieldCode+"). Initial case ("+ metaInfo.NativeFieldCode+") will be kept.");
422+
419423
if (newMetaInfo.MarkedForDeletion) metaInfo.MarkedForDeletion = true; // New MetaFieldInfo is a demand for deletion
420424
else metaInfo.Value = newMetaInfo.Value;
421425
break;

0 commit comments

Comments
 (0)