public async Task <KeyValuePair <string, IEnumerable <MediaFields> > > GetLatestItemsAsync()
        {
            await TraverseAndCacheAsync();

            var entry = CachedEntries.Last();

            return(new KeyValuePair <string, IEnumerable <MediaFields> >(entry.Key, entry.Value));
        }
        public async Task TraverseAndCacheAsync()
        {
            bool traverse              = true;
            var  lastTimestamp         = LastCachedItem.HasValue ? new DateTime(LastCachedItem.Value.Ticks) : (DateTime?)null;
            InstagramResponse?response = null;

            void ProcessItem(MediaFields item)
            {
                if (LastCachedItem == null || LastCachedItem.Value < item.Timestamp)
                {
                    LastCachedItem = item.Timestamp;
                }

                if (lastTimestamp.HasValue && item.Timestamp <= lastTimestamp.Value)
                {
                    traverse = false;
                    return;
                }

                var date = item.Timestamp !.Value.ToString("yyyy-MM-dd");

                if (!CachedEntries.ContainsKey(date))
                {
                    CachedEntries[date] = new Stack <MediaFields>();
                }
                CachedEntries[date].Push(item);
            }

            var fields = "timestamp,media_url,id,media_type,thumbnail_url";

            while (traverse)
            {
                response = await GetPostsAsync($"{fields},caption", response?.Paging?.Next);

                if (response.Paging.Next == null || Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT")?.ToLower() == "development")
                {
                    traverse = false;                                                                                                                           //If there's no next or if we're in dev, no need to fetch more
                }
                foreach (var item in response.Data)
                {
                    if (item.MediaType == MediaType.CAROUSEL_ALBUM)
                    {
                        var albumContents = await GetAlbumContentsAsync(item.Id !, fields);

                        foreach (var albumItem in albumContents.Data)
                        {
                            albumItem.Caption = item.Caption;
                            ProcessItem(albumItem);
                        }
                    }
                    else
                    {
                        ProcessItem(item);
                    }
                }
            }
        }
        public async Task <KeyValuePair <string, IEnumerable <MediaFields> >?> GetItemsByDateStringAsync(string date)
        {
            if (date is null)
            {
                throw new ArgumentNullException(nameof(date));
            }

            await TraverseAndCacheAsync();

            if (CachedEntries.TryGetValue(date, out var items))
            {
                return(new KeyValuePair <string, IEnumerable <MediaFields> >(date, items));
            }
            return(null);
        }
Exemplo n.º 4
0
        public override async void LoadCachedEntries()
        {
            if (_cachedItemsLoaded)
            {
                return;
            }
            _cachedItemsLoaded = true;
            var files = await ApplicationData.Current.LocalFolder.GetFilesAsync();

            foreach (var file in files)
            {
                if (file.FileType == ".json")
                {
                    var data = await file.GetBasicPropertiesAsync();

                    CachedEntries.Add(new CachedEntryModel
                    {
                        Date     = data.DateModified.LocalDateTime.ToString("dd/MM/yyyy HH:mm"),
                        FileName = file.Name,
                        Size     = Utilities.SizeSuffix((long)data.Size)
                    });
                }
            }
            EmptyCachedListVisiblity = files.Count == 0;
            try
            {
                var folder = await ApplicationData.Current.LocalFolder.GetFolderAsync("AnimeDetails");

                var data = await folder.GetFilesAsync();

                TotalFilesCached = $"Remove all anime details data({data.Count}files)";
                RemoveAllCachedDataButtonVisibility = true;
            }
            catch (Exception)
            {
                //No folder yet
                RemoveAllCachedDataButtonVisibility = false;
            }
        }