Ejemplo n.º 1
0
        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; });
        }
Ejemplo n.º 2
0
        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));
            }
        }