private async Task <bool> DownloadCurrentProfileAsync()
        {
            var gameReleases = await CurrentProfile.GetAvailableReleasesAsync();

            if (gameReleases.Any())
            {
                var onlineRelease = gameReleases.First(release => release.Version == CurrentProfile.Version);

                switch (MessageBox.Show(string.Format(LocalizationUI.GetString("NotDownloaded"), CurrentProfile.Name), LocalizationUI.GetString("NotDownloadedTitle"), MessageBoxButtons.YesNo))
                {
                case DialogResult.Yes:
                    using (var directUpdater = new ReleaseDownloaderForm(onlineRelease.ReleaseAsset, CurrentProfile.Folder))
                    {
                        var state = directUpdater.ShowDialog();
                        return(state != DialogResult.Abort && state != DialogResult.Cancel);
                    }
                }
            }

            return(false);
        }
        private async Task CheckProfileForUpdateAsync(bool onStartup = false) // -- onStartup - function is called on Launcher startup.
        {
            Log($"Checking Profile '{CurrentProfile.Name}' for updates...");

            if (!onStartup && CurrentProfile.ExecutionFile == null)
            {
                Log($"Profile '{CurrentProfile.Name}' - execution file not found! It was not downloaded?");
                await DownloadCurrentProfileAsync();
            }

            if (CurrentProfile.ExecutionFile == null)
            {
                Log($"Something went wrong while checking the Profile '{CurrentProfile.Name}' - execution file not found!");
                return;
            }

            var gameReleases = await CurrentProfile.GetAvailableReleasesAsync();

            if (gameReleases.Any() && (!onStartup || CurrentProfile.IsDefault))
            {
                var latestRelease = gameReleases.First();

                if (CurrentProfile.IsDefault)
                {
                    if (CurrentProfile.Version < latestRelease.Version)
                    {
                        Log($"Found a new Profile '{CurrentProfile.Name}' version [{latestRelease.Version}]!");
                        UpdateCurrentProfile(latestRelease);
                        return;
                    }
                }


                if (CurrentProfile.Version < latestRelease.Version || CurrentProfile.VersionExe < latestRelease.Version)
                {
                    Log($"Found a new Profile '{CurrentProfile.Name}' version [{latestRelease.Version}]!");
                    UpdateCurrentProfile(latestRelease);
                }
                else if (CurrentProfile.VersionExe != new Version("0.0") && CurrentProfile.VersionExe != new Version("1.0.0.0") && CurrentProfile.VersionExe < CurrentProfile.Version)
                {
                    Log($"The version of the execution file [{CurrentProfile.VersionExe}] of Profile '{CurrentProfile.Name}' does not correspond to the Profile version [{CurrentProfile.Version}]! An update is needed.");
                    UpdateCurrentProfile(latestRelease);
                }
                else
                {
                    if (!onStartup)
                    {
                        Log($"Profile '{CurrentProfile.Name}' is up to date.");
                        MessageBox.Show(string.Format(LocalizationUI.GetString("ProfileUpToDate"), CurrentProfile.Name), LocalizationUI.GetString("ProfileUpToDateTitle"), MessageBoxButtons.OK);
                    }
                }
            }
            else
            {
                if (!onStartup)
                {
                    Log($"Error while checking Profile '{CurrentProfile.Name}'. Is Internet available?");
                    MessageBox.Show(LocalizationUI.GetString("NoInternet"), LocalizationUI.GetString("NoInternetTitle"), MessageBoxButtons.OK);
                }
            }
        }