internal long GetNewSystems(Func <bool> cancelRequested, Action <int, string> reportProgress, Action <string> logLine) { string lstsyst; DateTime lstsystdate; // First system in EDSM is from 2015-05-01 00:39:40 DateTime gammadate = new DateTime(2015, 5, 1, 0, 0, 0, DateTimeKind.Utc); bool outoforder = SQLiteConnectionSystem.GetSettingBool("EDSMSystemsOutOfOrder", true); if (SystemClassDB.IsSystemsTableEmpty()) { lstsystdate = gammadate; } else { // Get the most recent modify time returned from EDSM DateTime lastmod = outoforder ? SystemClassDB.GetLastSystemModifiedTime() : SystemClassDB.GetLastSystemModifiedTimeFast(); lstsystdate = lastmod - TimeSpan.FromSeconds(1); if (lstsystdate < gammadate) { lstsystdate = gammadate; } } lstsyst = lstsystdate.ToString("yyyy-MM-dd HH:mm:ss", CultureInfo.InvariantCulture); Console.WriteLine("EDSM Check date: " + lstsyst); long updates = 0; while (lstsystdate < DateTime.UtcNow) { if (cancelRequested()) { return(updates); } DateTime enddate = lstsystdate + TimeSpan.FromHours(12); if (enddate > DateTime.UtcNow) { enddate = DateTime.UtcNow; } logLine($"Downloading systems from {lstsystdate.ToLocalTime().ToString()} to {enddate.ToLocalTime().ToString()}"); reportProgress(-1, "Requesting systems from EDSM"); string json = null; try { json = RequestSystems(lstsystdate, enddate); } catch (WebException ex) { reportProgress(-1, $"EDSM request failed"); if (ex.Status == WebExceptionStatus.ProtocolError && ex.Response != null && ex.Response is HttpWebResponse) { string status = ((HttpWebResponse)ex.Response).StatusDescription; logLine($"Download of EDSM systems from the server failed ({status}), will try next time program is run"); } else { logLine($"Download of EDSM systems from the server failed ({ex.Status.ToString()}), will try next time program is run"); } break; } catch (Exception ex) { reportProgress(-1, $"EDSM request failed"); logLine($"Download of EDSM systems from the server failed ({ex.Message}), will try next time program is run"); break; } if (json == null) { reportProgress(-1, "EDSM request failed"); logLine("Download of EDSM systems from the server failed (no data returned), will try next time program is run"); break; } updates += SystemClassDB.ParseEDSMUpdateSystemsString(json, ref lstsyst, ref outoforder, false, cancelRequested, reportProgress, false); lstsystdate += TimeSpan.FromHours(12); } logLine($"System download complete"); return(updates); }