internal static void MoveTagInfoToTracks(Container c)
{
//Moving Title and Language tags to tracks if they exists
List<EbmlGeneric> tracks = c.FindAll(Ids.MATROSKA_ID_TRACKENTRY);
List<EbmlGeneric> tags = c.FindAll(Ids.MATROSKA_ID_TAG);
foreach (EbmlMaster t in tags)
{
EbmlMaster tt = (EbmlMaster)t.FindFirst(Ids.MATROSKA_ID_TAGTARGETS);
if (tt != null)
{
EbmlMaster sp = (EbmlMaster)t.FindFirst(Ids.MATROSKA_ID_SIMPLETAG);
EbmlUint jk = (EbmlUint)tt.FindFirst(Ids.MATROSKA_ID_TAGTARGETS_TRACKUID);
if (jk != null)
{
EbmlUtf8 name = (EbmlUtf8)sp.FindFirst(Ids.MATROSKA_ID_TAGNAME);
EbmlUtf8 value = (EbmlUtf8)sp.FindFirst(Ids.MATROSKA_ID_TAGSTRING);
if (name != null && value != null)
{
string nm = name.Value.ToUpper(CultureInfo.InvariantCulture);
string vl = value.Value;
if (nm == "LANGUAGE" || nm == "TITLE" || nm == "NAME")
{
foreach (EbmlMaster j in tracks)
{
EbmlUint u = (EbmlUint)j.FindFirst(Ids.MATROSKA_ID_TRACKUID);
if (u.Value == jk.Value)
{
EbmlUtf8 change;
if (nm == "TITLE" || nm == "NAME")
{
change = (EbmlUtf8)j.FindFirst(Ids.MATROSKA_ID_TRACKNAME);
if (change == null)
{
change = new EbmlUtf8 { Id = Ids.MATROSKA_ID_TRACKNAME };
j.Value.Add(change);
}
}
else
{
change = (EbmlUtf8)j.FindFirst(Ids.MATROSKA_ID_TRACKLANGUAGE);
if (change == null)
{
change = new EbmlUtf8 { Id = Ids.MATROSKA_ID_TRACKLANGUAGE };
j.Value.Add(change);
}
}
change.Value = vl;
j.Value.Sort();
break;
}
}
}
}
}
}
}
}