private async Task SyncAddons( WowClientType clientType, IEnumerable <Addon> addons, IAddonProvider provider) { var providerAddonIds = GetExternalIdsForProvider(provider, addons); if (!providerAddonIds.Any()) { return; } var searchResults = await provider.GetAll(clientType, providerAddonIds); foreach (var result in searchResults) { var addon = addons.FirstOrDefault(addon => addon.ExternalId == result.ExternalId); var latestFile = GetLatestFile(result, addon.ChannelType); if (result == null || latestFile == null || latestFile.Version == addon.LatestVersion) { if (addon.ThumbnailUrl != result.ThumbnailUrl) { addon.ThumbnailUrl = result.ThumbnailUrl; _addonRepository.UpdateItem(addon); await SyncThumbnail(addon, true); } else { await SyncThumbnail(addon); } continue; } addon.LatestVersion = latestFile.Version; addon.Name = result.Name; addon.Author = result.Author; addon.DownloadUrl = latestFile.DownloadUrl; if (!string.IsNullOrEmpty(latestFile.GameVersion)) { addon.GameVersion = latestFile.GameVersion; } addon.ThumbnailUrl = result.ThumbnailUrl; addon.ExternalUrl = result.ExternalUrl; await SyncThumbnail(addon); _addonRepository.UpdateItem(addon); } }
private List <string> GetExternalIdsForProvider(IAddonProvider provider, IEnumerable <Addon> addons) { return(addons.Where(addon => addon.ProviderName == provider.Name) .Select(addon => addon.ExternalId) .ToList()); }