private void saveButton_Click(object sender, EventArgs e) { if (!Directory.GetFiles(_currentSavePath, "*", SearchOption.TopDirectoryOnly).Any()) { MessageBox.Show(Resources.Nothing_to_save, Resources.Nothing, MessageBoxButtons.OK, MessageBoxIcon.Information); return; } if (string.IsNullOrWhiteSpace(saveNameBox.Text)) { MessageBox.Show(Resources.Name_of_save, Resources.No_save, MessageBoxButtons.OK, MessageBoxIcon.Error); saveNameBox.Focus(); return; } var saveDir = saveNameBox.Text; if (savesList.Items.OfType <ListViewItem>().Any(l => l.Text == saveNameBox.Text)) { var save = savesList.Items.OfType <ListViewItem>().Single(l => l.Text == saveNameBox.Text); var removeGroup = false; if (File.ReadAllText(Path.Combine(_currentSavePath, "undertale.ini")) .IndexOf($"Name=\"{((SaveModel)save.Tag).CharacterName}\"", StringComparison.Ordinal) >= 0) { if (MessageBox.Show(Resources.Overwrite_confirmation, Resources.Confirmation_title, MessageBoxButtons.YesNo, MessageBoxIcon.Warning) == DialogResult.No) { return; } } else { if (MessageBox.Show(Resources.Overwrite_another_character, Resources.Confirmation_title, MessageBoxButtons.YesNo, MessageBoxIcon.Warning) == DialogResult.No) { return; } removeGroup = true; } Directory.Delete(((SaveModel)save.Tag).Path, true); savesList.Items.Remove(save); if (removeGroup) { var group = _groups[((SaveModel)save.Tag).CharacterName]; _groups.Remove(((SaveModel)save.Tag).CharacterName); savesList.Groups.Remove(group); } } var currentFiles = Directory.GetFiles(_currentSavePath, "*", SearchOption.TopDirectoryOnly); if (Directory.Exists(Path.Combine(_savesPath, saveDir))) { Directory.Delete(Path.Combine(_savesPath, saveDir), true); } Directory.CreateDirectory(Path.Combine(_savesPath, saveDir)); foreach (var file in currentFiles) { File.Copy(file, Path.Combine(_savesPath, saveDir, Path.GetFileName(file)), true); } var charRegex = new Regex("Name=\"([A-Za-z]+)\""); var model = new SaveModel { CharacterName = charRegex.Match(File.ReadAllText(Path.Combine(_currentSavePath, "undertale.ini"))).Groups[1].Value, Path = Path.Combine(_savesPath, saveDir), Name = saveDir, Date = DateTime.Now }; File.WriteAllText(Path.Combine(_savesPath, saveDir, $"{saveDir}.uts"), JsonConvert.SerializeObject(model)); if (!_groups.ContainsKey(model.CharacterName)) { var group = new ListViewGroup(model.CharacterName); savesList.Groups.Add(group); _groups.Add(model.CharacterName, group); } savesList.Items.Add(new ListViewItem(_groups[model.CharacterName]) { Text = model.Name, SubItems = { model.Date.ToString("dd.MM.yyyy HH:mm") }, Tag = model }); }
private void convertButton_Click(object sender, EventArgs e) { if (searchOldSavesDialog.ShowDialog() == DialogResult.Cancel) { return; } RenameForm renameForm = null; var charRegex = new Regex("Name=\"([A-Za-z]+)\""); foreach (var file in Directory.GetFiles(searchOldSavesDialog.SelectedPath, "*.undertale", SearchOption.AllDirectories)) { var saveName = Path.GetFileNameWithoutExtension(file); if (CheckExist(saveName)) { if (MessageBox.Show(Resources.Save_exist, Resources.Conflict, MessageBoxButtons.YesNo, MessageBoxIcon.Warning) == DialogResult.No) { continue; } if (renameForm == null) { renameForm = new RenameForm(); } var counter = 1; var suggestedSaveName = $"{saveName} ({counter})"; while (File.Exists(Path.Combine(_savesPath, suggestedSaveName, $"{suggestedSaveName}.uts"))) { counter++; suggestedSaveName = $"{saveName} ({counter})"; } renameForm.SaveName = suggestedSaveName; if (renameForm.ShowDialog(this) == DialogResult.Cancel) { continue; } saveName = renameForm.SaveName; } var saveDir = Path.Combine(_savesPath, saveName); if (Directory.Exists(saveDir)) { Directory.Delete(saveDir, true); } Directory.CreateDirectory(saveDir); foreach (var oldFile in Directory.EnumerateFiles(Path.GetDirectoryName(file)).Where(f => Path.GetExtension(f) != ".undertale")) { File.Copy(oldFile, Path.Combine(_savesPath, saveName, Path.GetFileName(oldFile)), true); } var model = new SaveModel { Path = saveDir, CharacterName = charRegex.Match(File.ReadAllText(Path.Combine(_savesPath, saveName, "undertale.ini"))).Groups[1] .Value, Name = saveName, Date = File.GetCreationTime(file) }; File.WriteAllText(Path.Combine(_savesPath, saveName, $"{saveName}.uts"), JsonConvert.SerializeObject(model)); if (!_groups.ContainsKey(model.CharacterName)) { var group = new ListViewGroup(model.CharacterName); savesList.Groups.Add(group); _groups.Add(model.CharacterName, group); } savesList.Items.Add(new ListViewItem(_groups[model.CharacterName]) { Text = model.Name, SubItems = { model.Date.ToString("dd.MM.yyyy HH:mm") }, Tag = model }); } renameForm?.Dispose(); }