internal void UpdateKnownAuroraVersionsFromMirrors(IList <string> mirrors)
        {
            var allKnownVersions = new List <AuroraVersion>(AuroraVersions);

            foreach (var mirror in mirrors)
            {
                Log.Debug($"Retrieving version information from {mirror} if available");
                var mirrorKnownVersions = new List <AuroraVersion>();
                var versionsUrl         = Path.Combine(mirror, "aurora_versions.ini");
                using (var client = new WebClient())
                {
                    try
                    {
                        var response = client.DownloadString(versionsUrl);
                        mirrorKnownVersions.AddRange(ModConfigurationReader.AuroraVersionsFromString(response));
                    }
                    catch (Exception e)
                    {
                        Log.Error($"Didn't find an Aurora version listing at {versionsUrl}", e);
                    }
                }
                foreach (var version in mirrorKnownVersions)
                {
                    if (!allKnownVersions.Any(existing => version.Checksum == existing.Checksum))
                    {
                        allKnownVersions.Add(version);
                    }
                }
            }
            AuroraVersions.AddRange(allKnownVersions);

            UpdateCache();
        }
        public void Update(IList <string> mirrors = null)
        {
            if (!File.Exists(_versionCachePath) && mirrors == null)
            {
                throw new Exception($"Aurora version cache not found at {_versionCachePath} and no mirrors provided");
            }

            if (File.Exists(_versionCachePath))
            {
                UpdateKnownVersionsFromCache();
            }

            if (mirrors != null)
            {
                UpdateKnownAuroraVersionsFromMirrors(mirrors);
            }

            var checksum = GetChecksum(File.ReadAllBytes(Path.Combine(Program.AuroraLoaderExecutableDirectory, "Clean", "aurora.exe")));

            Log.Debug($"Identified checksum {checksum}");
            try
            {
                CurrentAuroraVersion = AuroraVersions.First(v => v.Checksum.Equals(checksum));
            }
            catch (Exception e)
            {
                Log.Error($"Couldn't find Aurora version associated with checksum {checksum}", e);
                CurrentAuroraVersion = new AuroraVersion(SemVersion.Parse("1.0.0"), checksum);
            }
            Log.Debug($"Running Aurora {CurrentAuroraVersion.Version}");
        }
        internal void UpdateCache()
        {
            // Update cache
            var versions = AuroraVersions.Select(v => $"{v.Version}={v.Checksum}");

            Log.Debug($"Updating cache with {String.Join("\n\r", versions)}");
            File.WriteAllLines(
                Path.Combine(Program.AuroraLoaderExecutableDirectory, "aurora_versions.ini"),
                AuroraVersions.Select(v => $"{v.Version}={v.Checksum}").Distinct());
        }
 internal void UpdateKnownVersionsFromCache()
 {
     Log.Debug($"Loading Aurora versions from {Path.Combine(Program.AuroraLoaderExecutableDirectory, "aurora_versions.ini")}");
     try
     {
         var rawFileContents = File.ReadAllText(Path.Combine(Program.AuroraLoaderExecutableDirectory, "aurora_versions.ini"));
         AuroraVersions.AddRange(ModConfigurationReader.AuroraVersionsFromString(rawFileContents).ToList());
     }
     catch (Exception e)
     {
         Log.Error($"Failed to parse version data from {_configuration["aurora_known_versions_relative_filepath"]}", e);
     }
 }