/// <summary> /// Imports data from the given skills information. /// </summary> /// <param name="skills">The serialized character skill information</param> internal void Import(EsiAPISkills skills, EsiAPISkillQueue queue) { var newSkills = new LinkedList <SerializableCharacterSkill>(); DateTime uselessDate = DateTime.UtcNow; FreeSkillPoints = skills.UnallocatedSP; // Keep track of the current skill queue's completed skills, as ESI doesn't transfer them to the skills list until you login Dictionary <long, SerializableQueuedSkill> dict = new Dictionary <long, SerializableQueuedSkill>(); if (queue != null) { foreach (var queuedSkill in queue.ToXMLItem().Queue) { // If the skill is completed or currently training, we need it later to copy the progress over to the imported skills if (queuedSkill.IsCompleted || queuedSkill.IsTraining) { if (!dict.ContainsKey(queuedSkill.ID)) { dict.Add(queuedSkill.ID, queuedSkill); } else { dict[queuedSkill.ID] = queuedSkill; } } } } // Convert skills to EVE format foreach (var skill in skills.Skills) { // Check if the skill is in the queue, and completed at a higher level or has higher current SP if (dict.ContainsKey(skill.ID)) { var queuedSkill = dict[skill.ID]; if (queuedSkill.IsCompleted) { // Queued skill is completed, so make sure the imported skill is up to par skill.ActiveLevel = Math.Max(skill.ActiveLevel, queuedSkill.Level); skill.Level = Math.Max(skill.Level, queuedSkill.Level); skill.Skillpoints = Math.Max(skill.Skillpoints, queuedSkill.EndSP); } else if (queuedSkill.IsTraining) { // Queued skill is currently training - use QueuedSkill class to calculate the CurrentSP of the skill var tmpQueuedSkill = new QueuedSkill(this, queuedSkill, ref uselessDate); skill.Skillpoints = Math.Max(skill.Skillpoints, tmpQueuedSkill.CurrentSP); } } newSkills.AddLast(skill.ToXMLItem()); } Skills.Import(newSkills, true); }
/// <summary> /// Imports data from the given skills information. /// </summary> /// <param name="skills">The serialized character skill information</param> internal void Import(EsiAPISkills skills, EsiAPISkillQueue queue) { var newSkills = new LinkedList <SerializableCharacterSkill>(); FreeSkillPoints = skills.UnallocatedSP; // Keep track of the current skill queue's completed skills, as ESI doesn't transfer them to the skills list until you login Dictionary <long, QueuedSkill> dict = new Dictionary <long, QueuedSkill>(); if (queue != null && IsTraining) { DateTime uselessDate = DateTime.UtcNow; foreach (var serialSkill in queue.ToXMLItem().Queue) { var queuedSkill = new QueuedSkill(this, serialSkill, ref uselessDate); if (!dict.ContainsKey(queuedSkill.Skill.ID)) { dict.Add(queuedSkill.Skill.ID, queuedSkill); } else if (queuedSkill.Level > dict[queuedSkill.Skill.ID].Level) { dict[queuedSkill.Skill.ID] = queuedSkill; } } } // Convert skills to EVE format foreach (var skill in skills.Skills) { // Check if the skill is in the queue, and completed at a higher level or has higher current SP if (dict.ContainsKey(skill.ID)) { var queuedSkill = dict[skill.ID]; if (queuedSkill.IsCompleted) { skill.ActiveLevel = Math.Max(skill.ActiveLevel, queuedSkill.Level); skill.Level = Math.Max(skill.Level, queuedSkill.Level); skill.Skillpoints = Math.Max(skill.Skillpoints, queuedSkill.EndSP); } else { skill.Skillpoints = Math.Max(skill.Skillpoints, queuedSkill.CurrentSP); } } newSkills.AddLast(skill.ToXMLItem()); } Skills.Import(newSkills, true); }
/// <summary> /// Processes the queried character's skill queue information. /// </summary> /// <param name="result"></param> private void OnSkillQueueUpdated(EsiAPISkillQueue result) { var target = m_ccpCharacter; // Character may have been deleted since we queried if (target != null) { target.SkillQueue.Import(result.ToXMLItem().Queue); // Check the character has less than a day of training in skill queue if (target.IsTraining && target.SkillQueue.LessThanWarningThreshold) { EveMonClient.Notifications.NotifySkillQueueLessThanADay(target); } else { EveMonClient.Notifications.InvalidateSkillQueueLessThanADay(target); } } }