/// <summary> /// Populates the serialization object contract with the info from the API. /// </summary> /// <param name="src">The source.</param> /// <exception cref="System.ArgumentNullException">src</exception> private void PopulateContractInfo(EsiContractListItem src) { src.ThrowIfNull(nameof(src)); m_method = src.APIMethod; ID = src.ContractID; IssuerID = src.IssuerID; AssigneeID = src.AssigneeID; Description = src.Title.IsEmptyOrUnknown() ? "(None)" : src.Title; IssuedFor = src.ForCorp ? IssuedFor.Corporation : IssuedFor.Character; Issued = src.DateIssued; Expiration = src.DateExpired; Duration = (int)Math.Round(src.DateExpired.Subtract(src.DateIssued).TotalDays); DaysToComplete = src.NumDays; Price = src.Price; Reward = src.Reward; Collateral = src.Collateral; Buyout = src.Buyout; Volume = src.Volume; m_startStationID = src.StartStationID; m_endStationID = src.EndStationID; UpdateStation(); UpdateContractInfo(src); Availability = src.Availability; ContractType = src.ContractType; // Issuer and assignee m_issuer = src.ForCorp ? Character.Corporation.Name : EveIDToName.GetIDToName( src.IssuerID); m_assignee = EveIDToName.GetIDToName(src.AssigneeID); }
/// <summary> /// Try to update this contract with a serialization object from the API. /// </summary> /// <param name="src">The serializable source.</param> /// <param name="endedContracts">The ended contracts.</param> /// <returns>True if import successful otherwise, false.</returns> internal bool TryImport(EsiContractListItem src, ICollection <Contract> endedContracts) { // Note that, before a match is found, all contracts have been marked for deletion: // m_markedForDeletion == true bool matches = MatchesWith(src); if (matches) { // Prevent deletion MarkedForDeletion = false; // Contract is from a serialized object, so populate the missing info if (IssuerID == 0L || Issuer.IsEmptyOrUnknown()) { PopulateContractInfo(src); } // Update if modified ContractState state = GetState(src); if (state != m_state || NeedsAttention) { if (state != m_state || Overdue) { m_state = state; UpdateContractInfo(src); } // If the contract has just finished or expired, add it to the ended list if (NeedsAttention || state == ContractState.Finished) { endedContracts.Add(this); } } } return(matches); }
/// <summary> /// Constructor from the API. /// </summary> /// <param name="ccpCharacter">The CCP character.</param> /// <param name="src">The source.</param> /// <exception cref="System.ArgumentNullException">src</exception> internal Contract(CCPCharacter ccpCharacter, EsiContractListItem src) { src.ThrowIfNull(nameof(src)); m_bidsResponse = m_itemsResponse = null; Character = ccpCharacter; PopulateContractInfo(src); m_state = GetState(src); m_bids = new LinkedList <ContractBid>(); }
/// <summary> /// Updates the contract info. /// </summary> /// <param name="src">The source.</param> private void UpdateContractInfo(EsiContractListItem src) { Accepted = src.DateAccepted; Completed = src.DateCompleted; AcceptorID = src.AcceptorID; m_acceptor = EveIDToName.GetIDToName(src.AcceptorID); Status = src.ContractStatus; if (Overdue) { Status = CCPContractStatus.Overdue; } }
/// <summary> /// Gets the state of a contract. /// </summary> /// <param name="src">The source.</param> /// <returns></returns> private ContractState GetState(EsiContractListItem src) { CCPContractStatus status = src.ContractStatus; if (status == CCPContractStatus.Outstanding && IsExpired) { return(ContractState.Expired); } switch (status) { case CCPContractStatus.Failed: return(ContractState.Failed); case CCPContractStatus.Canceled: return(ContractState.Canceled); case CCPContractStatus.Overdue: case CCPContractStatus.Outstanding: case CCPContractStatus.InProgress: return(IssuerID != Character.CharacterID ? ContractState.Assigned : ContractState.Created); case CCPContractStatus.Completed: case CCPContractStatus.CompletedByContractor: case CCPContractStatus.CompletedByIssuer: return(ContractState.Finished); case CCPContractStatus.Rejected: return(ContractState.Rejected); case CCPContractStatus.Deleted: return(ContractState.Deleted); default: throw new NotImplementedException(); } }
/// <summary> /// Checks whether the given API object matches with this contract. /// </summary> /// <param name="src"></param> /// <returns></returns> private bool MatchesWith(EsiContractListItem src) => src.ContractID == ID;