Esempio n. 1
0
        private void GetFiles(string file)
        {
            if (!File.Exists(file))
            {
                return;
            }

            string xPath;

            if (folderTree.SelectedNode != folderTree.Nodes[0])
            {
                xPath = ((CFolderEntry)folderTree.SelectedNode.Tag).Path + "/" + Path.GetFileName(file);
            }
            else
            {
                xPath = Path.GetFileName(file);
            }

            var fileexists = xsession.GetFile(xPath);

            if (fileexists == null)
            {
                if (Path.GetExtension(file) == ".mogg")
                {
                    Tools.WriteOutData(Tools.DeObfM(File.ReadAllBytes(file)), file);
                    moggs.Add(file);
                }

                if (xsession.AddFile(file, xPath))
                {
                    GetSelFiles((CFolderEntry)folderTree.SelectedNode.Tag);
                    btnCreate.Enabled = true;
                    return;
                }

                var ent   = xsession.GetFile(xPath);
                var xitem = new ListViewItem(ent.Name)
                {
                    Tag = ent
                };
                fileList.Items.Add(xitem);
                GetSelFiles((CFolderEntry)folderTree.SelectedNode.Tag);
            }
            else
            {
                MessageBox.Show("File with name '" + Path.GetFileName(file) +
                                "' already exists\nTry deleting the existing file first", Text,
                                MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
            }
        }
Esempio n. 2
0
        private void extractFileToolStripMenuItem_Click(object sender, EventArgs e)
        {
            if (fileList.SelectedIndices.Count == 0)
            {
                return;
            }

            var savedir = Path.GetDirectoryName(xPackage.FileNameLong);

            for (var i = 0; i < fileList.SelectedItems.Count; i++)
            {
                var xent = (FileEntry)fileList.SelectedItems[i].Tag;
                if (xent == null)
                {
                    Log("Error extracting " + xent.Name);
                    Enabled = true;
                    return;
                }

                var extension = Path.GetExtension(xent.Name);
                if (extension != "")
                {
                    extension = extension.Substring(1).ToUpper() + " Files|*" + extension;
                }

                var sfd = new SaveFileDialog
                {
                    Filter           = extension,
                    InitialDirectory = savedir,
                    FileName         = Path.GetFileNameWithoutExtension(xent.Name)
                };
                if (sfd.ShowDialog() != DialogResult.OK || string.IsNullOrWhiteSpace(sfd.FileName))
                {
                    Log("Extracting cancelled by user");
                    Enabled = true;
                    return;
                }
                savedir             = Path.GetDirectoryName(sfd.FileName);
                Tools.CurrentFolder = savedir;
                Enabled             = false;
                Log("Extracting " + xent.Name);
                if (!xent.ExtractToFile(sfd.FileName))
                {
                    Log("Error extracting " + xent.Name);
                    Enabled = true;
                    return;
                }

                if (Path.GetExtension(sfd.FileName) == ".mogg")
                {
                    Tools.WriteOutData(Tools.ObfM(File.ReadAllBytes(sfd.FileName)), sfd.FileName);
                }
                Log("File " + xent.Name + " extracted successfully");
            }
            Enabled = true;
        }
Esempio n. 3
0
        private bool ExtractFile(string extension, bool sublevel, string internalname, string rename, bool keep = false)
        {
            if (xPackage == null || !xPackage.ParseSuccess)
            {
                return(false);
            }

            var outputfolder = txtFolder.Text + "\\" + (organizeFilesByType.Checked ? (extension == "mid" ? "midi" : extension) + "_files\\" : "");
            var ext          = "." + extension;
            var dir          = "songs/" + internalname + (sublevel ? "/gen/" : "/") + internalname;
            var file         = dir + (keep ? "_keep" : "") + ext;

            var xfile = xPackage.GetFile(file);

            if (xfile == null)
            {
                Log("Could not find " + extension.ToUpper() + " file inside " + Path.GetFileName(file));
                return(false);
            }
            try
            {
                var newfile = outputfolder + rename + (keep && !removekeepFromPNGXBOXFiles.Checked ? "_keep" : "") + ext;
                extension = extension.ToLowerInvariant() == "mid" ? "MIDI" : extension.ToUpper();

                Log("Extracting " + extension + " file " + Path.GetFileName(newfile));

                if (!Directory.Exists(outputfolder))
                {
                    Directory.CreateDirectory(outputfolder);
                }

                Tools.DeleteFile(newfile);
                if (xfile.ExtractToFile(newfile))
                {
                    if (Path.GetExtension(newfile) == ".mogg")
                    {
                        Tools.WriteOutData(Tools.ObfM(File.ReadAllBytes(newfile)), newfile);
                    }
                    Log("File " + rename + ext + " extracted successfully");
                }
                else
                {
                    Log("Extracting file " + rename + ext + " failed");
                }
            }
            catch (Exception ex)
            {
                Log("There was an error extracting file " + rename + ext);
                Log("The error says: " + ex.Message);
                return(false);
            }
            return(true);
        }
Esempio n. 4
0
        private bool ProcessFiles()
        {
            var counter = 0;
            var success = 0;

            foreach (var file in inputFiles.Where(File.Exists).TakeWhile(file => !backgroundWorker1.CancellationPending))
            {
                try
                {
                    if (VariousFunctions.ReadFileType(file) != XboxFileType.STFS)
                    {
                        continue;
                    }
                    Song.NewSong();
                    Song.ReplaceGenreWithSub = useSubgenreInsteadOfGenreToolStripMenuItem.Checked;

                    try
                    {
                        if (!Directory.Exists(PSFolder))
                        {
                            Directory.CreateDirectory(PSFolder);
                        }
                        counter++;
                        Parser.ExtractDTA(file);
                        Parser.ReadDTA(Parser.DTA);
                        if (Parser.Songs.Count > 1)
                        {
                            Log("File " + Path.GetFileName(file) + " is a pack, try dePACKing first, skipping...");
                            continue;
                        }
                        if (!Parser.Songs.Any())
                        {
                            Log("There was an error processing the songs.dta file");
                            continue;
                        }
                        if (loadDTA())
                        {
                            Log("Loaded and processed songs.dta file for song #" + counter + " successfully");
                            Log("Song #" + counter + " is " + Song.Artist + " - " + Song.Name);
                        }
                        else
                        {
                            return(false);
                        }

                        var songfolder = PSFolder + Tools.CleanString(Song.Artist, false) + " - " + Tools.CleanString(Song.Name, false) + "\\";
                        if (!Directory.Exists(songfolder))
                        {
                            Directory.CreateDirectory(songfolder);
                        }
                        var internal_name = Parser.Songs[0].InternalName;

                        var xPackage = new STFSPackage(file);
                        if (!xPackage.ParseSuccess)
                        {
                            Log("Failed to parse '" + Path.GetFileName(file) + "'");
                            Log("Skipping this file");
                            continue;
                        }
                        var xArt = xPackage.GetFile("songs/" + internal_name + "/gen/" + internal_name + "_keep.png_xbox");
                        if (xArt != null)
                        {
                            var newart = songfolder + "album.png_xbox";
                            if (xArt.ExtractToFile(newart))
                            {
                                Log("Extracted album art file " + internal_name + "_keep.png_xbox successfully");
                                fromXbox(newart);
                            }
                            else
                            {
                                Log("There was a problem extracting the album art file");
                            }
                        }
                        else
                        {
                            Log("WARNING: Did not find album art file in that CON file");
                        }
                        var xMIDI = xPackage.GetFile("songs/" + internal_name + "/" + internal_name + ".mid");
                        if (xMIDI != null)
                        {
                            var newmidi = songfolder + "notes.mid";
                            if (xMIDI.ExtractToFile(newmidi))
                            {
                                Log("Extracted MIDI file " + internal_name + ".mid successfully");
                                ProcessMidi(newmidi);
                            }
                            else
                            {
                                Log("There was a problem extracting the MIDI file");
                                Log("Skipping this song...");
                                xPackage.CloseIO();
                                continue;
                            }
                        }
                        else
                        {
                            Log("ERROR: Did not find a MIDI file in that CON file!");
                            Log("Skipping this song...");
                            xPackage.CloseIO();
                            continue;
                        }
                        var xMOGG = xPackage.GetFile("songs/" + internal_name + "/" + internal_name + ".mogg");
                        if (xMOGG != null)
                        {
                            var newmogg = songfolder + internal_name + ".mogg";
                            if (radioSeparate.Checked)
                            {
                                xPackage.CloseIO();
                                SeparateAudio(file, newmogg, songfolder);
                            }
                            else if (radioDownmix.Checked)
                            {
                                xPackage.CloseIO();
                                DownMixAudio(file, songfolder);
                            }
                            else
                            {
                                var msg = "Extracting audio file " + (radioAudacity.Checked ? "to send to Audacity" : "and leaving it as is");
                                Log(msg);
                                var mData = xMOGG.Extract();
                                if (mData != null && mData.Length > 0)
                                {
                                    Log("Successfully extracted audio file '" + Path.GetFileName(newmogg) + "'");
                                    if (radioAudacity.Checked)
                                    {
                                        Log("Sending audio file to Audacity now");
                                        Tools.DecM(mData, false, false, DecryptMode.ToFile, newmogg);
                                        Log(Tools.SendtoAudacity(newmogg));
                                    }
                                    else
                                    {
                                        Tools.WriteOutData(Tools.ObfM(mData), newmogg);
                                    }
                                }
                                else
                                {
                                    Log("There was a problem extracting the audio file");
                                    Log("Skipping this song...");
                                    xPackage.CloseIO();
                                    continue;
                                }
                            }
                        }
                        else
                        {
                            Log("ERROR: Did not find an audio file in that CON file!");
                            Log("Skipping this song...");
                            xPackage.CloseIO();
                            continue;
                        }
                        xPackage.CloseIO();

                        if (!Directory.Exists(songfolder))
                        {
                            Directory.CreateDirectory(songfolder);
                        }
                        Song.WriteINIFile(songfolder, !chkNoC3.Checked);

                        var banner = Application.StartupPath + "\\res\\phaseshift\\banner.png";
                        if (File.Exists(banner) && !chkNoC3.Checked)
                        {
                            Tools.DeleteFile(songfolder + "banner.png");
                            File.Copy(banner, songfolder + "banner.png");
                        }
                        var icon = Application.StartupPath + "\\res\\phaseshift\\c3.png";
                        if (File.Exists(icon) && !chkNoC3.Checked)
                        {
                            Tools.DeleteFile(songfolder + "ccc.png");
                            File.Copy(icon, songfolder + "ccc.png");
                        }

                        success++;
                        if (!chkRAR.Checked || backgroundWorker1.CancellationPending)
                        {
                            continue;
                        }
                        var archive = Path.GetFileName(file);
                        archive = archive.Replace(" ", "").Replace("-", "_").Replace("\\", "").Replace("'", "").Replace(",", "").Replace("_rb3con", "");
                        archive = Tools.CleanString(archive, false);
                        archive = PSFolder + archive + "_ps.rar";

                        var arg = "a -m5 -ep1 -r \"" + archive + "\" \"" + songfolder.Substring(0, songfolder.Length - 1) + "\"";
                        Log("Creating RAR archive");

                        Log(Tools.CreateRAR(rar, archive, arg)? "Created RAR archive successfully" : "RAR archive creation failed");
                    }
                    catch (Exception ex)
                    {
                        Log("There was an error: " + ex.Message);
                        Log("Attempting to continue with the next file");
                    }
                }
                catch (Exception ex)
                {
                    Log("There was a problem accessing that file");
                    Log("The error says: " + ex.Message);
                }
            }
            Log("Successfully processed " + success + " of " + counter + " files");
            return(true);
        }