Archived
1
0

Refactored core

UI navigation framework

Related Work Items: #408, #414, #416
This commit is contained in:
Michael Gordeev
2020-06-15 15:46:38 +03:00
parent c58d846057
commit 787a6e9f48
72 changed files with 2002 additions and 1227 deletions
@@ -1,45 +1,49 @@
using Newtonsoft.Json;
using System;
using System.Threading.Tasks;
using System.Net.Http;
using Windows.UI.Xaml.Data;
using FoxTube.Services;
using FoxTube.Utils;
using Google.Apis.Blogger.v3;
using Google.Apis.Blogger.v3.Data;
namespace FoxTube.Models.Collections
{
public class InboxCollection : ViewCollection<InboxItem>
public class InboxCollection : ViewCollection<Post>
{
private int _pageNumber = 0;
private HttpClient _httpClient = new HttpClient();
private string nextPageToken;
public override async Task<LoadMoreItemsResult> LoadItems()
{
// TODO: Add backend
HttpResponseMessage response = await _httpClient.GetAsync($"https://xfox111.net/API/FoxTube/Inbox?" +
$"lang={Storage.GetValue<string>(Storage.Settings.UILanguage)}&" +
$"currentVersion={Metrics.CurrentVersion}&" +
$"itemsCount={ItemsPerRequest}&" +
$"iteration={_pageNumber}");
if (!response.IsSuccessStatusCode || response.StatusCode == System.Net.HttpStatusCode.NoContent)
try
{
PostsResource.ListRequest request = InboxService.Service.Posts.List(SecretConstants.BlogId);
request.FetchImages = false;
request.PageToken = nextPageToken;
request.Labels = "FoxTube";
request.MaxResults = ItemsPerRequest;
request.OrderBy = PostsResource.ListRequest.OrderByEnum.UPDATED;
PostList response = await request.ExecuteAsync();
foreach (Post post in response.Items)
Items.Add(post);
HasMoreItems = !string.IsNullOrWhiteSpace(nextPageToken = response.NextPageToken);
return new LoadMoreItemsResult
{
Count = (uint)response.Items.Count
};
}
catch (Exception e)
{
Metrics.SendReport(new Exception("Unable to load inbox", e));
HasMoreItems = false;
return new LoadMoreItemsResult
{
Count = 0
};
}
InboxItem[] newItems = JsonConvert.DeserializeObject<InboxItem[]>(await response.Content.ReadAsStringAsync());
foreach (InboxItem item in newItems)
Items.Add(item);
_pageNumber++;
return new LoadMoreItemsResult
{
Count = (uint)newItems.Length
};
}
}
}
@@ -8,7 +8,7 @@ namespace FoxTube.Models.Collections
{
public abstract class ViewCollection<T> : ObservableCollection<T>, ISupportIncrementalLoading
{
public int ItemsPerRequest { get; set; }
public int ItemsPerRequest { get; set; } = 25;
public bool HasMoreItems { get; protected set; } = true;
public IAsyncOperation<LoadMoreItemsResult> LoadMoreItemsAsync(uint count) =>