/// <summary> /// Queries the character's data. Used generically across multiple methods. /// </summary> /// <param name="targetMethod">The ESI method to use.</param> /// <param name="onError">The callback if an error occurs.</param> /// <param name="onSuccess">The callback if the request is successful.</param> private void QueryCharacterData <T>(ESIAPICharacterMethods targetMethod, CharacterQueryMonitor <T> .NotifyErrorCallback onError, Action <T> onSuccess) where T : class { ESIKey apiKey = m_ccpCharacter.Identity.FindAPIKeyWithAccess(targetMethod); // Network available, has access if (NetworkMonitor.IsNetworkAvailable && apiKey != null) { EveMonClient.APIProviders.CurrentProvider.QueryEsiAsync <T>(targetMethod, apiKey.AccessToken, m_ccpCharacter.CharacterID, (result, ignore) => { var target = m_ccpCharacter; // Character may have been deleted or set to not be monitored if (target != null && target.Monitored) { // Notify if an error occured if (target.ShouldNotifyError(result, targetMethod)) { onError.Invoke(target, result); } if (!result.HasError) { onSuccess.Invoke(result.Result); } } }); } }
/// <summary> /// Initializes a new instance of the <see cref="CharacterDataQuerying"/> class. /// </summary> /// <param name="ccpCharacter">The CCP character.</param> internal CharacterDataQuerying(CCPCharacter ccpCharacter) { var notifiers = EveMonClient.Notifications; m_ccpCharacter = ccpCharacter; m_characterQueryMonitors = new List <IQueryMonitorEx>(); // Add the monitors in an order as they will appear in the throbber menu m_charSheetMonitor = new CharacterQueryMonitor <EsiAPICharacterSheet>(ccpCharacter, ESIAPICharacterMethods.CharacterSheet, OnCharacterSheetUpdated, notifiers.NotifyCharacterSheetError); m_characterQueryMonitors.Add(m_charSheetMonitor); m_characterQueryMonitors.Add(new CharacterQueryMonitor <EsiAPISkillQueue>( ccpCharacter, ESIAPICharacterMethods.SkillQueue, OnSkillQueueUpdated, notifiers.NotifySkillQueueError)); m_characterQueryMonitors.Add(new CharacterQueryMonitor <EsiAPIStandings>( ccpCharacter, ESIAPICharacterMethods.Standings, OnStandingsUpdated, notifiers.NotifyCharacterStandingsError) { QueryOnStartup = true }); m_characterQueryMonitors.Add(new CharacterQueryMonitor <EsiAPIContactsList>( ccpCharacter, ESIAPICharacterMethods.ContactList, OnContactsUpdated, notifiers.NotifyCharacterContactsError) { QueryOnStartup = true }); m_characterQueryMonitors.Add(new CharacterQueryMonitor <EsiAPIFactionalWarfareStats>( ccpCharacter, ESIAPICharacterMethods.FactionalWarfareStats, OnFactionalWarfareStatsUpdated, notifiers. NotifyCharacterFactionalWarfareStatsError) { QueryOnStartup = true }); m_characterQueryMonitors.Add(new CharacterQueryMonitor <EsiAPIMedals>(ccpCharacter, ESIAPICharacterMethods.Medals, OnMedalsUpdated, notifiers.NotifyCharacterMedalsError) { QueryOnStartup = true }); m_characterQueryMonitors.Add(new CharacterQueryMonitor <EsiAPIKillLog>(ccpCharacter, ESIAPICharacterMethods.KillLog, OnKillLogUpdated, notifiers.NotifyCharacterKillLogError) { QueryOnStartup = true }); m_characterQueryMonitors.Add(new CharacterQueryMonitor <EsiAPIAssetList>(ccpCharacter, ESIAPICharacterMethods.AssetList, OnAssetsUpdated, notifiers.NotifyCharacterAssetsError) { QueryOnStartup = true }); m_charMarketOrdersMonitor = new CharacterQueryMonitor <EsiAPIMarketOrders>( ccpCharacter, ESIAPICharacterMethods.MarketOrders, OnMarketOrdersUpdated, notifiers.NotifyCharacterMarketOrdersError) { QueryOnStartup = true }; m_characterQueryMonitors.Add(m_charMarketOrdersMonitor); m_charContractsMonitor = new CharacterQueryMonitor <EsiAPIContracts>(ccpCharacter, ESIAPICharacterMethods.Contracts, OnContractsUpdated, notifiers.NotifyCharacterContractsError) { QueryOnStartup = true }; m_characterQueryMonitors.Add(m_charContractsMonitor); m_characterQueryMonitors.Add(new CharacterQueryMonitor <EsiAPIWalletJournal>( ccpCharacter, ESIAPICharacterMethods.WalletJournal, OnWalletJournalUpdated, notifiers.NotifyCharacterWalletJournalError) { QueryOnStartup = true }); m_characterQueryMonitors.Add(new CharacterQueryMonitor <EsiAPIWalletTransactions>( ccpCharacter, ESIAPICharacterMethods.WalletTransactions, OnWalletTransactionsUpdated, notifiers.NotifyCharacterWalletTransactionsError) { QueryOnStartup = true }); m_charIndustryJobsMonitor = new CharacterQueryMonitor <EsiAPIIndustryJobs>( ccpCharacter, ESIAPICharacterMethods.IndustryJobs, OnIndustryJobsUpdated, notifiers.NotifyCharacterIndustryJobsError) { QueryOnStartup = true }; m_characterQueryMonitors.Add(m_charIndustryJobsMonitor); m_characterQueryMonitors.Add(new CharacterQueryMonitor <EsiAPIResearchPoints>( ccpCharacter, ESIAPICharacterMethods.ResearchPoints, OnResearchPointsUpdated, notifiers.NotifyCharacterResearchPointsError) { QueryOnStartup = true }); m_characterQueryMonitors.Add(new CharacterQueryMonitor <EsiAPIMailMessages>( ccpCharacter, ESIAPICharacterMethods.MailMessages, OnEVEMailMessagesUpdated, notifiers.NotifyEVEMailMessagesError) { QueryOnStartup = true }); m_characterQueryMonitors.Add(new CharacterQueryMonitor <EsiAPINotifications>( ccpCharacter, ESIAPICharacterMethods.Notifications, OnEVENotificationsUpdated, notifiers.NotifyEVENotificationsError) { QueryOnStartup = true }); m_characterQueryMonitors.Add(new CharacterQueryMonitor <EsiAPICalendarEvents>( ccpCharacter, ESIAPICharacterMethods.UpcomingCalendarEvents, OnUpcomingCalendarEventsUpdated, notifiers. NotifyCharacterUpcomingCalendarEventsError) { QueryOnStartup = true }); m_characterQueryMonitors.Add(new CharacterQueryMonitor <EsiAPIPlanetaryColoniesList>( ccpCharacter, ESIAPICharacterMethods.PlanetaryColonies, OnPlanetaryColoniesUpdated, notifiers. NotifyCharacterPlanetaryColoniesError) { QueryOnStartup = true }); m_characterQueryMonitors.ForEach(monitor => ccpCharacter.QueryMonitors.Add(monitor)); // Enumerate the basic feature monitors into a separate list m_basicFeaturesMonitors = new List <IQueryMonitorEx>(m_characterQueryMonitors.Count); long basicFeatures = (long)CCPAPIMethodsEnum.BasicCharacterFeatures; foreach (var monitor in m_characterQueryMonitors) { long method = (long)(ESIAPICharacterMethods)monitor.Method; if (method == (method & basicFeatures)) { m_basicFeaturesMonitors.Add(monitor); // If force update is selected, update basic features only if (ccpCharacter.ForceUpdateBasicFeatures) { monitor.ForceUpdate(true); } } } EveMonClient.TimerTick += EveMonClient_TimerTick; }
/// <summary> /// Initializes a new instance of the <see cref="CharacterDataQuerying"/> class. /// </summary> /// <param name="ccpCharacter">The CCP character.</param> internal CharacterDataQuerying(CCPCharacter ccpCharacter) { var notifiers = EveMonClient.Notifications; m_ccpCharacter = ccpCharacter; m_characterQueryMonitors = new List <IQueryMonitorEx>(); m_attrResponse = null; m_lastQueue = null; // Add the monitors in an order as they will appear in the throbber menu m_charSheetMonitor = new CharacterQueryMonitor <EsiAPICharacterSheet>(ccpCharacter, ESIAPICharacterMethods.CharacterSheet, OnCharacterSheetUpdated, notifiers.NotifyCharacterSheetError); m_characterQueryMonitors.Add(m_charSheetMonitor); // Location m_characterQueryMonitors.Add(new CharacterQueryMonitor <EsiAPILocation>( ccpCharacter, ESIAPICharacterMethods.Location, OnCharacterLocationUpdated, notifiers.NotifyCharacterLocationError)); // Clones m_characterQueryMonitors.Add(new CharacterQueryMonitor <EsiAPIClones>( ccpCharacter, ESIAPICharacterMethods.Clones, OnCharacterClonesUpdated, notifiers.NotifyCharacterClonesError)); // Implants m_characterQueryMonitors.Add(new CharacterQueryMonitor <List <int> >( ccpCharacter, ESIAPICharacterMethods.Implants, OnCharacterImplantsUpdated, OnCharacterImplantsFailed)); // Ship m_characterQueryMonitors.Add(new CharacterQueryMonitor <EsiAPIShip>( ccpCharacter, ESIAPICharacterMethods.Ship, OnCharacterShipUpdated, notifiers.NotifyCharacterShipError)); // Skills m_charSkillsMonitor = new CharacterQueryMonitor <EsiAPISkills>( ccpCharacter, ESIAPICharacterMethods.Skills, OnCharacterSkillsUpdated, notifiers.NotifyCharacterSkillsError); m_characterQueryMonitors.Add(m_charSkillsMonitor); // Skill queue m_charSkillQueueMonitor = new CharacterQueryMonitor <EsiAPISkillQueue>( ccpCharacter, ESIAPICharacterMethods.SkillQueue, OnSkillQueueUpdated, notifiers.NotifySkillQueueError); m_characterQueryMonitors.Add(m_charSkillQueueMonitor); // Employment history m_characterQueryMonitors.Add(new CharacterQueryMonitor <EsiAPIEmploymentHistory>( ccpCharacter, ESIAPICharacterMethods.EmploymentHistory, OnCharacterEmploymentUpdated, notifiers.NotifyCharacterEmploymentError)); // Standings m_characterQueryMonitors.Add(new PagedQueryMonitor <EsiAPIStandings, EsiStandingsListItem>(new CharacterQueryMonitor <EsiAPIStandings>( ccpCharacter, ESIAPICharacterMethods.Standings, OnStandingsUpdated, notifiers.NotifyCharacterStandingsError) { QueryOnStartup = true })); // Contacts m_characterQueryMonitors.Add(new PagedQueryMonitor <EsiAPIContactsList, EsiContactListItem>(new CharacterQueryMonitor <EsiAPIContactsList>(ccpCharacter, ESIAPICharacterMethods.ContactList, OnContactsUpdated, notifiers.NotifyCharacterContactsError) { QueryOnStartup = true })); // Factional warfare m_characterQueryMonitors.Add(new CharacterQueryMonitor <EsiAPIFactionalWarfareStats>( ccpCharacter, ESIAPICharacterMethods.FactionalWarfareStats, OnFactionalWarfareStatsUpdated, notifiers. NotifyCharacterFactionalWarfareStatsError) { QueryOnStartup = true }); // Medals m_characterQueryMonitors.Add(new PagedQueryMonitor <EsiAPIMedals, EsiMedalsListItem>(new CharacterQueryMonitor <EsiAPIMedals>(ccpCharacter, ESIAPICharacterMethods.Medals, OnMedalsUpdated, notifiers.NotifyCharacterMedalsError) { QueryOnStartup = true })); // Kill log m_characterQueryMonitors.Add(new PagedQueryMonitor <EsiAPIKillLog, EsiKillLogListItem>(new CharacterQueryMonitor <EsiAPIKillLog>(ccpCharacter, ESIAPICharacterMethods.KillLog, OnKillLogUpdated, notifiers.NotifyCharacterKillLogError) { QueryOnStartup = true })); // Assets m_characterQueryMonitors.Add(new PagedQueryMonitor <EsiAPIAssetList, EsiAssetListItem>(new CharacterQueryMonitor <EsiAPIAssetList>(ccpCharacter, ESIAPICharacterMethods.AssetList, OnAssetsUpdated, notifiers.NotifyCharacterAssetsError) { QueryOnStartup = true })); // Market orders m_charMarketOrdersMonitor = new CharacterQueryMonitor <EsiAPIMarketOrders>( ccpCharacter, ESIAPICharacterMethods.MarketOrders, OnMarketOrdersUpdated, notifiers.NotifyCharacterMarketOrdersError) { QueryOnStartup = true }; m_characterQueryMonitors.Add(m_charMarketOrdersMonitor); // Contracts m_charContractsMonitor = new PagedQueryMonitor <EsiAPIContracts, EsiContractListItem>(new CharacterQueryMonitor <EsiAPIContracts>(ccpCharacter, ESIAPICharacterMethods.Contracts, OnContractsUpdated, notifiers.NotifyCharacterContractsError) { QueryOnStartup = true }); m_characterQueryMonitors.Add(m_charContractsMonitor); // Wallet journal m_characterQueryMonitors.Add(new PagedQueryMonitor <EsiAPIWalletJournal, EsiWalletJournalListItem>(new CharacterQueryMonitor <EsiAPIWalletJournal>( ccpCharacter, ESIAPICharacterMethods.WalletJournal, OnWalletJournalUpdated, notifiers.NotifyCharacterWalletJournalError) { QueryOnStartup = true })); // Wallet balance m_characterQueryMonitors.Add(new CharacterQueryMonitor <string>( ccpCharacter, ESIAPICharacterMethods.AccountBalance, OnWalletBalanceUpdated, notifiers.NotifyCharacterBalanceError)); // Wallet transactions m_characterQueryMonitors.Add(new PagedQueryMonitor <EsiAPIWalletTransactions, EsiWalletTransactionsListItem>(new CharacterQueryMonitor < EsiAPIWalletTransactions>(ccpCharacter, ESIAPICharacterMethods. WalletTransactions, OnWalletTransactionsUpdated, notifiers. NotifyCharacterWalletTransactionsError) { QueryOnStartup = true })); // Industry m_charIndustryJobsMonitor = new CharacterQueryMonitor <EsiAPIIndustryJobs>( ccpCharacter, ESIAPICharacterMethods.IndustryJobs, OnIndustryJobsUpdated, notifiers.NotifyCharacterIndustryJobsError) { QueryOnStartup = true }; m_characterQueryMonitors.Add(m_charIndustryJobsMonitor); // Research points m_characterQueryMonitors.Add(new CharacterQueryMonitor <EsiAPIResearchPoints>( ccpCharacter, ESIAPICharacterMethods.ResearchPoints, OnResearchPointsUpdated, notifiers.NotifyCharacterResearchPointsError) { QueryOnStartup = true }); // Mail m_characterQueryMonitors.Add(new CharacterQueryMonitor <EsiAPIMailMessages>( ccpCharacter, ESIAPICharacterMethods.MailMessages, OnEVEMailMessagesUpdated, notifiers.NotifyEVEMailMessagesError) { QueryOnStartup = true }); // Mailing lists m_characterQueryMonitors.Add(new CharacterQueryMonitor <EsiAPIMailingLists>( ccpCharacter, ESIAPICharacterMethods.MailingLists, OnEveMailingListsUpdated, notifiers.NotifyMailingListsError)); // Notifications m_characterQueryMonitors.Add(new CharacterQueryMonitor <EsiAPINotifications>( ccpCharacter, ESIAPICharacterMethods.Notifications, OnEVENotificationsUpdated, notifiers.NotifyEVENotificationsError) { QueryOnStartup = true }); // Calendar m_characterQueryMonitors.Add(new CharacterQueryMonitor <EsiAPICalendarEvents>( ccpCharacter, ESIAPICharacterMethods.UpcomingCalendarEvents, OnUpcomingCalendarEventsUpdated, notifiers. NotifyCharacterUpcomingCalendarEventsError) { QueryOnStartup = true }); // PI m_characterQueryMonitors.Add(new CharacterQueryMonitor <EsiAPIPlanetaryColoniesList>( ccpCharacter, ESIAPICharacterMethods.PlanetaryColonies, OnPlanetaryColoniesUpdated, notifiers. NotifyCharacterPlanetaryColoniesError) { QueryOnStartup = true }); m_characterQueryMonitors.ForEach(monitor => ccpCharacter.QueryMonitors.Add(monitor)); // Enumerate the basic feature monitors into a separate list m_basicFeaturesMonitors = new List <IQueryMonitorEx>(m_characterQueryMonitors.Count); long basicFeatures = (long)CCPAPIMethodsEnum.BasicCharacterFeatures; foreach (var monitor in m_characterQueryMonitors) { long method = (long)(ESIAPICharacterMethods)monitor.Method; if (method == (method & basicFeatures)) { m_basicFeaturesMonitors.Add(monitor); // If force update is selected, update basic features only if (ccpCharacter.ForceUpdateBasicFeatures) { monitor.ForceUpdate(true); } } } EveMonClient.TimerTick += EveMonClient_TimerTick; }
/// <summary> /// Initializes a new instance of the <see cref="CharacterDataQuerying"/> class. /// </summary> /// <param name="ccpCharacter">The CCP character.</param> internal CharacterDataQuerying(CCPCharacter ccpCharacter) { // Initializes the query monitors m_ccpCharacter = ccpCharacter; m_characterQueryMonitors = new List <IQueryMonitorEx>(); m_charSheetMonitor = new CharacterQueryMonitor <EsiAPICharacterSheet>(ccpCharacter, ESIAPICharacterMethods.CharacterSheet, OnCharacterSheetUpdated); IQueryMonitorEx skillQueueMonitor = new CharacterQueryMonitor <EsiAPISkillQueue>(ccpCharacter, ESIAPICharacterMethods.SkillQueue, OnSkillQueueUpdated); IQueryMonitorEx charStandingsMonitor = new CharacterQueryMonitor <EsiAPIStandings>(ccpCharacter, ESIAPICharacterMethods.Standings, OnStandingsUpdated) { QueryOnStartup = true }; IQueryMonitorEx charContactsMonitor = new CharacterQueryMonitor <EsiAPIContactsList>(ccpCharacter, ESIAPICharacterMethods.ContactList, OnContactsUpdated) { QueryOnStartup = true }; IQueryMonitorEx charFacWarStatsMonitor = new CharacterQueryMonitor <EsiAPIFactionalWarfareStats>(ccpCharacter, ESIAPICharacterMethods.FactionalWarfareStats, OnFactionalWarfareStatsUpdated) { QueryOnStartup = true }; IQueryMonitorEx charMedalsMonitor = new CharacterQueryMonitor <EsiAPIMedals>(ccpCharacter, ESIAPICharacterMethods.Medals, OnMedalsUpdated) { QueryOnStartup = true }; IQueryMonitorEx charKillLogMonitor = new CharacterQueryMonitor <EsiAPIKillLog>(ccpCharacter, ESIAPICharacterMethods.KillLog, OnKillLogUpdated) { QueryOnStartup = true }; IQueryMonitorEx charAssetsMonitor = new CharacterQueryMonitor <EsiAPIAssetList>(ccpCharacter, ESIAPICharacterMethods.AssetList, OnAssetsUpdated) { QueryOnStartup = true }; m_charMarketOrdersMonitor = new CharacterQueryMonitor <EsiAPIMarketOrders>(ccpCharacter, ESIAPICharacterMethods.MarketOrders, OnMarketOrdersUpdated) { QueryOnStartup = true }; m_charContractsMonitor = new CharacterQueryMonitor <EsiAPIContracts>(ccpCharacter, ESIAPICharacterMethods.Contracts, OnContractsUpdated) { QueryOnStartup = true }; IQueryMonitorEx charWalletJournalMonitor = new CharacterQueryMonitor <EsiAPIWalletJournal>(ccpCharacter, ESIAPICharacterMethods.WalletJournal, OnWalletJournalUpdated) { QueryOnStartup = true }; IQueryMonitorEx charWalletTransactionsMonitor = new CharacterQueryMonitor <EsiAPIWalletTransactions>(ccpCharacter, ESIAPICharacterMethods.WalletTransactions, OnWalletTransactionsUpdated) { QueryOnStartup = true }; m_charIndustryJobsMonitor = new CharacterQueryMonitor <EsiAPIIndustryJobs>(ccpCharacter, ESIAPICharacterMethods.IndustryJobs, OnIndustryJobsUpdated) { QueryOnStartup = true }; IQueryMonitorEx charResearchPointsMonitor = new CharacterQueryMonitor <EsiAPIResearchPoints>(ccpCharacter, ESIAPICharacterMethods.ResearchPoints, OnResearchPointsUpdated) { QueryOnStartup = true }; IQueryMonitorEx charEVEMailMessagesMonitor = new CharacterQueryMonitor <EsiAPIMailMessages>(ccpCharacter, ESIAPICharacterMethods.MailMessages, OnEVEMailMessagesUpdated) { QueryOnStartup = true }; IQueryMonitorEx charEVENotificationsMonitor = new CharacterQueryMonitor <EsiAPINotifications>(ccpCharacter, ESIAPICharacterMethods.Notifications, OnEVENotificationsUpdated) { QueryOnStartup = true }; IQueryMonitorEx charUpcomingCalendarEventsMonitor = new CharacterQueryMonitor <EsiAPICalendarEvents>(ccpCharacter, ESIAPICharacterMethods.UpcomingCalendarEvents, OnUpcomingCalendarEventsUpdated) { QueryOnStartup = true }; IQueryMonitorEx charPlanetaryColoniesMonitor = new CharacterQueryMonitor <EsiAPIPlanetaryColoniesList>(ccpCharacter, ESIAPICharacterMethods.PlanetaryColonies, OnPlanetaryColoniesUpdated) { QueryOnStartup = true }; // Add the monitors in an order as they will appear in the throbber menu m_characterQueryMonitors.AddRange(new[] { m_charSheetMonitor, skillQueueMonitor, charStandingsMonitor, charContactsMonitor, charFacWarStatsMonitor, charMedalsMonitor, charKillLogMonitor, charAssetsMonitor, m_charMarketOrdersMonitor, m_charContractsMonitor, charWalletJournalMonitor, charWalletTransactionsMonitor, m_charIndustryJobsMonitor, charPlanetaryColoniesMonitor, charResearchPointsMonitor, charEVEMailMessagesMonitor, charEVENotificationsMonitor, charUpcomingCalendarEventsMonitor }); m_characterQueryMonitors.ForEach(monitor => ccpCharacter.QueryMonitors.Add(monitor)); m_basicFeaturesMonitors = m_characterQueryMonitors .Select(monitor => new { monitor, method = (ESIAPICharacterMethods)monitor.Method }) .Where(monitor => (long)monitor.method == ((long)monitor.method & (long)CCPAPIMethodsEnum.BasicCharacterFeatures)) .Select(basicFeature => basicFeature.monitor) .ToList(); if (ccpCharacter.ForceUpdateBasicFeatures) { m_basicFeaturesMonitors.ForEach(monitor => monitor.ForceUpdate(true)); } EveMonClient.TimerTick += EveMonClient_TimerTick; }