private void ReplaceParametersWithValues(List<ParameterPart> parameters, bool preview)
{
List<string> splittedFileValues = new List<string>();
// Split up the file name
// We use already the FileName from the Track instance, which might be already modified by the user.
string file;
if (preview)
file = String.Format(@"{0}\{1}", Path.GetDirectoryName(trackPreview.FullFileName),
Path.GetFileNameWithoutExtension(trackPreview.FullFileName));
else
file = String.Format(@"{0}\{1}", Path.GetDirectoryName(track.FullFileName),
Path.GetFileNameWithoutExtension(track.FileName));
string[] fileArray = file.Split(new[] {'\\'});
// Now set Upper Bound depending on the length of parameters and file
int upperBound;
if (parameters.Count >= fileArray.Length)
upperBound = fileArray.Length - 1;
else
upperBound = parameters.Count - 1;
// Now loop through the delimiters and assign files
for (int i = 0; i <= upperBound; i++)
{
ParameterPart parameterpart = parameters[i];
string[] delims = parameterpart.Delimiters;
List<string> parms = parameterpart.Parameters;
// Set the part of the File to Process
string filePart = fileArray[fileArray.GetUpperBound(0) - i];
splittedFileValues.Clear();
int upperBoundDelims = delims.GetUpperBound(0);
for (int j = 0; j <= upperBoundDelims; j++)
{
if ((j == upperBoundDelims) | (delims[j] != ""))
{
if (filePart.IndexOf(delims[j]) == 0 && j == upperBoundDelims)
{
splittedFileValues.Add(filePart);
break;
}
int delimIndex = filePart.IndexOf(delims[j]);
if (delimIndex > -1)
{
splittedFileValues.Add(filePart.Substring(0, filePart.IndexOf(delims[j])));
filePart = filePart.Substring(filePart.IndexOf(delims[j]) + delims[j].Length);
}
}
}
int index = -1;
// Now we need to Update the Tag Values
foreach (string parm in parms)
{
index++;
switch (parm)
{
case "<A>":
if (preview)
trackPreview.Artist = splittedFileValues[index];
else
track.Artist = splittedFileValues[index];
break;
case "<T>":
if (preview)
trackPreview.Title = splittedFileValues[index];
else
track.Title = splittedFileValues[index];
break;
case "<B>":
if (preview)
trackPreview.Album = splittedFileValues[index];
else
track.Album = splittedFileValues[index];
break;
case "<Y>":
if (preview)
trackPreview.Year = splittedFileValues[index];
else
track.Year = Convert.ToInt32(splittedFileValues[index]);
break;
case "<K>":
if (preview)
trackPreview.Track = splittedFileValues[index];
else
track.TrackNumber = Convert.ToUInt32(splittedFileValues[index]);
break;
case "<k>":
if (preview)
trackPreview.NumTrack = splittedFileValues[index];
else
track.TrackCount = Convert.ToUInt32(splittedFileValues[index]);
break;
case "<D>":
if (preview)
trackPreview.Disc = splittedFileValues[index];
else
track.DiscNumber = Convert.ToUInt32(splittedFileValues[index]);
break;
case "<d>":
if (preview)
trackPreview.NumDisc = splittedFileValues[index];
else
track.DiscCount = Convert.ToUInt32(splittedFileValues[index]);
break;
case "<G>":
if (preview)
trackPreview.Genre = splittedFileValues[index];
else
track.Genre = splittedFileValues[index];
break;
case "<O>":
if (preview)
trackPreview.AlbumArtist = splittedFileValues[index];
else
track.AlbumArtist = splittedFileValues[index];
break;
case "<C>":
if (preview)
trackPreview.Comment = splittedFileValues[index];
else
track.Comment = splittedFileValues[index];
break;
case "<N>":
if (preview)
trackPreview.Conductor = splittedFileValues[index];
else
track.Conductor = splittedFileValues[index];
break;
case "<R>":
if (preview)
trackPreview.Composer = splittedFileValues[index];
else
track.Composer = splittedFileValues[index];
break;
case "<U>":
if (preview)
trackPreview.Grouping = splittedFileValues[index];
else
track.Grouping = splittedFileValues[index];
break;
case "<S>":
if (preview)
trackPreview.SubTitle = splittedFileValues[index];
else
track.SubTitle = splittedFileValues[index];
break;
case "<M>":
if (preview)
trackPreview.Interpreter = splittedFileValues[index];
else
track.Interpreter = splittedFileValues[index];
break;
case "<E>":
if (preview)
trackPreview.BPM = splittedFileValues[index];
else
track.BPM = Convert.ToInt32(splittedFileValues[index]);
break;
case "<X>":
// ignore it
break;
}
}
}
}