public void AddSnapshotMiniature(SnapshotMiniature miniature) { PreventCacheOverflow(miniature.Data.Length); if (!_snapshotMiniaturesCache.ContainsKey(miniature.Snapshot.Id)) { _snapshotMiniaturesCache.TryAdd(miniature.Snapshot.Id, miniature); } }
public async Task <IEnumerable <SnapshotMiniature> > GetSnapshotMiniaturesAsync(IEnumerable <LocationSnapshot> snapshots) { if (!snapshots.Any()) { return(new List <SnapshotMiniature>()); } var miniatures = _miniaturesCache.GetSnapshotMiniatures(snapshots); if (miniatures.Count() == snapshots.Count()) { return(miniatures); } var picturesUrl = await GetPicturesUrl(); picturesUrl = $"{picturesUrl}?snapshotsIds={string.Join(",", snapshots.Select(_ => _.Id))}"; var result = await _webClient.GetAsync <IEnumerable <ExpandoObject> >(picturesUrl); miniatures = result.Select(_ => { var descriptor = (IDictionary <string, object>)_; return(new { PictureFileName = descriptor["pictureFileName"].ToString(), Thumbnail = descriptor["thumbnail"].ToString() }); }).Join(snapshots, desc => desc.PictureFileName, snap => snap.PictureFileName, (desc, snap) => { var miniature = new SnapshotMiniature { Snapshot = snap, Data = Convert.FromBase64String(desc.Thumbnail) }; _miniaturesCache.AddSnapshotMiniature(miniature); return(miniature); }) .ToList(); return(miniatures); }