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); }
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; } }