/// <summary> /// Try to update this order with a serialization object from the API. /// </summary> /// <param name="src"></param> /// <param name="issuedFor">Whether the order was issued for a corporation or a /// character.</param> /// <param name="endedOrders"></param> /// <returns></returns> internal bool TryImport(EsiOrderListItem src, IssuedFor issuedFor, ICollection <MarketOrder> endedOrders) { // Note that, before a match is found, all orders have been marked for deletion: // m_markedForDeletion == true // Checks whether ID is the same (IDs can be recycled ?) if (!MatchesWith(src)) { return(false); } // Prevent deletion MarkedForDeletion = false; // Update infos (if ID is the same it may have been modified either by the market // or by the user [modify order] so we update the orders info that are changeable) if (IsModified(src)) { if (Item != null) { // If it is a buy order, escrow may have changed var buyOrder = this as BuyOrder; if (src.IsBuyOrder && buyOrder != null) { buyOrder.Escrow = src.Escrow; } UnitaryPrice = src.UnitaryPrice; RemainingVolume = src.RemainingVolume; Issued = src.Issued; } LastStateChange = DateTime.UtcNow; m_state = OrderState.Modified; } else if (m_state == OrderState.Modified) { LastStateChange = DateTime.UtcNow; m_state = OrderState.Active; } // Order is from a serialized object, so populate the missing info if (Item == null) { PopulateOrderInfo(src, issuedFor); } OrderState state = GetState(src); if (m_state == OrderState.Modified || state == m_state) { return(true); } // It has either expired or fulfilled m_state = state; LastStateChange = DateTime.UtcNow; // Should we notify it to the user? #if false // CCP does not actually report any orders with this status any longer if (state == OrderState.Expired || state == OrderState.Fulfilled) { endedOrders.Add(this); } #endif return(true); }
/// <summary> /// Populates the serialization object job with the info from the API. /// </summary> /// <param name="src">The source.</param> private void PopulateJobInfo(SerializableJobListItem src) { ID = src.JobID; InstallerID = src.InstallerID; InstalledItem = StaticBlueprints.GetBlueprintByID(src.BlueprintTypeID); Runs = src.Runs; SolarSystem = StaticGeography.GetSolarSystemByID(src.SolarSystemID); Cost = src.Cost; Probability = src.Probability; SuccessfulRuns = src.SuccessfulRuns; //InstalledTime = src.InstallTime; //InstalledME = src.InstalledItemMaterialLevel; //InstalledPE = src.InstalledItemProductivityLevel; StartDate = src.StartDate; EndDate = src.EndDate; PauseDate = src.PauseDate; IssuedFor = src.IssuedFor; m_installedItemLocationID = src.StationID; UpdateInstallation(); if (Enum.IsDefined(typeof(BlueprintActivity), src.ActivityID)) { Activity = (BlueprintActivity)Enum.ToObject(typeof(BlueprintActivity), src.ActivityID); } OutputItem = GetOutputItem(src.ProductTypeID); //if (Enum.IsDefined(typeof(BlueprintType), src.InstalledItemCopy)) // BlueprintType = (BlueprintType)Enum.ToObject(typeof(BlueprintType), src.InstalledItemCopy); }
private IssuedFor AdjustIssuer(IssuedFor issuedFor, EsiOrderListItem srcOrder) { var orderFor = issuedFor; const ulong MARKET_ORDER_MASK = (ulong)ESIAPICharacterMethods.MarketOrders; // Orders in corporation endpoint are unconditionally for corp, the character // endpoint has a special field since *some* are for corp, why... if (srcOrder.IsCorporation) { orderFor = IssuedFor.Corporation; } // Exclude corporation orders made by a monitored character with ESI market // order tracking turned on if (issuedFor == IssuedFor.Corporation) { // Find matching character identity, if any var issuer = EveMonClient.CharacterIdentities.FirstOrDefault(character => character.CharacterID == srcOrder.IssuedBy); // If the character is monitored and has access mask to market if (issuer != null && (issuer.CCPCharacter?.Monitored ?? false) && issuer. ESIKeys.Any(key => (key.AccessMask & MARKET_ORDER_MASK) != 0UL)) { orderFor = IssuedFor.None; } } return(orderFor); }
/// <summary> /// Imports an enumeration of API objects. /// </summary> /// <param name="src">The enumeration of serializable jobs from the API.</param> /// <param name="issuedFor">Whether these jobs were issued for the corporation or /// character.</param> internal void Import(IEnumerable <EsiJobListItem> src, IssuedFor issuedFor) { // Mark all jobs for deletion, jobs found in the API will be unmarked foreach (IndustryJob job in Items) { job.MarkedForDeletion = true; } var newJobs = new LinkedList <IndustryJob>(); var now = DateTime.UtcNow; // Import the jobs from the API foreach (EsiJobListItem job in src) { DateTime limit = job.EndDate.AddDays(IndustryJob.MaxEndedDays); // For jobs which are not yet ended, or are active and not ready (active is // defined as having an empty completion date), and are not already in list if (limit >= now || (job.CompletedDate == DateTime.MinValue && job.Status != CCPJobCompletedStatus.Ready) && !Items.Any(x => x.TryImport(job, issuedFor, m_ccpCharacter))) { // Only add jobs with valid items var ij = new IndustryJob(job, issuedFor); if (ij.InstalledItem != null && ij.OutputItem != null) { newJobs.AddLast(ij); } } } // Add the items that are no longer marked for deletion newJobs.AddRange(Items.Where(x => !x.MarkedForDeletion)); // Replace the old list with the new one Items.Clear(); Items.AddRange(newJobs); }
/// <summary> /// Populates the serialization object job with the info from the API. /// </summary> /// <param name="src">The source.</param> /// <param name="issuedFor">Whether this jobs was issued for the corporation or /// character.</param> /// <param name="character">The character owning this job.</param> private void PopulateJobInfo(EsiJobListItem src, IssuedFor issuedFor, CCPCharacter character = null) { ID = src.JobID; InstallerID = src.InstallerID; InstalledItem = StaticBlueprints.GetBlueprintByID(src.BlueprintTypeID); Runs = src.Runs; Cost = src.Cost; Probability = src.Probability; SuccessfulRuns = src.SuccessfulRuns; StartDate = src.StartDate; EndDate = src.EndDate; PauseDate = src.PauseDate; IssuedFor = issuedFor; m_installedItemLocationID = src.FacilityID; UpdateLocation(character); UpdateInstallation(character); if (Enum.IsDefined(typeof(BlueprintActivity), src.ActivityID)) { Activity = (BlueprintActivity)Enum.ToObject(typeof(BlueprintActivity), src.ActivityID); } OutputItem = GetOutputItem(src.ProductTypeID); }
/// <summary> /// Constructor from the API. /// </summary> /// <param name="src">The source.</param> /// <param name="issuedFor">Whether this jobs was issued for the corporation or /// character.</param> /// <exception cref="System.ArgumentNullException">src</exception> internal IndustryJob(EsiJobListItem src, IssuedFor issuedFor) { src.ThrowIfNull(nameof(src)); PopulateJobInfo(src, issuedFor); State = GetState(src); LastStateChange = DateTime.UtcNow; ActiveJobState = GetActiveJobState(); }
/// <summary> /// Imports an enumeration of API objects. /// </summary> /// <param name="src">The orders to import.</param> /// <param name="issuedFor">Whether the orders were issued for a character or /// corporation.</param> /// <param name="ended">The location to place ended orders.</param> /// <returns>The list of expired orders.</returns> internal void Import(IEnumerable <EsiOrderListItem> src, IssuedFor issuedFor, ICollection <MarketOrder> ended) { var now = DateTime.UtcNow; // Mark all orders for deletion // If they are found again on the API feed, they will not be deleted and those set // as ignored will be left as ignored foreach (var order in Items) { order.MarkedForDeletion = true; } var newOrders = new List <MarketOrder>(Items.Count); foreach (var srcOrder in src) { var limit = srcOrder.Issued.AddDays(srcOrder.Duration + MarketOrder. MaxExpirationDays); var orderFor = AdjustIssuer(issuedFor, srcOrder); if (limit >= now && orderFor != IssuedFor.None && !Items.Any(x => x.TryImport( srcOrder, orderFor, ended))) { // New order if (srcOrder.IsBuyOrder) { var order = new BuyOrder(srcOrder, orderFor, m_character); if (order.Item != null) { newOrders.Add(order); } } else { var order = new SellOrder(srcOrder, orderFor, m_character); if (order.Item != null) { newOrders.Add(order); } } } } // Add the items that are no longer marked for deletion foreach (var order in Items) { if (order.MarkedForDeletion) { ended.Add(order); } else { newOrders.Add(order); } } Items.Clear(); Items.AddRange(newOrders); }
/// <summary> /// Constructor from the API. /// </summary> /// <param name="src">The source.</param> /// <param name="issuedFor">Whether the order was issued for a corporation or a /// character.</param> /// <param name="character">The owning character.</param> /// <exception cref="System.ArgumentNullException">src</exception> protected MarketOrder(EsiOrderListItem src, IssuedFor issuedFor, CCPCharacter character) { src.ThrowIfNull(nameof(src)); PopulateOrderInfo(src, issuedFor); LastStateChange = DateTime.UtcNow; m_character = character; m_state = GetState(src); }
/// <summary> /// Imports an enumeration of API objects. /// </summary> /// <param name="src">The orders to import.</param> /// <param name="issuedFor">Whether the orders were issued for a character or /// corporation.</param> /// <param name="ended">The location to place ended orders.</param> /// <returns>The list of expired orders.</returns> internal void Import(IEnumerable <EsiOrderListItem> src, IssuedFor issuedFor, ICollection <MarketOrder> ended) { var now = DateTime.UtcNow; // Mark all orders for deletion // If they are found again on the API feed, they will not be deleted and those set // as ignored will be left as ignored foreach (MarketOrder order in Items) { order.MarkedForDeletion = true; } var newOrders = new LinkedList <MarketOrder>(); foreach (EsiOrderListItem srcOrder in src) { var limit = srcOrder.Issued.AddDays(srcOrder.Duration + MarketOrder. MaxExpirationDays); var orderFor = issuedFor; // Orders in corporation endpoint are unconditionally for corp, the character // endpoint has a special field since *some* are for corp, why... if (srcOrder.IsCorporation) { orderFor = IssuedFor.Corporation; } if (limit >= now && !Items.Any(x => x.TryImport(srcOrder, orderFor, ended))) { // New order if (srcOrder.IsBuyOrder) { BuyOrder order = new BuyOrder(srcOrder, orderFor, m_character); if (order.Item != null) { newOrders.AddLast(order); } } else { SellOrder order = new SellOrder(srcOrder, orderFor, m_character); if (order.Item != null) { newOrders.AddLast(order); } } } } // Add the items that are no longer marked for deletion newOrders.AddRange(Items.Where(x => !x.MarkedForDeletion)); Items.Clear(); Items.AddRange(newOrders); }
/// <summary> /// Constructor from the API. /// </summary> /// <param name="src"></param> protected MarketOrder(SerializableOrderListItem src) { m_state = GetState(src); m_orderID = src.OrderID; m_itemID = src.ItemID; m_item = StaticItems.GetItemByID(src.ItemID); m_station = GetStationByID(src.StationID); m_unitaryPrice = src.UnitaryPrice; m_initialVolume = src.InitialVolume; m_remainingVolume = src.RemainingVolume; m_lastStateChange = DateTime.UtcNow; m_minVolume = src.MinVolume; m_duration = src.Duration; m_issued = src.Issued; m_issuedFor = src.IssuedFor; }
/// <summary> /// Constructor from an object deserialized from the settings file. /// </summary> /// <param name="src"></param> protected MarketOrder(SerializableOrderBase src) { Ignored = src.Ignored; m_orderID = src.OrderID; m_state = src.State; m_itemID = GetItemID(src); m_item = GetItem(src); m_station = GetStationByID(src.StationID); m_unitaryPrice = src.UnitaryPrice; m_initialVolume = src.InitialVolume; m_remainingVolume = src.RemainingVolume; m_lastStateChange = src.LastStateChange; m_minVolume = src.MinVolume; m_duration = src.Duration; m_issued = src.Issued; m_issuedFor = (src.IssuedFor == IssuedFor.None ? IssuedFor.Character : src.IssuedFor); }
/// <summary> /// Try to update this job with a serialization object from the API. /// </summary> /// <param name="src">The serializable source.</param> /// <param name="issuedFor">Whether this jobs was issued for the corporation or /// character.</param> /// <param name="character">The character owning this job.</param> /// <returns>True if import sucessful otherwise, false.</returns> internal bool TryImport(EsiJobListItem src, IssuedFor issuedFor, CCPCharacter character) { bool matches = MatchesWith(src); // Note that, before a match is found, all jobs have been marked for deletion: // m_markedForDeletion == true if (matches) { MarkedForDeletion = false; // Update information (if ID is the same it may have been modified) if (IsModified(src)) { // Job is from a serialized object, so populate the missing info if (InstalledItem == null) { PopulateJobInfo(src, issuedFor); } else { EndDate = src.EndDate; PauseDate = src.PauseDate; } State = (PauseDate == DateTime.MinValue) ? JobState.Active : JobState. Paused; ActiveJobState = GetActiveJobState(); LastStateChange = DateTime.UtcNow; } // Job is from a serialized object, so populate the missing info if (InstalledItem == null) { PopulateJobInfo(src, issuedFor, character); } var state = GetState(src); if (state != State) { State = state; LastStateChange = DateTime.UtcNow; } } return(matches); }
/// <summary> /// Constructor. /// </summary> public CharacterContractsList() { InitializeComponent(); lvContracts.Hide(); lvContracts.AllowColumnReorder = true; lvContracts.Columns.Clear(); m_showIssuedFor = IssuedFor.All; showDetailsToolStripMenuItem.Font = FontFactory.GetFont("Segoe UI", 9F, FontStyle.Bold); noContractsLabel.Font = FontFactory.GetFont("Tahoma", 11.25F, FontStyle.Bold); ListViewHelper.EnableDoubleBuffer(lvContracts); lvContracts.ColumnClick += lvContracts_ColumnClick; lvContracts.ColumnWidthChanged += lvContracts_ColumnWidthChanged; lvContracts.ColumnReordered += lvContracts_ColumnReordered; lvContracts.MouseDown += listView_MouseDown; lvContracts.MouseMove += listView_MouseMove; lvContracts.MouseLeave += listView_MouseLeave; }
/// <summary> /// Constructor from the API. /// </summary> /// <param name="src"></param> internal IndustryJob(SerializableJobListItem src) { m_state = GetState(src); m_jobID = src.JobID; m_installedItemID = src.InstalledItemTypeID; m_installedItem = StaticBlueprints.GetBlueprintByID(src.InstalledItemTypeID); m_outputItemID = src.OutputTypeID; m_outputItem = GetOutputItem(src.OutputTypeID); m_runs = src.Runs; m_activity = (BlueprintActivity)Enum.ToObject(typeof(BlueprintActivity), src.ActivityID); m_blueprintType = (BlueprintType)Enum.ToObject(typeof(BlueprintType), src.InstalledItemCopy); m_installation = GetInstallation(src.OutputLocationID); m_solarSystem = StaticGeography.GetSystem(src.SolarSystemID); m_installedTime = src.InstallTime; m_installedItemME = src.InstalledItemMaterialLevel; m_installedItemPE = src.InstalledItemProductivityLevel; m_beginProductionTime = src.BeginProductionTime; m_endProductionTime = src.EndProductionTime; m_pauseProductionTime = src.PauseProductionTime; m_lastStateChange = DateTime.UtcNow; m_issuedFor = src.IssuedFor; m_activeJobState = GetActiveJobState(); }
/// <summary> /// Constructor from the API. /// </summary> /// <param name="src"></param> internal IndustryJob(SerializableJobListItem src) { m_state = GetState(src); m_jobID = src.JobID; m_installedItemID = src.InstalledItemTypeID; m_installedItem = StaticBlueprints.GetBlueprintByID(src.InstalledItemTypeID); m_outputItemID = src.OutputTypeID; m_outputItem = GetOutputItem(src.OutputTypeID); m_runs = src.Runs; m_activity = (BlueprintActivity) Enum.ToObject(typeof (BlueprintActivity), src.ActivityID); m_blueprintType = (BlueprintType) Enum.ToObject(typeof (BlueprintType), src.InstalledItemCopy); m_installation = GetInstallation(src.OutputLocationID); m_solarSystem = StaticGeography.GetSystem(src.SolarSystemID); m_installedTime = src.InstallTime; m_installedItemME = src.InstalledItemMaterialLevel; m_installedItemPE = src.InstalledItemProductivityLevel; m_beginProductionTime = src.BeginProductionTime; m_endProductionTime = src.EndProductionTime; m_pauseProductionTime = src.PauseProductionTime; m_lastStateChange = DateTime.UtcNow; m_issuedFor = src.IssuedFor; m_activeJobState = GetActiveJobState(); }
/// <summary> /// Populates the serialization object order with the info from the API. /// </summary> /// <param name="src">The source.</param> /// <param name="ownerID">The owner of this order.</param> /// <param name="issuedFor">Whether the order was issued for a corporation or a /// character.</param> private void PopulateOrderInfo(EsiOrderListItem src, IssuedFor issuedFor) { OwnerID = src.IssuedBy; ID = src.OrderID; Item = StaticItems.GetItemByID(src.ItemID); UnitaryPrice = src.UnitaryPrice; InitialVolume = src.InitialVolume; RemainingVolume = src.RemainingVolume; MinVolume = src.MinVolume; Duration = src.Duration; Issued = src.Issued; IssuedFor = issuedFor; m_stationID = src.StationID; UpdateStation(); var buyOrder = this as BuyOrder; if (src.IsBuyOrder && buyOrder != null) { buyOrder.Escrow = src.Escrow; buyOrder.Range = src.Range; } }
/// <summary> /// Constructor from an object deserialized from the settings file. /// </summary> /// <param name="src"></param> internal IndustryJob(SerializableJob src) { m_ignored = src.Ignored; m_jobID = src.JobID; m_state = src.State; m_installedItemID = src.InstalledItemID; m_installedItem = StaticBlueprints.GetBlueprintByID(src.InstalledItemID); m_outputItemID = src.OutputItemID; m_outputItem = GetOutputItem(src.OutputItemID); m_runs = src.Runs; m_activity = src.Activity; m_blueprintType = src.BlueprintType; m_installation = src.ItemLocation; m_solarSystem = StaticGeography.GetSystem(src.SolarSystemID); m_installedTime = src.InstalledTime; m_installedItemME = src.InstalledItemME; m_installedItemPE = src.InstalledItemPE; m_beginProductionTime = src.BeginProductionTime; m_endProductionTime = src.EndProductionTime; m_pauseProductionTime = src.PauseProductionTime; m_lastStateChange = src.LastStateChange; m_issuedFor = src.IssuedFor; m_activeJobState = GetActiveJobState(); }
/// <summary> /// Constructor from the API. /// </summary> /// <param name="src">The source.</param> /// <param name="issuedFor">Whether the order was issued for a corporation or a /// character.</param> internal SellOrder(EsiOrderListItem src, IssuedFor issuedFor, CCPCharacter character) : base(src, issuedFor, character) { }
/// <summary> /// Add the queried jobs to a list. /// </summary> /// <param name="result"></param> /// <param name="jobsAdded"></param> /// <param name="issuedFor"></param> /// <returns>True if jobs get added, false otherwise</returns> private bool AddJobs(APIResult<SerializableAPIIndustryJobs> result, bool jobsAdded, IssuedFor issuedFor) { // Add orders if there isn't an error if (result.HasError) return false; // Check to see if other market // orders have been added before if (!jobsAdded) m_jobs.Clear(); // Add jobs in list result.Result.Jobs.ForEach(x => x.IssuedFor = issuedFor); m_jobs.AddRange(result.Result.Jobs); return true; }
/// <summary> /// Constructor from the API. /// </summary> /// <param name="src">The source.</param> /// <param name="issuedFor">Whether the order was issued for a corporation or a /// character.</param> internal BuyOrder(EsiOrderListItem src, IssuedFor issuedFor, CCPCharacter character) : base(src, issuedFor, character) { Escrow = src.Escrow; Range = src.Range; }
/// <summary> /// Populates the serialization object job with the info from the API. /// </summary> /// <param name="src">The source.</param> private void PopulateJobInfo(SerializableJobListItem src) { ID = src.JobID; InstallerID = src.InstallerID; InstalledItem = StaticBlueprints.GetBlueprintByID(src.BlueprintTypeID); Runs = src.Runs; SolarSystem = StaticGeography.GetSolarSystemByID(src.SolarSystemID); Cost = src.Cost; Probability = src.Probability; SuccessfulRuns = src.SuccessfulRuns; //InstalledTime = src.InstallTime; //InstalledME = src.InstalledItemMaterialLevel; //InstalledPE = src.InstalledItemProductivityLevel; StartDate = src.StartDate; EndDate = src.EndDate; PauseDate = src.PauseDate; IssuedFor = src.IssuedFor; m_installedItemLocationID = src.StationID; UpdateInstallation(); if (Enum.IsDefined(typeof(BlueprintActivity), src.ActivityID)) Activity = (BlueprintActivity)Enum.ToObject(typeof(BlueprintActivity), src.ActivityID); OutputItem = GetOutputItem(src.ProductTypeID); //if (Enum.IsDefined(typeof(BlueprintType), src.InstalledItemCopy)) // BlueprintType = (BlueprintType)Enum.ToObject(typeof(BlueprintType), src.InstalledItemCopy); }