public override bool Open() { string backupFolder = Path.Combine(file.Directory.FullName, "BackupSDS"); string extractedFolder = Path.Combine(file.Directory.FullName, "extracted"); // Only create backups if enabled. if (ToolkitSettings.bBackupEnabled) { // We should backup file before unpacking.. if (!Directory.Exists(backupFolder)) { Directory.CreateDirectory(backupFolder); } // Place the backup in the folder recently created string time = string.Format("{0}_{1}_{2}_{3}_{4}", DateTime.Now.TimeOfDay.Hours, DateTime.Now.TimeOfDay.Minutes, DateTime.Now.Day, DateTime.Now.Month, DateTime.Now.Year); string filename = ToolkitSettings.AddTimeDataBackup == true?file.Name.Insert(file.Name.Length - 4, "_" + time) : file.Name; File.Copy(file.FullName, Path.Combine(backupFolder, filename), true); } // Begin the unpacking process. Log.WriteLine("Opening SDS: " + file.Name); ArchiveFile archiveFile; using (var input = File.OpenRead(file.FullName)) { using (Stream data = ArchiveEncryption.Unwrap(input)) { archiveFile = new ArchiveFile(); archiveFile.Deserialize(data ?? input); } } Log.WriteLine("Successfully unwrapped compressed data"); archiveFile.SaveResources(file); if (File.Exists(file.FullName + ".patch") && GameStorage.Instance.GetSelectedGame().GameType == GamesEnumerator.MafiaII_DE) { DialogResult result = MessageBox.Show("Detected Patch file. Would you like to unpack?", "Toolkit", MessageBoxButtons.YesNo, MessageBoxIcon.Question); if (result == DialogResult.Yes) { archiveFile.ExtractPatch(new FileInfo(file.FullName + ".patch")); } } return(true); }