public MangaViewModel(IMangaService mangaService) : base() { _mangaService = mangaService; _mangaAPIEnumerator = new MangaApiEnumerator(); BindingOperations.EnableCollectionSynchronization(MangaItems, _CollectionLock); }
protected override async Task ExecuteJob() { if (animes.Any()) { ConcurrentBag <AnimeModel> updatedAnimeEntries = new ConcurrentBag <AnimeModel>(); AnimeApiEnumerator animeApi = new AnimeApiEnumerator(); List <Task> animeRequests = new List <Task>(); JobEvent.NotifyJobProgressChange(0, "Querying animes"); for (int i = 0; i < animes.Count(); i = i + EntriesPerRequest) { var currEntries = animes.Skip(i).Take(EntriesPerRequest); animeRequests.Add( Task.Run(async() => { var requestResult = await animeApi.GetByIdSet(currEntries.Select(e => e.Id).ToArray()); foreach (AnimeModel entry in requestResult) { updatedAnimeEntries.Add(entry); JobEvent.NotifyJobProgressChange(1, isIncremental: true); } })); } await Task.WhenAll(animeRequests); JobEvent.NotifyJobProgressChange(0, "Updating animes", true); animeService.AddOrUpdateRange(updatedAnimeEntries, (progress) => { JobEvent.NotifyJobProgressChange((int)progress, isIncremental: true); }); await Task.Delay(100); } if (mangas.Any()) { ConcurrentBag <MangaModel> updatedMangaEntries = new ConcurrentBag <MangaModel>(); MangaApiEnumerator mangaApi = new MangaApiEnumerator(); List <Task> mangaRequests = new List <Task>(); JobEvent.NotifyJobProgressChange(0, "Querying mangas", true); for (int i = 0; i < mangas.Count(); i = i + EntriesPerRequest) { var currEntries = mangas.Skip(i).Take(EntriesPerRequest); mangaRequests.Add( Task.Run(async() => { var requestResult = await mangaApi.GetByIdSet(currEntries.Select(e => e.Id).ToArray(), false); foreach (MangaModel entry in requestResult) { updatedMangaEntries.Add(entry); JobEvent.NotifyJobProgressChange(1, isIncremental: true); } })); } await Task.WhenAll(mangaRequests); JobEvent.NotifyJobProgressChange(0, "Updating mangas", true); mangaService.AddOrUpdateRange(updatedMangaEntries, (progress) => { JobEvent.NotifyJobProgressChange((int)progress, isIncremental: true); }); } }