/// <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;
        }