public static Commander FromFrontierApiCmdr(Commander currentCmdr, FrontierApiCommander frontierApiCommander, DateTime apiTimeStamp, DateTime journalTimeStamp, out bool cmdrMatches) { if (frontierApiCommander is null) { cmdrMatches = true; return(currentCmdr); } // Copy our current commander to a new commander object Commander Cmdr = currentCmdr.Copy(); // Set our commander name if it hadn't already been set Cmdr.name = string.IsNullOrEmpty(Cmdr.name) ? frontierApiCommander.name : Cmdr.name; // Verify that the profile information matches the current Cmdr name if (frontierApiCommander.name != Cmdr.name) { Logging.Warn("Frontier API incorrectly configured: Returning information for Commander " + frontierApiCommander.name + " rather than for " + Cmdr.name + ". Disregarding incorrect information."); cmdrMatches = false; return(Cmdr); } cmdrMatches = true; // Update our commander object with information exclusively available from the Frontier API Cmdr.crimerating = frontierApiCommander.crimerating; Cmdr.servicerating = frontierApiCommander.servicerating; Cmdr.credits = frontierApiCommander.credits; Cmdr.debt = frontierApiCommander.debt; // Update our commander object with information obtainable from the journal // Since the parameters below only increase, we will take any that are higher in rank than we had before Cmdr.combatrating = (frontierApiCommander.combatrating?.rank ?? 0) >= (Cmdr.combatrating?.rank ?? 0) ? frontierApiCommander.combatrating : Cmdr.combatrating; Cmdr.traderating = (frontierApiCommander.traderating?.rank ?? 0) >= (Cmdr.traderating?.rank ?? 0) ? frontierApiCommander.traderating : Cmdr.traderating; Cmdr.explorationrating = (frontierApiCommander.explorationrating?.rank ?? 0) >= (Cmdr.explorationrating?.rank ?? 0) ? frontierApiCommander.explorationrating : Cmdr.explorationrating; Cmdr.cqcrating = (frontierApiCommander.cqcrating?.rank ?? 0) >= (Cmdr.cqcrating?.rank ?? 0) ? frontierApiCommander.cqcrating : Cmdr.cqcrating; Cmdr.empirerating = (frontierApiCommander.empirerating?.rank ?? 0) >= (Cmdr.empirerating?.rank ?? 0) ? frontierApiCommander.empirerating : Cmdr.empirerating; Cmdr.federationrating = (frontierApiCommander.federationrating?.rank ?? 0) >= (Cmdr.federationrating?.rank ?? 0) ? frontierApiCommander.federationrating : Cmdr.federationrating; Cmdr.mercenaryrating = (frontierApiCommander.mercenaryrating?.rank ?? 0) >= (Cmdr.mercenaryrating?.rank ?? 0) ? frontierApiCommander.mercenaryrating : Cmdr.mercenaryrating; Cmdr.exobiologistrating = (frontierApiCommander.exobiologistrating?.rank ?? 0) >= (Cmdr.exobiologistrating?.rank ?? 0) ? frontierApiCommander.exobiologistrating : Cmdr.exobiologistrating; // Power rating is also updated from the journal but may decrease so we check the timestamp if (apiTimeStamp > journalTimeStamp) { Cmdr.powerrating = frontierApiCommander.powerrating; } return(Cmdr); }