コード例 #1
0
        private void Ok()
        {
            var entry = new EntryModel
            {
                Platform    = Platform,
                Path        = Path,
                Flags       = Flags,
                IsExpansion = IsExpansion
            };

            if (string.IsNullOrWhiteSpace(Platform) || string.IsNullOrWhiteSpace(Path) ||
                !_entryManager.IsRootDirectoryEqualToOthers(entry) || _pathBuilder.ContainsInvalidCharacters(entry.Platform))
            {
                MessageBox.Show("Please make sure all fields are populated, root path should match the rest of your entries (.exe can vary), and no invalid characters.");
            }
            else
            {
                _entryManager.Add(entry);
                _entryManager.SaveEntries();

                AddedEntry = entry;
            }

            ResetUI();
        }
コード例 #2
0
        private void Ok()
        {
            if (string.IsNullOrWhiteSpace(CurrentEntry.Platform) || string.IsNullOrWhiteSpace(CurrentEntry.Path) ||
                !_entryManager.IsRootDirectoryEqualToOthers(CurrentEntry) ||
                _pathBuilder.ContainsInvalidCharacters(CurrentEntry.Platform))
            {
                MessageBox.Show("Unable to change your Entry! Please make sure all fields are:\n\n" +
                                "- Populated (Flags are optional)\n" +
                                "- Path should match the rest of your Entries (.exe can vary)\n" +
                                "- No invalid characters\n\n" +
                                "If you have moved Cactus to a new machine, please manually edit the Entries.json and adjust all your paths accordingly.");
                ReverseChanges();
                return;
            }

            // If the oldEntry's platform is null, that means that the user
            // made a copy of an entry and now is trying to rename it.
            if (!string.IsNullOrWhiteSpace(_oldEntry.Platform))
            {
                // If we are switching the last ran state from on to off,
                // then we will not rename the directory, since if we do this,
                // we may effectively be renaming the storage folder which should
                // remain isolated.
                if (_oldEntry.WasLastRan == CurrentEntry.WasLastRan)
                {
                    var oldPlatformDirectory = _pathBuilder.GetPlatformDirectory(_oldEntry);
                    var newPlatformDirectory = _pathBuilder.GetPlatformDirectory(CurrentEntry);

                    var oldSavesDirectory = _pathBuilder.GetSaveDirectory(_oldEntry);
                    var newSavesDirectory = _pathBuilder.GetSaveDirectory(CurrentEntry);

                    // We can skip renaming if it's the same platform.
                    // No renaming of directories needs to happen here. Just saving.
                    if (!oldPlatformDirectory.EqualsIgnoreCase(newPlatformDirectory))
                    {
                        // If the target directory name already exists, we can't allow this rename to happen.
                        if (Directory.Exists(newPlatformDirectory) || Directory.Exists(newSavesDirectory))
                        {
                            MessageBox.Show($"A platform/save directory with the name \"{CurrentEntry.Platform}\" already exists.");
                            ReverseChanges();
                            return;
                        }

                        // If this entry is currently running, then we can't complete this
                        // operation since the game is still using that directory/save path.
                        if (CurrentEntry.WasLastRan && _processManager.AreProcessesRunning)
                        {
                            _logger.LogWarning("You can't edit this entry since the game is currently running and using its save directory.");
                            _logger.LogWarning("Please close all instances of Diablo II and try again.");

                            ReverseChanges();
                            return;
                        }

                        if (Directory.Exists(oldPlatformDirectory))
                        {
                            Directory.Move(oldPlatformDirectory, newPlatformDirectory);
                        }

                        if (Directory.Exists(oldSavesDirectory))
                        {
                            Directory.Move(oldSavesDirectory, newSavesDirectory);
                        }

                        // Rename any platforms with the same platform name
                        _entryManager.RenamePlatform(_oldEntry.Platform, CurrentEntry.Platform);
                    }
                }

                // If this entry was switched from not being the last ran to being the last ran,
                // Then we need to disable whichever entry was last ran if there was one.
                if (!_oldEntry.WasLastRan && CurrentEntry.WasLastRan && LastRanEntry != null)
                {
                    LastRanEntry.WasLastRan = false;
                }

                // If this was the last ran entry, then we need to also update the registry path.
                if (CurrentEntry.WasLastRan)
                {
                    _registryService.Update(CurrentEntry);
                }
            }

            _entryManager.SaveEntries();

            // Clear old entry so next updates work properly.
            _oldEntry = null;
        }