/// <summary> /// Gets a single page of bookmarks. /// </summary> /// <param name="conditions">The conditions of the request. It gets and converted to a rest request.</param> public async Task<BookmarkList> GetBookmarks(Conditions conditions) { var request = BuildRequestFromConditions(conditions); request.Resource = "bookmarks"; var content = await ReadabilityClient.MakeRequestAsync(request).ConfigureAwait(false); var js = new StringReader(content); var jr = new JsonTextReader(js); var serializer = new JsonSerializer(); var bookmarkList = serializer.Deserialize<BookmarkList>(jr); return bookmarkList; }
/// <summary> /// Builds a request object from a Condition object. /// </summary> /// <param name="conditions">The conditions to be converted into a request.</param> /// <returns></returns> protected RestRequest BuildRequestFromConditions(Conditions conditions) { RestRequest request = new RestRequest(); var properties = conditions.GetType().GetProperties().Where(a => a.MemberType.Equals(MemberTypes.Property) && a.GetValue(conditions) != null); foreach (var property in properties) { var attribute = property.GetCustomAttribute(typeof(JsonPropertyAttribute)); var castAttribute = (JsonPropertyAttribute)attribute; request.AddParameter(castAttribute.PropertyName, property.GetValue(conditions)); } return request; }
/// <summary> /// Gets all the bookmarks based on a set of conditions. Should be doing the recursion at this level though. /// </summary> /// <param name="conditions">The conditions of the request. It gets and converted to a rest request.</param> public async Task<BookmarkList> GetAllBookmarks(Conditions conditions) { conditions.PerPage = 50; var masterList = await GetBookmarks(conditions); var allTasks = new List<Task<BookmarkList>>(); for (var i = 2; i <= masterList.Meta.NumPages; i++) { conditions.Page = i; allTasks.Add(GetBookmarks(conditions)); } foreach (var bookmarkList in await Task.WhenAll(allTasks)) { foreach (var bookmark in bookmarkList.Bookmarks) { masterList.Bookmarks.Add(bookmark); }; } return masterList; }
public BookmarkList() { Conditions = new Conditions(); Meta = new Meta(); Bookmarks = new ObservableCollection<Bookmark>(); }
/// <summary> /// Syncs the all the users data from a given DateTime. /// </summary> /// <param name="readabilityClient">The client to use to make the requests.</param> /// <param name="syncDateTime">The date and time from when to sync.</param> public async Task Sync(MainViewModel mainViewModel, DateTime syncDateTime) { mainViewModel.ProgressText = "Starting sync..."; mainViewModel.ProgressIndeterminate = true; mainViewModel.ProgressVisible = true; var conditions = new Conditions { UpdatedSince = syncDateTime }; var updateList = await mainViewModel.ReadabilityClient.BookmarkListEndpoint.GetAllBookmarks(conditions); await MergeSaveBookmarkList(mainViewModel, updateList); conditions.OnlyDeleted = 1; var deleteList = await mainViewModel.ReadabilityClient.BookmarkListEndpoint.GetAllBookmarks(conditions); if (!syncDateTime.Equals(new DateTime())) { await DeleteBookmarkList(mainViewModel.BookmarkList, deleteList); } mainViewModel.ProgressVisible = false; }