private async void GetWishlist() { if (!string.IsNullOrEmpty(_username) && _password.Length > 0) { Globals.StatusBar.IsDbProcessing = true; Globals.StatusBar.IsWorkProcessing = true; Globals.StatusBar.ProgressText = "Loading Data..."; UInt32[] dbIdList = { }; using (var context = new DatabaseContext()) { //gets a list of all vnids that are in the VnWishlist where the userId is the logged in user List <uint> idEntry = (from v in context.VnWishList where v.UserId.Equals(_userId) select v.VnId).ToList(); List <uint> idList = idEntry.ToList(); //gets a list of titles of all items in VnIdList which contain an id from the above vnlist, //which is any item in the wishlist table List <string> entry = (from first in context.VnIdList join second in idList on first.VnId equals second select first.Title).ToList(); if (entry.Count > 0) { _userListCollection.InsertRange(entry); } if (idList.Count > 0) { dbIdList = idList.ToArray(); } } List <Tuple <uint, string> > dbItemsToAdd = new List <Tuple <uint, string> >(); List <VnWishList> wishListItems = new List <VnWishList>(); bool removeItems = false; using (Vndb client = new Vndb(Username, Password)) { bool hasMore = true; RequestOptions ro = new RequestOptions(); int page = 1; List <UInt32> idList = new List <uint>(); //get the list of all ids on the wishlist int errorCounter = 0; while (hasMore) { ro.Page = page; ro.Count = 100; try { if (dbIdList.Length > 0) { VndbResponse <Wishlist> wishlist = await client.GetWishlistAsync(VndbFilters.UserId.Equals(_userId)& VndbFilters.VisualNovel.NotEquals(dbIdList), VndbFlags.FullWishlist, ro); if (wishlist != null && wishlist.Count > 0) { hasMore = wishlist.HasMore; idList.AddRange(wishlist.Select(wish => wish.VisualNovelId)); //dbWishlistToAdd.AddRange(wishlist); wishListItems.AddRange(wishlist.Select(item => new VnWishList() { UserId = item.UserId, VnId = item.VisualNovelId, Priority = item.Priority.ToString(), Added = item.AddedOn.ToString(CultureInfo.InvariantCulture) })); page++; } else if (wishlist != null && wishlist.Count == 0) { wishlist = await client.GetWishlistAsync(VndbFilters.UserId.Equals(_userId), VndbFlags.FullWishlist, ro); if (wishlist != null) { hasMore = wishlist.HasMore; idList.AddRange(wishlist.Select(wish => wish.VisualNovelId)); //dbWishlistToAdd.AddRange(wishlist); wishListItems.AddRange(wishlist.Select(item => new VnWishList() { UserId = item.UserId, VnId = item.VisualNovelId, Priority = item.Priority.ToString(), Added = item.AddedOn.ToString(CultureInfo.InvariantCulture) })); page++; removeItems = true; } } else { HandleError.HandleErrors(client.GetLastError(), errorCounter); errorCounter++; } } else { var wishlist = await client.GetWishlistAsync(VndbFilters.UserId.Equals(_userId), VndbFlags.FullWishlist, ro); if (wishlist != null) { hasMore = wishlist.HasMore; idList.AddRange(wishlist.Select(wish => wish.VisualNovelId)); //dbWishlistToAdd.AddRange(wishlist); wishListItems.AddRange(wishlist.Select(item => new VnWishList() { UserId = item.UserId, VnId = item.VisualNovelId, Priority = item.Priority.ToString(), Added = item.AddedOn.ToString(CultureInfo.InvariantCulture) })); page++; } else { HandleError.HandleErrors(client.GetLastError(), errorCounter); errorCounter++; } } } catch (Exception ex) { Globals.Logger.Error(ex); throw; } } //get names from ids on wishlist, and add them to ObservableCollection hasMore = true; page = 1; while (hasMore) { ro.Page = page; ro.Count = 25; try { var data = await client.GetVisualNovelAsync(VndbFilters.Id.Equals(idList.ToArray()), VndbFlags.Basic, ro); if (data != null) { hasMore = data.HasMore; foreach (var item in data) { _userListCollection.Add(item.Name); dbItemsToAdd.Add(new Tuple <uint, string>(item.Id, item.Name)); } page++; } else { HandleError.HandleErrors(client.GetLastError(), errorCounter); errorCounter++; } } catch (Exception ex) { Globals.Logger.Error(ex); throw; } } client.Dispose(); } AddToIdListDb(dbItemsToAdd); AddWishlistToDb(wishListItems, removeItems); Globals.StatusBar.ProgressText = "Done"; Globals.StatusBar.IsDbProcessing = false; Globals.StatusBar.IsWorkProcessing = false; await Task.Delay(1500); Globals.StatusBar.ProgressText = string.Empty; IsUserInputEnabled = true; } }