static void ExportPsarc(string psarcFile, CmdOptions options) { var archiveName = Path.GetFileNameWithoutExtension(psarcFile); try { var browser = new PsarcBrowser(psarcFile); var songList = browser.GetSongList(); var toolkitInfo = browser.GetToolkitInfo(); if (options.ListSongs) { foreach (var song in songList) { Console.WriteLine("[{0}] {1} - {2} ({3}, {4}) {{{5}}}", song.Identifier, song.Artist, song.Title, song.Album, song.Year, string.Join(", ", song.Arrangements)); } return; } // collect all songs to convert var toConvert = new List<SongInfo>(); if (options.Tracks == null || options.Tracks.Count == 0) { // if nothing was specified, convert all songs toConvert = toConvert.Concat(songList).ToList(); } else { foreach (var songId in options.Tracks) { var songInfo = songList.FirstOrDefault(x => x.Identifier == songId); if (songInfo != null) toConvert.Add(songInfo); } } for (int i = 0; i < toConvert.Count; ++i) { var song = toConvert[i]; var score = new Score(); // figure out which arrangements to convert var arrangements = song.Arrangements; if (options.Arrangements != null && options.Arrangements.Count > 0) arrangements = arrangements.Intersect(options.Arrangements).ToList(); Console.WriteLine("({1}/{2}) Converting song {0} ...", song.Identifier, i+1, toConvert.Count); foreach (var arr in arrangements) { var arrangement = browser.GetArrangement(song.Identifier, arr); if (arrangement == null) { Console.WriteLine(" Failed to get arrangement {0}", arr); continue; } if (arrangement.ArrangementProperties.Metronome == 1) { // CDLC feature: optional arrangements can be generated which feature only // metronome ticks, no music. However, the tab is identical to the normal // track, so we don't need this unless it was explicitly requested. if (options.Arrangements == null || options.Arrangements.Count == 0) { Console.WriteLine(" Arrangement {0} is a metronome track, ignore.", arr); continue; } } ExportArrangement(score, arrangement, arr, options.DifficultyLevel, psarcFile, toolkitInfo); if (options.SplitArrangements) { string baseFileName = ConstructFileName(options.FileNameFormat, score, song.Identifier, archiveName, toolkitInfo); baseFileName = CleanFileName(string.Format("{0} ({1})", baseFileName, arr)); SaveScore(score, baseFileName, options.OutputDirectory, options.OutputFormat); // remember to remove the track from the score again score.Tracks.Clear(); } } if (!options.SplitArrangements) { score.SortTracks(); string baseFileName = CleanFileName( ConstructFileName(options.FileNameFormat, score, song.Identifier, archiveName, toolkitInfo)); SaveScore(score, baseFileName, options.OutputDirectory, options.OutputFormat); } } Console.WriteLine(); } catch (IOException e) { Console.WriteLine("Error encountered:"); Console.WriteLine(e.Message); } }
private void btn_LoadRetailSongs_Click(object sender, EventArgs e) { rtxt_StatisticsOnReadDLCs.Text = "Starting Retail Songs processing ...." + DateTime.Now + "\n" + rtxt_StatisticsOnReadDLCs.Text; var Temp_Path_Import = txt_TempPath.Text + "\\dlcpacks"; string pathDLC = txt_RocksmithDLCPath.Text; if (!chbx_DebugB.Checked) MessageBox.Show("Please make sure one of the following Retail Packs:\ncache.psarc, songs.psarc, rs1compatibilitydisc.psarc(.edat if PS3 format), rs1compatibilitydlc.psarc(.edat) \n\n, are in the Import Folder: " + pathDLC + "\n\nAlso, make sure you have enought space for the packing&unpacking operations Platform x 3GB"); CreateTempFolderStructure(txt_TempPath.Text, txt_TempPath.Text + "\\0_old", txt_TempPath.Text + "\\0_broken", txt_TempPath.Text + "\\0_duplicate", txt_TempPath.Text + "\\0_dlcpacks", pathDLC, txt_TempPath.Text + "\\0_Repacked"); //read all the .PSARCs in the IMPORT folder var jsonFiles = Directory.GetFiles(pathDLC.Replace("Rocksmith2014\\DLC", "Rocksmith2014"), "*.psarc*", SearchOption.AllDirectories); if (pathDLC.IndexOf("Rocksmith2014\\DLC") == 0) jsonFiles = Directory.GetFiles(pathDLC, "*.psarc*", SearchOption.AllDirectories); var inputFilePath = ""; var locat = ""; var songshsanP = ""; var unpackedDir = ""; var DBb_Path = (chbx_DefaultDB.Checked == true ? MyAppWD : txt_DBFolder.Text) + "\\Files.accdb"; //string source_dir = ""; //string destination_dir = ""; var t = ""; Platform platformDLC;// var platformDLCP = ""; //Clean dlcpack Folders //Clean Temp Folder if (chbx_CleanTemp.Checked && !chbx_Additional_Manipulations.GetItemChecked(38)) //39.Use only unpacked songs already in the 0 / dlcpacks folder { try { //clear content of dlcpacks folder System.IO.DirectoryInfo downloadedMessageInfo = new DirectoryInfo(txt_TempPath.Text + "\\0_dlcpacks"); //foreach (FileInfo file in downloadedMessageInfo.GetFiles()) //{ // file.Delete(); //} foreach (DirectoryInfo dir in downloadedMessageInfo.GetDirectories()) { if (dir.Name != "manipulated" && dir.Name != "manifests" && dir.Name != "temp") dir.Delete(true); } foreach (FileInfo file in downloadedMessageInfo.GetFiles()) { file.Delete(); } //clear content of dlcpacks\\manipulated\temp folder System.IO.DirectoryInfo downloadedMMessageInfo = new DirectoryInfo(txt_TempPath.Text + "\\0_dlcpacks\\manipulated\\temp"); //foreach (FileInfo file in downloadedMessageInfo.GetFiles()) //{ // file.Delete(); //} foreach (DirectoryInfo dir in downloadedMMessageInfo.GetDirectories()) { dir.Delete(true); } foreach (FileInfo file in downloadedMMessageInfo.GetFiles()) { file.Delete(); } System.IO.DirectoryInfo downloadedMmMessageInfo = new DirectoryInfo(txt_TempPath.Text + "\\0_dlcpacks\\manifests"); foreach (DirectoryInfo dir in downloadedMmMessageInfo.GetDirectories()) { dir.Delete(true); } foreach (FileInfo file in downloadedMmMessageInfo.GetFiles()) { file.Delete(); } } catch (System.IO.FileNotFoundException ee) { // To inform the user and continue is // sufficient for this demonstration. // Your application may require different behavior. Console.WriteLine(ee.Message); rtxt_StatisticsOnReadDLCs.Text = "Error cleaning Temp Folder Cleaned" + "\n" + rtxt_StatisticsOnReadDLCs.Text; //continue; } } //Clean CachetDB DataSet dss = new DataSet(); try { using (OleDbConnection cnn = new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + DBb_Path)) { if (chbx_CleanDB.Checked) { rtxt_StatisticsOnReadDLCs.Text = "Cleaning....Cache table...." + "\n" + rtxt_StatisticsOnReadDLCs.Text; OleDbDataAdapter dan = new OleDbDataAdapter("DELETE FROM Cache;", cnn); dan.Fill(dss, "Cache"); dan.Dispose(); rtxt_StatisticsOnReadDLCs.Text = " Cleaned" + "\n" + rtxt_StatisticsOnReadDLCs.Text; } } } catch (System.IO.FileNotFoundException ee) { // To inform the user and continue is // sufficient for this demonstration. // Your application may require different behavior. Console.WriteLine(ee.Message); rtxt_StatisticsOnReadDLCs.Text = "Error cleaning Cleaned the CacheDB" + "\n" + rtxt_StatisticsOnReadDLCs.Text; //continue; } pB_ReadDLCs.Value = 0; pB_ReadDLCs.Maximum = 2 * 3; //jsonFiles.Length //UNPACK x3 psarcs foreach (var json in jsonFiles) { platformDLC = json.GetPlatform(); //Platform platformDLCP = platformDLC.platform.ToString(); if (json == pathDLC + "\\songs.psarc" || json == pathDLC + "\\rs1compatibilitydlc.psarc.edat" || json == pathDLC + "\\rs1compatibilitydisc.psarc.edat" || ((json == pathDLC + "\\rs1compatibilitydlc_p.psarc" || json == pathDLC + "\\rs1compatibilitydisc_p.psarc") && platformDLCP == "Pc") || ((json == pathDLC + "\\rs1compatibilitydlc_m.psarc" || json == pathDLC + "\\rs1compatibilitydisc_m.psarc") && platformDLCP == "Mac")) { rtxt_StatisticsOnReadDLCs.Text = "Decompressing " + ".... " + json + "\n" + rtxt_StatisticsOnReadDLCs.Text; pB_ReadDLCs.Increment(2); if (json == pathDLC + "\\songs.psarc") //RS14 RETAIL { inputFilePath = json; locat = "CACHE"; t = inputFilePath; if (!chbx_Additional_Manipulations.GetItemChecked(38)) //39. Use only unpacked songs already in the 0/dlcpacks folder { try { // UNPACK rtxt_StatisticsOnReadDLCs.Text = "Unpacking cache.psarc.... " + "\n" + rtxt_StatisticsOnReadDLCs.Text; if (File.Exists(pathDLC + "\\cache.psarc")) { unpackedDir = Packer.Unpack(pathDLC + "\\cache.psarc", txt_TempPath.Text + "\\0_dlcpacks\\temp", false, false, false); //Unpack cache.psarc for RS14 Official Retails songs rePACKING //check if platform is correctly identified, &if NOT, correct it var startI = new ProcessStartInfo(); startI.FileName = Path.Combine(AppWD, "7za.exe"); startI.WorkingDirectory = unpackedDir;// Path.GetDirectoryName(); var za = unpackedDir + "\\cache8.7z"; //if (!Directory.Exists(txt_TempPath.Text + "\\0_dlcpacks\\manifests")) di = Directory.CreateDirectory(txt_TempPath.Text + "\\0_dlcpacks\\manifests"); //if (!Directory.Exists(txt_TempPath.Text + "\\0_dlcpacks\\manifests\\songs")) di = Directory.CreateDirectory(txt_TempPath.Text + "\\0_dlcpacks\\manifests\\songs"); //File.Copy(hsanDir, txt_TempPath.Text + "\\0_dlcpacks\\manifests\\songs\\songs.hsan", true); startI.Arguments = String.Format(" x {0} -o{1}", za, unpackedDir.Replace("\\cache_Pc", "\\cache_Pc\\manipulated"));// + platformDLCP TempPath + "\\0_dlcpacks\\cache_pc\\ startI.UseShellExecute = true; startI.CreateNoWindow = false; //startInfo.RedirectStandardOutput = true; startInfo.RedirectStandardError = true; using (var DDC = new Process()) { DDC.StartInfo = startI; DDC.Start(); DDC.WaitForExit(1000 * 60 * 1); //wait 1min //if (DDC.ExitCode > 0) rtxt_StatisticsOnReadDLCs.Text = "Issues when packing rs1dlc DLC pack !" + "\n" + rtxt_StatisticsOnReadDLCs.Text; } var tmtpdir = unpackedDir.Replace("\\cache_Pc", "\\cache_Pc\\manipulated") + "\\audio\\ps3"; if (Directory.Exists(tmtpdir)) { renamedir(unpackedDir, unpackedDir.Replace("_Pc", "_ps3")); unpackedDir = unpackedDir.Replace("_Pc", "_ps3"); platformDLCP = "PS3"; } tmtpdir = unpackedDir.Replace("\\cache_Pc", "\\cache_Pc\\manipulated") + "\\audio\\mac"; if (Directory.Exists(tmtpdir)) { renamedir(unpackedDir, unpackedDir.Replace("_Pc", "_Mac")); unpackedDir = unpackedDir.Replace("_Pc", "_Mac"); platformDLCP = "Mac"; } //clear temp cache_Pc folder System.IO.DirectoryInfo downloadedMessageInfo = new DirectoryInfo(unpackedDir); foreach (DirectoryInfo dir in downloadedMessageInfo.GetDirectories()) { if (dir.Name == "manipulated") dir.Delete(true); } //move cache_xx to dlcpacks if (Directory.Exists(unpackedDir.Replace("\\0_dlcpacks\\temp", "\\0_dlcpacks"))) Directory.Delete(unpackedDir.Replace("\\0_dlcpacks\\temp", "\\0_dlcpacks")); renamedir(unpackedDir, unpackedDir.Replace("\\0_dlcpacks\\temp", "\\0_dlcpacks")); unpackedDir = unpackedDir.Replace("\\0_dlcpacks\\temp", "\\0_dlcpacks"); } //Process SONGS.PSARC rtxt_StatisticsOnReadDLCs.Text = "Unpacking songs.psarc.... " + "\n" + rtxt_StatisticsOnReadDLCs.Text; //if (platformDLCP == "PS3") unpackedDir = Packer.Unpack(inputFilePath, txt_TempPath.Text + "\\0_dlcpacks\\temp", false, false, false); //else unpackedDir = Packer.Unpack(inputFilePath, txt_TempPath.Text + "\\0_dlcpacks\\manipulated", true, false, false); //FIX for unpacking w the wrong folder extension //And unpacking of PS3 WEM if (Directory.Exists(unpackedDir + "\\songs\\bin\\ps3")) { //Convert WEM to OGG //if (platformDLCP == "PS3") //{ var startInfo = new ProcessStartInfo(); //var unpackedDir = HSAN.Substring(0, HSAN.IndexOf("\\manifests"));//unpackedDir = TempPath + "\\0_dlcpacks\\rs1compatibilitydisc_PS3"; startInfo.FileName = Path.Combine(AppWD, "packer.exe"); startInfo.WorkingDirectory = unpackedDir;// Path.GetDirectoryName(); //var t = TempPath + "\\0_dlcpacks\\manipulated\\rs1compatibilitydisc" + ((platfor == "PS3") ? "" : ((platfor == "Mac") ? "_m" : ((platfor == "Pc") ? "_p" : ""))) + ".psarc"; startInfo.Arguments = String.Format(" --unpack --version=RS2014 --platform={0} --output={1} --input={2} --decodeogg", platformDLCP, unpackedDir.Replace("songs_Pc", ""), inputFilePath);// + platformDLCP startInfo.UseShellExecute = true; startInfo.CreateNoWindow = true; //startInfo.RedirectStandardOutput = true; startInfo.RedirectStandardError = true; //if (!File.Exists(t)) using (var DDC = new Process()) { DDC.StartInfo = startInfo; DDC.Start(); DDC.WaitForExit(1000 * 60 * 15); //wait 15min //if (DDC.ExitCode > 0) rtxt_StatisticsOnReadDLCs.Text = "Issues when packing rs1dlc DLC pack !" + "\n" + rtxt_StatisticsOnReadDLCs.Text; } renamedir(unpackedDir, unpackedDir.Replace("_Pc", "_ps3")); unpackedDir = unpackedDir.Replace("_Pc", "_ps3"); platformDLCP = "PS3"; //} //Convert2OGG(unpackedDir + "\\Audio\\"+ (platformDLCP == "Pc" ? "windows" : platformDLCP), platformDLCP); //else unpackedDir = Packer.Unpack(inputFilePath, txt_TempPath.Text + "\\0_dlcpacks\\manipulated", true, false, false); } //elseif (platformDLCP == "PS3") ;//unpackedDir = Packer.Unpack(inputFilePath, txt_TempPath.Text + "\\0_dlcpacks\\manipulated", false, false, false); else unpackedDir = Packer.Unpack(inputFilePath, txt_TempPath.Text + "\\0_dlcpacks\\temp", true, false, false); if (Directory.Exists(unpackedDir + "\\songs\\bin\\macos")) { renamedir(unpackedDir, unpackedDir.Replace("_Pc", "_Mac")); unpackedDir = unpackedDir.Replace("_Pc", "_Mac"); platformDLCP = "Mac"; } //move cache_xx to dlcpacks if (Directory.Exists(unpackedDir.Replace("\\0_dlcpacks\\temp", "\\0_dlcpacks"))) Directory.Delete(unpackedDir.Replace("\\0_dlcpacks\\temp", "\\0_dlcpacks")); renamedir(unpackedDir, unpackedDir.Replace("\\0_dlcpacks\\temp", "\\0_dlcpacks")); unpackedDir = unpackedDir.Replace("\\0_dlcpacks\\temp", "\\0_dlcpacks"); //Directory.Move(unpackedDir ,unpackedDir.Replace("\\manipulated", "")); //unpackedDir = unpackedDir.Replace("\\manipulated",""); songshsanP = unpackedDir + "\\manifests\\songs\\songs.hsan"; } catch (Exception ex) { rtxt_StatisticsOnReadDLCs.Text = ex.Message + "problem at unpacking" + inputFilePath + "---" + txt_TempPath.Text + "\\0songs" + "...\n\n" + rtxt_StatisticsOnReadDLCs.Text; } } else { unpackedDir = txt_TempPath.Text + "\\0_dlcpacks\\songs_" + platformDLCP; songshsanP = unpackedDir + "\\manifests\\songs\\songs.hsan"; } rtxt_StatisticsOnReadDLCs.Text = "Processed cache.psarc & songs.psarc" + "\n" + rtxt_StatisticsOnReadDLCs.Text; } //repacking at the moment manually with psarc 1.4 and lzma ratio 0 else if (json == pathDLC + "\\rs1compatibilitydlc.psarc.edat" || (json == pathDLC + "\\rs1compatibilitydlc_p.psarc" && platformDLCP == "Pc") || (json == pathDLC + "\\rs1compatibilitydlc_m.psarc" && platformDLCP == "Mac")) //RS12 DLC { inputFilePath = json; locat = "COMPATIBILITY"; if (!chbx_Additional_Manipulations.GetItemChecked(38)) //39. Use only unpacked songs already in the 0/dlcpacks folder { try // UNPACK { unpackedDir = Packer.Unpack(inputFilePath, txt_TempPath.Text + "\\0_dlcpacks", false, false, false).Replace(".psarc", ""); ; } catch (Exception ex) { rtxt_StatisticsOnReadDLCs.Text = ex.Message + "problem at unpacking" + unpackedDir + "...\n\n" + rtxt_StatisticsOnReadDLCs.Text; } } else unpackedDir = txt_TempPath.Text + "\\0_dlcpacks\\rs1compatibilitydlc_" + platformDLCP; songshsanP = unpackedDir + "\\manifests\\songs_rs1dlc\\songs_rs1dlc.hsan"; rtxt_StatisticsOnReadDLCs.Text = "Repacking " + json + "2 use the internal/Browser Psarc Read function.... " + "\n" + rtxt_StatisticsOnReadDLCs.Text; try //rename folder so we can use the read browser function { //rename the songs_rs1dlc folder to songs to enable the read of Browser function to work renamedir(unpackedDir + "\\manifests\\songs_rs1dlc", unpackedDir + "\\manifests\\songs"); var startInfo = new ProcessStartInfo(); startInfo.FileName = Path.Combine(AppWD, "DLCManager\\psarc.exe"); startInfo.WorkingDirectory = unpackedDir;// Path.GetDirectoryName(); t = txt_TempPath.Text + "\\0_dlcpacks\\rs1compatibilitydlc.psarc"; startInfo.Arguments = String.Format(" create --zlib -N -o {0} {1}", t, unpackedDir);// + platformDLCP startInfo.UseShellExecute = true; startInfo.CreateNoWindow = true; //startInfo.RedirectStandardOutput = true; startInfo.RedirectStandardError = true; //if (!File.Exists(t)) using (var DDC = new Process()) { DDC.StartInfo = startInfo; DDC.Start(); DDC.WaitForExit(1000 * 60 * 5); //wait 5min if (DDC.ExitCode > 0) rtxt_StatisticsOnReadDLCs.Text = "Issues when packing rs1dlc DLC pack !" + "\n" + rtxt_StatisticsOnReadDLCs.Text; } //rename the songs_rs1dlc folder to songs to enable the read of Browser function to work renamedir(unpackedDir + "\\manifests\\songs", unpackedDir + "\\manifests\\songs_rs1dlc"); rtxt_StatisticsOnReadDLCs.Text = "renaming internal folder \n" + rtxt_StatisticsOnReadDLCs.Text; //Convert WEM to OGG //Convert2OGG(unpackedDir + "\\Audio\\"+platformDLCP, platformDLCP); } catch (Exception ex) { rtxt_StatisticsOnReadDLCs.Text = ex.Message + "problem at dir rename" + unpackedDir + "...\n\n" + rtxt_StatisticsOnReadDLCs.Text; } rtxt_StatisticsOnReadDLCs.Text = "Processed rs1compatibilitydlc.psarc" + "\n" + rtxt_StatisticsOnReadDLCs.Text; } else if (json == pathDLC + "\\rs1compatibilitydisc.psarc.edat" || (json == pathDLC + "\\rs1compatibilitydisc_p.psarc" && platformDLCP == "Pc") || (json == pathDLC + "\\rs1compatibilitydisc_m.psarc" && platformDLCP == "Mac")) //RS12 RETAIL { inputFilePath = json; locat = "RS1Retail"; if (!chbx_Additional_Manipulations.GetItemChecked(38)) //39. Use only unpacked songs already in the 0/dlcpacks folder { try // UNPACK { if (platformDLCP == "PS3") { //Packer.Unpack fails //unpackedDir = Packer.Unpack(inputFilePath, txt_TempPath.Text + "\\0_dlcpacks", false, false, false).Replace(".psarc", ""); var startInfo = new ProcessStartInfo(); //var unpackedDir = HSAN.Substring(0, HSAN.IndexOf("\\manifests"));//unpackedDir = TempPath + "\\0_dlcpacks\\rs1compatibilitydisc_PS3"; startInfo.FileName = Path.Combine(AppWD, "packer.exe"); startInfo.WorkingDirectory = unpackedDir;// Path.GetDirectoryName(); //var t = TempPath + "\\0_dlcpacks\\manipulated\\rs1compatibilitydisc" + ((platfor == "PS3") ? "" : ((platfor == "Mac") ? "_m" : ((platfor == "Pc") ? "_p" : ""))) + ".psarc"; startInfo.Arguments = String.Format(" --unpack --decodeogg --version=RS2014 --platform={0} --output={1} --input={2}", platformDLCP, txt_TempPath.Text + "\\0_dlcpacks",//unpackedDir.Replace("songs_Pc", ""), inputFilePath);// + platformDLCP startInfo.UseShellExecute = true; startInfo.CreateNoWindow = true; //startInfo.RedirectStandardOutput = true; startInfo.RedirectStandardError = true; //if (!File.Exists(t)) using (var DDC = new Process()) { DDC.StartInfo = startInfo; DDC.Start(); DDC.WaitForExit(1000 * 60 * 20); //wait 1min if (DDC.ExitCode > 0) rtxt_StatisticsOnReadDLCs.Text = "Issues when packing rs1dlc DLC pack !" + "\n" + rtxt_StatisticsOnReadDLCs.Text; } unpackedDir = txt_TempPath.Text + "\\0_dlcpacks\\rs1compatibilitydisc_PS3"; } else unpackedDir = Packer.Unpack(inputFilePath, txt_TempPath.Text + "\\0_dlcpacks", true, false, false); } catch (Exception ex) { rtxt_StatisticsOnReadDLCs.Text = ex.Message + "problem at unpacking" + unpackedDir + "...\n\n" + rtxt_StatisticsOnReadDLCs.Text; } } else unpackedDir = txt_TempPath.Text + "\\0_dlcpacks\\rs1compatibilitydisc_" + platformDLCP; songshsanP = unpackedDir + "\\manifests\\songs_rs1disc\\songs_rs1disc.hsan"; rtxt_StatisticsOnReadDLCs.Text = "Repacking " + json + " 2 use the internal/Browser Psarc Read function.... " + json + "\n" + rtxt_StatisticsOnReadDLCs.Text; try //rename folder so we can use the read browser function { //rename the songs_rs1dlc folder to songs to enable the read of Browser function to work renamedir(unpackedDir + "\\manifests\\songs_rs1disc", unpackedDir + "\\manifests\\songs"); var startInfo = new ProcessStartInfo(); startInfo.FileName = Path.Combine(AppWD, "DLCManager\\psarc.exe"); startInfo.WorkingDirectory = unpackedDir;// Path.GetDirectoryName(); t = txt_TempPath.Text + "\\0_dlcpacks\\rs1compatibilitydisc.psarc"; startInfo.Arguments = String.Format(" create --zlib -N -o {0} {1}", t, unpackedDir);// + platformDLCP startInfo.UseShellExecute = true; startInfo.CreateNoWindow = true; //startInfo.RedirectStandardOutput = true; startInfo.RedirectStandardError = true; //if (!File.Exists(t)) ; using (var DDC = new Process()) { DDC.StartInfo = startInfo; DDC.Start(); DDC.WaitForExit(1000 * 60 * 20); //wait 10min if (DDC.ExitCode > 0) rtxt_StatisticsOnReadDLCs.Text = "Issues when packing rs1disc pack !" + "\n" + rtxt_StatisticsOnReadDLCs.Text; //rename the songs_rs1dlc folder to songs to enable the read of Browser function to work renamedir(unpackedDir + "\\manifests\\songs", unpackedDir + "\\manifests\\songs_rs1disc"); rtxt_StatisticsOnReadDLCs.Text = "renaming internal folder \n" + rtxt_StatisticsOnReadDLCs.Text; //t = txt_TempPath.Text + "\\0_dlcpacks\\rs1compatibilitydisc_PS3.psarc"; //startInfo.Arguments = String.Format(" create --zlib -N -o {0} {1}", // t, // unpackedDir);// + platformDLCP //DDC.StartInfo = startInfo; DDC.Start(); DDC.WaitForExit(1000 * 60 * 10); //wait 10min //if (DDC.ExitCode > 0) rtxt_StatisticsOnReadDLCs.Text = "Issues when packing again rs1disc pack !" + "\n" + rtxt_StatisticsOnReadDLCs.Text; } //Convert WEM to OGG //Convert2OGG(unpackedDir + "\\Audio\\"+ (platformDLCP=="Pc"? "windows" : platformDLCP), platformDLCP); //Convert WEM to OGG //if psarc.exe fails if (platformDLCP == "PS3") { //commenting next line altough owrknig to use the official packer //Convert2OGG(unpackedDir + "\\Audio\\" + (platformDLCP == "Pc" ? "windows" : platformDLCP), platformDLCP); var unpackedDir1 = unpackedDir; var wemFiles = Directory.GetFiles(unpackedDir1, "*.wem", SearchOption.AllDirectories); var i = 0; foreach (var wem in wemFiles) { i++; //rtxt_StatisticsOnReadDLCs.Text = (rtxt_StatisticsOnReadDLCs.Text).Replace("Starting Decompressing WEMs " + (i - 1) + "/", "Starting Decompressing WEMs " + i + "/"); startInfo = new ProcessStartInfo(); startInfo.FileName = Path.Combine(AppWD, "ww2ogg.exe"); startInfo.WorkingDirectory = AppWD;// unpackedDir1;// Path.GetDirectoryName(); startInfo.Arguments = String.Format(" {0} -o {1} --pcb packed_codebooks_aoTuV_603.bin", wem, wem.Replace(".wem", ".ogg")); startInfo.UseShellExecute = false; startInfo.CreateNoWindow = true; //startInfo.RedirectStandardOutput = true; startInfo.RedirectStandardError = true; if (File.Exists(wem)) using (var DDC = new Process()) { DDC.StartInfo = startInfo; DDC.Start(); DDC.WaitForExit(1000 * 30 * 60); //wait 30min //if (DDC.ExitCode > 0) rtxt_StatisticsOnReadDLCs.Text = "Issues when decrypting wem files !" + "\n" + rtxt_StatisticsOnReadDLCs.Text; //Console.WriteLine("{0} is active: {1}", DDC.Id, !DDC.HasExited); //DDC.Kill(); } } // startInfo = new ProcessStartInfo(); // //var unpackedDir = HSAN.Substring(0, HSAN.IndexOf("\\manifests"));//unpackedDir = TempPath + "\\0_dlcpacks\\rs1compatibilitydisc_PS3"; // startInfo.FileName = Path.Combine(AppWD, "packer.exe"); // startInfo.WorkingDirectory = unpackedDir;// Path.GetDirectoryName(); // //var t = TempPath + "\\0_dlcpacks\\manipulated\\rs1compatibilitydisc" + ((platfor == "PS3") ? "" : ((platfor == "Mac") ? "_m" : ((platfor == "Pc") ? "_p" : ""))) + ".psarc"; // startInfo.Arguments = String.Format(" --unpack --decodeogg --version=RS2014 --platform={0} --output={1} --input={2}", // platformDLCP, // txt_TempPath.Text + "\\0_dlcpacks",//unpackedDir.Replace("songs_Pc", ""), // t);// + platformDLCP // startInfo.UseShellExecute = true; startInfo.CreateNoWindow = true; //startInfo.RedirectStandardOutput = true; startInfo.RedirectStandardError = true; // //if (!File.Exists(t)) // using (var DDC = new Process()) // { // DDC.StartInfo = startInfo; DDC.Start(); DDC.WaitForExit(1000 * 60 * 20); //wait 1min // //if (DDC.ExitCode > 0) rtxt_StatisticsOnReadDLCs.Text = "Issues when packing rs1dlc DLC pack !" + "\n" + rtxt_StatisticsOnReadDLCs.Text; // } // renamedir(txt_TempPath.Text + "\\0_dlcpacks", txt_TempPath.Text + "\\0_dlcpacks\\rs1compatibilitydisc_PS3"); // //renamedir(unpackedDir + "\\manifests\\songs", unpackedDir + "\\manifests\\songs_rs1disc"); // unpackedDir = txt_TempPath.Text + "\\0_dlcpacks\\rs1compatibilitydisc_PS3"; } //else unpackedDir = Packer.Unpack(inputFilePath, txt_TempPath.Text + "\\0_dlcpacks\\", true, false, false); } catch (Exception ex) { rtxt_StatisticsOnReadDLCs.Text = ex.Message + "problem at dir rename" + unpackedDir + "...\n\n" + rtxt_StatisticsOnReadDLCs.Text; } rtxt_StatisticsOnReadDLCs.Text = "Processed rs1compatibilitydisc.psarc" + "\n" + rtxt_StatisticsOnReadDLCs.Text; } else continue; //var inputFilePath = txt_RocksmithDLCPath.Text + "\\songs.psarc"; //IList<RocksmithToolkitLib.Song2014ToTab.SongInfoShort> songListShort = null; //IList<SongInfoShort> songListShort = null; Console.WriteLine("Opening archive {0} ...", inputFilePath); Console.WriteLine(); //Populate DB rtxt_StatisticsOnReadDLCs.Text = "Populating CACHE DB" + "\n" + rtxt_StatisticsOnReadDLCs.Text; var pic = ""; try { // var t = inputFilePath;//if (!File.Exists(inputFilePath)) //if (json == txt_RocksmithDLCPath.Text + "\\rs1compatibilitydlc.psarc.edat") inputFilePath= "C:\\GitHub\\rocksmith-custom-song-toolkit\\RocksmithTookitGUI\\bin\\Debug\\edat\\PS3.psarc"; var browser = new PsarcBrowser(t); //inputFilePath = t; var songList = browser.GetSongList(); var toolkitInfo = browser.GetToolkitInfo(); //if (songshsanP.Contains("songs_rs1dlc")) File.Move(unpackedDir + "\\manifests\\songs", unpackedDir + "\\manifests\\songs_rs1dlc"); var AudioP = ""; var AudioPP = ""; var AudioP1 = ""; var AudioPP1 = ""; foreach (var song in songList) { DataSet dsx = new DataSet(); DataSet dsdx = new DataSet(); using (OleDbConnection cgn = new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + DBb_Path)) { OleDbDataAdapter dah = new OleDbDataAdapter("SELECT EncryptedID from WEM2OGGCorrespondence AS O WHERE Identifier=\"" + song.Identifier + "\"", cgn); dah.Fill(dsx, "WEM2OGGCorrespondence"); } AudioP1 = (dsx.Tables[0].Rows.Count > 0) ? dsx.Tables[0].Rows[0].ItemArray[0].ToString() : ""; dsx.Dispose(); using (OleDbConnection cvn = new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + DBb_Path)) { OleDbDataAdapter dbh = new OleDbDataAdapter("SELECT EncryptedID from WEM2OGGCorrespondence AS O WHERE Identifier=\"" + song.Identifier + "_preview\"", cvn); dbh.Fill(dsdx, "WEM2OGGCorrespondence"); } AudioPP1 = (dsdx.Tables[0].Rows.Count > 0) ? dsdx.Tables[0].Rows[0].ItemArray[0].ToString() : ""; if (locat == "RS1Retail") { pic = songshsanP.Replace("\\manifests\\songs_rs1disc\\songs_rs1disc.hsan", "\\gfxassets\\album_art\\album_" + song.Identifier + "_256.dds"); AudioP = songshsanP.Replace("\\manifests\\songs_rs1disc\\songs_rs1disc.hsan", "\\audio\\" + (platformDLCP == "PS3" ? platformDLCP : (platformDLCP == "Pc" ? "windows" : platformDLCP)) + "\\") + AudioP1 + (platformDLCP == "PS3" ? ".ogg" : "_fixed.ogg"); AudioPP = songshsanP.Replace("\\manifests\\songs_rs1disc\\songs_rs1disc.hsan", "\\audio\\" + (platformDLCP == "PS3" ? platformDLCP : (platformDLCP == "Pc" ? "windows" : platformDLCP)) + "\\") + AudioPP1 + (platformDLCP == "PS3" ? ".ogg" : "_fixed.ogg"); } else if (locat == "COMPATIBILITY") { pic = songshsanP.Replace("\\manifests\\songs_rs1dlc\\songs_rs1dlc.hsan", "\\gfxassets\\album_art\\album_" + song.Identifier + "_256.dds"); AudioP = (songshsanP.Replace("\\manifests\\songs_rs1dlc\\songs_rs1dlc.hsan", "\\audio\\" + (platformDLCP == "PS3" ? platformDLCP : (platformDLCP == "Pc" ? "windows" : platformDLCP)) + "\\") + AudioP1 + "_fixed.ogg").Replace("rs1compatibilitydlc", "songs").Replace("_p_Pc", "_Pc").Replace("_p_Pc", "_Mac").Replace("m_Mac", "Mac"); AudioPP = (songshsanP.Replace("\\manifests\\songs_rs1dlc\\songs_rs1dlc.hsan", "\\audio\\" + (platformDLCP == "PS3" ? platformDLCP : (platformDLCP == "Pc" ? "windows" : platformDLCP)) + "\\") + AudioPP1 + "_fixed.ogg").Replace("rs1compatibilitydlc", "songs").Replace("_p_Pc", "_Pc").Replace("_p_Pc", "_Mac").Replace("m_Mac", "Mac"); } else if (locat == "CACHE") { pic = songshsanP.Replace("\\manifests\\songs\\songs.hsan", "\\gfxassets\\album_art\\album_" + song.Identifier + "_256.dds"); AudioP = (songshsanP.Replace("\\manifests\\songs\\songs.hsan", "\\audio\\" + (platformDLCP == "PS3" ? platformDLCP : (platformDLCP == "Pc" ? "windows" : platformDLCP)) + "\\") + AudioP1 + "_fixed.ogg"); AudioPP = (songshsanP.Replace("\\manifests\\songs\\songs.hsan", "\\audio\\" + (platformDLCP == "PS3" ? platformDLCP : (platformDLCP == "Pc" ? "windows" : platformDLCP)) + "\\") + AudioPP1 + "_fixed.ogg"); } //convert to png ExternalApps.Dds2Png(pic); //dtx.Dispose(); //var f = ""; using (OleDbConnection cn = new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + DBb_Path)) { DataSet dtx = new DataSet(); OleDbDataAdapter da = new OleDbDataAdapter("SELECT ID from Cache AS O WHERE Platform=\"" + platformDLCP + "\" AND Identifier=\"" + song.Identifier.ToString() + "\"", cn); da.Fill(dtx, "Cache"); var aa = dtx.Tables[0].Rows.Count; if (dtx.Tables[0].Rows.Count == 0) //If this record isn't already in the DB...add it using (OleDbConnection cnn = new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + DBb_Path)) { var commands = cnn.CreateCommand(); commands.CommandText = "INSERT INTO Cache("; //command.CommandText += "ID, "; commands.CommandText += "Identifier, "; commands.CommandText += "Artist, "; commands.CommandText += "ArtistSort, "; commands.CommandText += "Album, "; commands.CommandText += "Title, "; commands.CommandText += "AlbumYear, "; commands.CommandText += "Arrangements, "; commands.CommandText += "Removed, "; commands.CommandText += "AlbumArtPath, "; commands.CommandText += "PSARCName, "; commands.CommandText += "SongsHSANPath, "; commands.CommandText += "Platform, "; commands.CommandText += "AudioPath, "; commands.CommandText += "AudioPreviewPath "; commands.CommandText += ") VALUES (@param2,@param3,@param4,@param5,@param6,@param7,@param8,@param9,@param10,@param11,@param12,@param13,@param14,@param15"; ////@param1, commands.CommandText += ")"; //command.Parameters.AddWithValue("@param1", ID); commands.Parameters.AddWithValue("@param2", song.Identifier); commands.Parameters.AddWithValue("@param3", song.Artist); commands.Parameters.AddWithValue("@param4", song.ArtistSort); commands.Parameters.AddWithValue("@param5", song.Album); commands.Parameters.AddWithValue("@param6", song.Title); commands.Parameters.AddWithValue("@param7", song.Year); commands.Parameters.AddWithValue("@param8", string.Join(", ", song.Arrangements)); commands.Parameters.AddWithValue("@param9", "Yes"); commands.Parameters.AddWithValue("@param10", pic.Replace(".dds", ".png")); commands.Parameters.AddWithValue("@param11", locat); commands.Parameters.AddWithValue("@param12", songshsanP); commands.Parameters.AddWithValue("@param13", platformDLCP); commands.Parameters.AddWithValue("@param14", AudioP); commands.Parameters.AddWithValue("@param15", AudioPP); //EXECUTE SQL/INSERT try { commands.CommandType = CommandType.Text; cnn.Open(); commands.ExecuteNonQuery(); //rtxt_StatisticsOnReadDLCs.Text = String.Format("Saving: [{0}] = {1} - {2} ", song.Identifier, // song.Artist, song.Title) + "\n" + rtxt_StatisticsOnReadDLCs.Text;//({3}, {4}) {{{5}}//, song.Album, song.Year,string.Join(", ", song.Arrangements) } catch (Exception ex) { MessageBox.Show(ex.Message, MESSAGEBOX_CAPTION, MessageBoxButtons.OK, MessageBoxIcon.Error); MessageBox.Show("Can not open Cache DB connection in Cache Edit screen ! " + DBb_Path + "-" + commands.CommandText); throw; } finally { if (connection != null) connection.Close(); } rtxt_StatisticsOnReadDLCs.Text += Environment.NewLine; } dtx.Clear(); dtx.Dispose(); dtx.Reset(); } } //level the maxdiff overall setting in the xml //var m = 1; var j = 0; //for (m = 1; m <= j; m++) //{ // header = header.Replace("maxDifficulty=\"" + m + "\"", "maxDifficulty=\"0\""); //} //foreach (var song in toConvert) //{ // //var score = new Score(); // // get all default or user specified arrangements for the song // var arrangements = song.Arrangements; // Console.WriteLine("Converting song " + song.Identifier + "..."); // foreach (var arr in arrangements) // { // ;// var arrangement = browser.GetArrangement(song..Identifier, arr); // // get maximum difficulty for the arrangement // var mf = new ManifestFunctions(GameVersion.RS2014); // ;//int maxDif = mf.GetMaxDifficulty(arrangement); // //if (allDif) // create seperate file for each difficulty // //{ // // for (int difLevel = 0; difLevel <= maxDif; difLevel++) // // { // // //ExportArrangement(score, arrangement, difLevel, inputFilePath, toolkitInfo); // // //Console.WriteLine("Difficulty Level: {0}", difLevel); // // //var baseFileName = CleanFileName( // // // String.Format("{0} - {1}", score.Artist, score.Title)); // // //baseFileName += String.Format(" ({0})", arr); // // //baseFileName += String.Format(" (level {0:D2})", difLevel); // // //SaveScore(score, baseFileName, outputDir, outputFormat); // // //// remember to remove the track from the score again // // //score.Tracks.Clear(); // // } // //} // //else // combine maximum difficulty arrangements into one file // //{ // // Console.WriteLine(String.Format("Maximum Difficulty Level: {0}", maxDif)); // // ExportArrangement(score, arrangement, maxDif, inputFilePath, toolkitInfo); // //} // } // //if (!allDif) // only maximum difficulty // //{ // // var baseFileName = CleanFileName( // // String.Format("{0} - {1}", score.Artist, score.Title)); // // SaveScore(score, baseFileName, outputDir, outputFormat); // //} //} // Console.WriteLine(); } catch (Exception ex) { MessageBox.Show(ex.Message, MESSAGEBOX_CAPTION, MessageBoxButtons.OK, MessageBoxIcon.Error); MessageBox.Show("Can not Load " + platformDLCP); Console.WriteLine("Error encountered:"); Console.WriteLine(ex.Message); } }//END no cahce.psarc to be decompressed } rtxt_StatisticsOnReadDLCs.Text = "Ending Retail Songs processing ...." + DateTime.Now + "\n" + rtxt_StatisticsOnReadDLCs.Text; Cache frm = new Cache(DBb_Path, txt_TempPath.Text, pathDLC, chbx_Additional_Manipulations.GetItemChecked(39), chbx_Additional_Manipulations.GetItemChecked(40)); frm.Show(); }