public static void RefreshDistroList() { var table = dbContext.WslDistros; var distroList = WslHelpers.GetDistroList(); foreach (var eachDistroInfo in distroList) { var distro = table.Where(x => x.DistroName == eachDistroInfo.DistroName).FirstOrDefault(); if (distro != null) { distro.DistroStatus = eachDistroInfo.DistroStatus; distro.WSLVersion = eachDistroInfo.WSLVersion; distro.IsDefault = eachDistroInfo.IsDefault; } else { distro = new WslDistro() { DistroName = eachDistroInfo.DistroName, DistroStatus = eachDistroInfo.DistroStatus, WSLVersion = eachDistroInfo.WSLVersion, IsDefault = eachDistroInfo.IsDefault, }; table.Add(distro); } } var distroNames = distroList.Select(x => x.DistroName); var unregisteredDistroList = table.Where(x => !distroNames.Contains(x.DistroName)); table.RemoveRange(unregisteredDistroList); dbContext.SaveChanges(); }
protected override void OnExit(ExitEventArgs e) { notifyIcon.Dispose(); //the icon would clean up automatically, but this is cleaner try { Distro.StopApp(); } finally { WslDistro.FreeConsole(); //clean up the console to ensure it's closed alongside the app base.OnExit(e); } }
public static IEnumerable <WslDistro> ParseDistroList(IEnumerable <string> lines) { var o = new List <WslDistro>(); if (lines == null) { throw new ArgumentNullException(nameof(lines)); } var list = new List <WslDistro>(Math.Max(0, lines.Count() - 1)); foreach (var eachLine in lines) { var items = eachLine.Trim().Split(WhitespaceChars, StringSplitOptions.RemoveEmptyEntries); if (3 <= items.Length && items.Length <= 4) { var info = new WslDistro(); if (items[0] == "*") { items = items.Skip(1).ToArray(); info.IsDefault = true; } info.DistroName = items[0]; info.DistroStatus = items[1]; info.WSLVersion = items[2]; if (!string.Equals(info.DistroName, "NAME", StringComparison.OrdinalIgnoreCase) && !string.Equals(info.DistroStatus, "STATE", StringComparison.OrdinalIgnoreCase) && !string.Equals(info.WSLVersion, "VERSION", StringComparison.OrdinalIgnoreCase)) { list.Add(info); } } } return(list.AsReadOnly()); }
protected override void OnStartup(StartupEventArgs e) { base.OnStartup(e); // Only one instance of the bootloader allowed at a time var exists = System.Diagnostics.Process.GetProcessesByName(System.IO.Path.GetFileNameWithoutExtension(System.Reflection.Assembly.GetEntryAssembly().Location)).Count() > 1; if (exists) { MessageBox.Show("Another instance of the application is already running."); Application.Current.Shutdown(); } Distro = new WslDistro(); // First time ? if (Karen.Properties.Settings.Default.FirstLaunch) { MessageBox.Show("Looks like this is your first time running the app! Please setup your Content Folder in the Settings."); ShowConfigWindow(); } // Create the Taskbar Icon now so it appears in the tray notifyIcon = (TaskbarIcon)FindResource("NotifyIcon"); // Check if server starts with app if (Karen.Properties.Settings.Default.StartServerAutomatically && Distro.Status == AppStatus.Stopped) { ToastNotification("LANraragi is starting automagically..."); Distro.StartApp(); } else { ToastNotification("The Launcher is now running! Please click the icon in your Taskbar."); } }
public static void RefreshWslDistroData() { string[] distroNames = lxRunOfflineInterface.GetDistroList(); if (distroNames == null) { return; } string[] runningDistros = wslInterface.GetRunningDistros(); foreach (WslDistro distroItem in wslDistroList) { if (!distroNames.Any(distroItem.DistroName.Equals)) { wslDistroList.Remove(distroItem); } } for (int i = 0; i < distroNames.Length; i++) { if (wslDistroList.Any(d => d.DistroName == distroNames[i])) { WslDistro wslDistro = wslDistroList.Find(d => d.DistroName == distroNames[i]); wslDistro.WSLVersion = lxRunOfflineInterface.GetDistroWslVersion(distroNames[i]); if (windowsVersionManager.CurrentVersion >= WindowsVersions.V1903) { if (runningDistros.Any(distroNames[i].Equals)) { wslDistro.DistroStatus = "Running"; } else { wslDistro.DistroStatus = "Stopped"; } } else { wslDistro.DistroStatus = "Unknown"; } } else { WslDistro wslDistro = new WslDistro(); wslDistro.DistroName = distroNames[i]; wslDistro.WSLVersion = lxRunOfflineInterface.GetDistroWslVersion(distroNames[i]); if (windowsVersionManager.CurrentVersion >= WindowsVersions.V1903) { if (runningDistros.Any(distroNames[i].Equals)) { wslDistro.DistroStatus = "Running"; } else { wslDistro.DistroStatus = "Stopped"; } } else { wslDistro.DistroStatus = "Unknown"; } wslDistroList.Add(wslDistro); } } }