|
1 | 1 | using System.Buffers; |
2 | 2 | using System.Text; |
3 | 3 | using System.Text.Json; |
| 4 | +using System.Text.Json.Serialization; |
4 | 5 | using System.Text.RegularExpressions; |
5 | 6 | using HtmlAgilityPack; |
6 | 7 | using Microsoft.AspNetCore.Http; |
@@ -55,6 +56,7 @@ public async Task<IActionResult> Run( |
55 | 56 | { |
56 | 57 | var url = QueryHelpers.AddQueryString(BaseUrl, new Dictionary<string, StringValues> |
57 | 58 | { |
| 59 | + {"order", "date_desc" }, |
58 | 60 | {"page", page.ToString() }, |
59 | 61 | }); |
60 | 62 |
|
@@ -96,16 +98,12 @@ private static bool AllActiviesSynced( |
96 | 98 | DateTime lastSyncedDateTime) |
97 | 99 | { |
98 | 100 | var activities = GetActivitiesArray(root); |
99 | | - HashSet<DateTime> dates = []; |
| 101 | + var dtos = activities.EnumerateArray() |
| 102 | + .Select(x => x.Deserialize<ActivityItemProjection>()) |
| 103 | + .ToList(); |
100 | 104 |
|
101 | | - foreach (var activity in activities.EnumerateArray()) |
102 | | - { |
103 | | - var date = activity.GetProperty("date"); |
104 | | - var dateParsed = DateTime.ParseExact(date.ToString(), "yyyy-MM-dd", null); |
105 | | - dates.Add(dateParsed); |
106 | | - } |
107 | | - |
108 | | - return dates.All(d => d < lastSyncedDateTime); |
| 105 | + return dtos.Count != 0 |
| 106 | + && dtos.All(x => x is not null && x.Date != default && x.Date < lastSyncedDateTime); |
109 | 107 | } |
110 | 108 |
|
111 | 109 | private async Task<DateTime> GetLastSynchronizedDate(CancellationToken cancellationToken) |
@@ -240,6 +238,7 @@ private async Task StoreData( |
240 | 238 |
|
241 | 239 | private record ActivityItemProjection |
242 | 240 | { |
| 241 | + [JsonPropertyName("date")] |
243 | 242 | public DateTime Date { get; init; } |
244 | 243 | } |
245 | 244 | } |
0 commit comments