Exemple #1
0
        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();
        }
Exemple #2
0
 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);
     }
 }
Exemple #3
0
        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());
        }
Exemple #4
0
        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.");
            }
        }
Exemple #5
0
        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);
                }
            }
        }