public async Task UpdateReelsFeed(ReelsTrayFetchReason fetchReason = ReelsTrayFetchReason.ColdStart) { if (_justUpdated) { return; } var result = await Instagram.Instance.GetReelsTrayFeed(fetchReason); if (!result.IsSucceeded) { return; } await CoreApplication.MainView.CoreWindow.Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () => { try { SyncReels(result.Value); } catch (ArgumentOutOfRangeException e) { // TODO: investigate origin of ArgumentOutOfRangeException DebugLogger.LogException(e); } }); _justUpdated = true; _ = Task.Delay(TimeSpan.FromSeconds(10)).ContinueWith(x => { _justUpdated = false; }); }
public async Task <Result <Reel[]> > GetReelsTrayFeed(ReelsTrayFetchReason fetchReason = ReelsTrayFetchReason.ColdStart) { ValidateLoggedIn(); try { var uri = UriCreator.GetReelsTrayUri(); string reason; switch (fetchReason) { case ReelsTrayFetchReason.WarmStartWithFeed: reason = "warm_start_with_feed"; break; case ReelsTrayFetchReason.PullToRefresh: reason = "pull_to_refresh"; break; default: reason = "cold_start"; break; } var data = new Dictionary <string, string> { { "supported_capabilities_new", ReelsCapabilities }, { "reason", reason }, // this can be "cold_start", "warm_start_with_feed", or "pull_to_refresh" { "timezone_offset", ((int)DateTimeOffset.Now.Offset.TotalSeconds).ToString() }, { "_csrftoken", Session.CsrfToken }, { "_uuid", Device.Uuid.ToString() } }; var response = await _httpClient.PostAsync(uri, new HttpFormUrlEncodedContent(data)); var json = await response.Content.ReadAsStringAsync(); DebugLogger.LogResponse(response); if (response.StatusCode != HttpStatusCode.Ok) { return(Result <Reel[]> .Fail(json, response.ReasonPhrase)); } var payload = JsonConvert.DeserializeObject <JObject>(json); if (payload["status"]?.ToString() != "ok") { return(Result <Reel[]> .Fail(json)); } var reels = payload["tray"].ToObject <Reel[]>(); return(Result <Reel[]> .Success(reels, json)); } catch (Exception e) { DebugLogger.LogException(e); return(Result <Reel[]> .Except(e)); } }