public bool CloneNetwork(NetworkViewModel viewModel, List <string> usedEntityNames) { if (viewModel.CurrentStatus != ServerStatus.STOPPED) { StopNetwork(viewModel, false); while (viewModel.CurrentStatus != ServerStatus.STOPPED) { Thread.Sleep(500); } } try { DirectoryInfo directoryInfo = new DirectoryInfo(Path.Combine(App.ServerPath, viewModel.Name)); if (!directoryInfo.Exists) { ErrorLogger.Append( new DirectoryNotFoundException("Could not find Directory " + directoryInfo.FullName)); return(false); } string newName = RefineName(viewModel.Name + "-Clone", usedEntityNames); //Better to use a object copy function string oldNetworkJson = JsonConvert.SerializeObject(viewModel.Network); Network newNetwork = JsonConvert.DeserializeObject <Network>(oldNetworkJson); newNetwork.Name = newName; newNetwork.UID = Guid.NewGuid().ToString(); NetworkViewModel newNetworkViewModel = new NetworkViewModel(newNetwork); string newNetworkPath = Path.Combine(App.ServerPath, newName); newNetworkViewModel.StartImport(); Application.Current.Dispatcher?.Invoke(() => ServerManager.Instance.Entities.Add(newNetworkViewModel)); ApplicationManager.Instance.MainViewModel.SelectedEntity = newNetworkViewModel; //Create server directory Directory.CreateDirectory(newNetworkPath); //Import server files Thread copyThread = new Thread(() => { FileImporter fileImporter = new FileImporter(); fileImporter.CopyProgressChanged += newNetworkViewModel.CopyProgressChanged; fileImporter.DirectoryCopy(directoryInfo.FullName, newNetworkPath, true, new List <string> { "server.jar" }); Console.WriteLine("Finished copying server files for server " + newNetworkPath); newNetworkViewModel.FinishedCopying(); }); copyThread.Start(); return(true); } catch (Exception e) { ErrorLogger.Append(e); return(false); } }
private bool ImportServer(ServerVersion version, ServerValidationInfo validationInfo, string originalServerDirectory, string serverName) { string serverPath = Path.Combine(App.ServerPath, serverName); while (Directory.Exists(serverPath)) { serverPath += "-Copy"; serverName += "-Copy"; } ServerSettings settings; if (new FileInfo(Path.Combine(originalServerDirectory, "server.properties")).Exists) { var settingsDict = new FileReader().ReadServerSettings(originalServerDirectory); settings = new ServerSettings(settingsDict); } else { string worldName = validationInfo.Worlds.First().Name; settings = new ServerSettings(worldName); } Server server = new Server(serverName, version, settings, new JavaSettings()); serverNames.Add(serverName); //Create server directory DirectoryInfo serverDirectory = Directory.CreateDirectory(serverPath); //Add server to Fork ServerViewModel viewModel = new ServerViewModel(server); viewModel.StartImport(); Application.Current.Dispatcher.Invoke(() => Entities.Add(viewModel)); ApplicationManager.Instance.MainViewModel.SelectedEntity = viewModel; //Import server files Thread copyThread = new Thread(() => { FileImporter fileImporter = new FileImporter(); fileImporter.CopyProgressChanged += viewModel.CopyProgressChanged; fileImporter.DirectoryCopy(originalServerDirectory, serverPath, true, new List <string> { "server.jar" }); Console.WriteLine("Finished copying server files for server " + serverName); viewModel.FinishedCopying(); }); copyThread.Start(); //Download server.jar Downloader.DownloadJarAsync(viewModel, serverDirectory); if (!validationInfo.EulaTxt) { //Write Eula new FileWriter().WriteEula(serverPath); } return(new DirectoryInfo(serverPath).Exists); }