private void addBonusSongNotes(DirectoryInfo rootPath, QbKey source, QbKey dest, PakEditor qbPak)
{
string srcFolder = string.Format(@"{0}\songs", rootPath.FullName.TrimEnd('\\'));
string srcMask = string.Format(@"{0}*.pak.ngc", source.Text);
string[] srcFi = Directory.GetFiles(srcFolder, srcMask, SearchOption.TopDirectoryOnly);
if (_project.GameInfo.Game == Game.GHA_Wii)
{
//GHA holds the section text in the main qb.pak file
string destNotes = string.Format(@"songs\{0}.mid_text.qb.ngc", dest.Text);
if (!qbPak.Headers.ContainsKey(destNotes.ToLower()))
{
QbFile qbNotes = qbPak.ReadQbFile(string.Format(@"songs\{0}.mid_text.qb.ngc", source.Text));
//copy notes section qb file to new file in qb.pak.ngc
qbPak.AddFile(qbNotes, destNotes, QbKey.Create(".qb"), true);
}
}
foreach (string src in srcFi)
{
FileInfo srcF = new FileInfo(src);
string dst = string.Format(@"{0}\{1}{2}", srcF.Directory.FullName.TrimEnd('\\'), dest.Text, srcF.Name.Substring(source.Text.Length));
//skip if exists
if (File.Exists(dst) || !Regex.IsMatch(src, string.Format(@"{0}(|_.)\.pak\.ngc$", source.Text))) //only allow "" or _<fgis>
continue;
File.Copy(src, dst, true);
PakFormat pf = new PakFormat(dst, string.Empty, string.Empty, PakFormatType.Wii, false);
PakEditor pe = new PakEditor(pf, false);
string qbDst;
QbFile qb;
Dictionary<uint, string> srcQk;
string dstS;
foreach (string qbSrc in pe.QbFilenames)
{
qbDst = qbSrc.ToLower().Replace(source.Text.ToLower(), dest.Text.ToLower());
pe.RenameFile(qbSrc, qbDst, QbKey.Create(".mqb"));
if (!qbSrc.Contains(".mid_text."))
{
//map the section QbKeys
qb = pe.ReadQbFile(qbDst);
srcQk = getMidItems(source.Text);
foreach (QbItemBase qib in qb.Items)
{
if (qib.ItemQbKey != null)
{
if (srcQk.ContainsKey(qib.ItemQbKey.Crc))
{
dstS = string.Format("{0}{1}", dest.Text, srcQk[qib.ItemQbKey.Crc].Substring(source.Text.Length));
qib.ItemQbKey = QbKey.Create(dstS);
}
//else
// throw new ApplicationException("Item QBKey not recognised");
}
}
pe.ReplaceFile(qbDst, qb);
}
}
}
}