internal async void EnqueueImageDownload(ReportViewItem viewItem) { Debug.WriteLine(string.Format("Enqueuing download for '{0}'...", viewItem.NativeId)); // create a new task... // var theUrl = await Task.Run<string>(async () => // { Debug.WriteLine(string.Format("Requesting image for '{0}'...", viewItem.NativeId)); // load... var proxy = ServiceProxyFactory.Current.GetHandler<IGetReportImageServiceProxy>(); var result = await proxy.GetReportImageAsync(viewItem.NativeId); // check... result.AssertNoErrors(); // create the new file... var filename = GetCacheFilename(viewItem); var cacheFolder = await this.GetCacheFolderAsync(); var cacheFile = await cacheFolder.CreateFileAsync(filename, CreationCollisionOption.ReplaceExisting); using (var stream = await cacheFile.OpenStreamForWriteAsync()) stream.Write(result.ImageBytes, 0, result.ImageBytes.Length); // get the URL... string url = this.CalculateLocalImageUrl(viewItem); Debug.WriteLine(string.Format("Image load for '{0}' finished.", viewItem.NativeId)); //return url; // }); // set it... viewItem.ImageUri = url; }
internal void EnqueueImageDownload(ReportViewItem viewItem) { Debug.WriteLine(string.Format("Enqueuing download for '{0}'...", viewItem.NativeId)); // create a new task... var theUrl = Task.Run<string>(async () => { Debug.WriteLine(string.Format("Requesting image for '{0}'...", viewItem.NativeId)); // load... var proxy = TinyIoCContainer.Current.Resolve<IGetReportImageServiceProxy>(); var result = await proxy.GetReportImageAsync(viewItem.NativeId); // check... result.AssertNoErrors(); // create the new file... var filename = GetCacheFilename(viewItem); var cacheFolder = await this.GetCacheFolderAsync(); var cacheFile = await cacheFolder.CreateFileAsync(filename, CreationCollisionOption.ReplaceExisting); using (var stream = await cacheFile.OpenStreamForWriteAsync()) stream.Write(result.ImageBytes, 0, result.ImageBytes.Length); // get the URL... string url = this.CalculateLocalImageUrl(viewItem); Debug.WriteLine(string.Format("Image load for '{0}' finished.", viewItem.NativeId)); return url; }).ContinueWith(t => { // set it... viewItem.ImageUri = t.Result; }, TaskScheduler.FromCurrentSynchronizationContext()); }
internal bool MatchKeyword(ReportViewItem item) { // if we have a keyword, match it, otherwise assume it's ok... if (!(string.IsNullOrEmpty(this.Keyword))) return item.Title.ToLower().EndsWith(this.Keyword); else return true; }
public static async Task PopulateSuggestionsAsync(string queryText, SearchSuggestionCollection results) { // if we don't have at least three characters to work with, do nothing... if(queryText.Length < 3) return; // how many? int maxSuggestions = 5; // get the list... var suggestions = await ReportItem.GetSearchSuggestionsAsync(queryText); // sort the suggestions... var titles = new List<string>(); foreach (var title in suggestions.Keys) titles.Add(title); titles.Sort(); // do we have one that we can use as a recommendation? ReportItem recommendation = null; foreach (var title in titles) { if (suggestions[title].Count == 1) { recommendation = suggestions[title][0]; break; } } // if we have a recommendation only show three suggestions... if (recommendation != null) maxSuggestions -= 2; // add the suggestions... foreach (var title in titles) { results.AppendQuerySuggestion(title); // enough? if (results.Size == maxSuggestions) break; } // add the recommendation... if (recommendation != null) { // we need an image... var viewItem = new ReportViewItem(recommendation); var imageUri = await new ReportImageCacheManager().GetLocalImageUriAsync(viewItem); // add the suggestion... results.AppendSearchSeparator("Recommendation"); results.AppendResultSuggestion(recommendation.Title, recommendation.Description, recommendation.Id.ToString(), RandomAccessStreamReference.CreateFromUri(new Uri(imageUri)), recommendation.Title); } }
internal async Task<string> GetLocalImageUriAsync(ReportViewItem viewItem) { var cacheFolder = await this.GetCacheFolderAsync(); // build a path based on the native id... var filename = GetCacheFilename(viewItem); StorageFile cacheFile = null; try { cacheFile = await cacheFolder.GetFileAsync(filename); } catch (FileNotFoundException ex) { SinkWarning(ex); } // did we get one? if (cacheFile != null) { Debug.WriteLine(string.Format("Cache image for '{0}' was found locally...", viewItem.NativeId)); return CalculateLocalImageUrl(viewItem); } else { Debug.WriteLine(string.Format("Cache image for '{0}' was not found locally...", viewItem.NativeId)); return null; } }
private string CalculateLocalImageUrl(ReportViewItem viewItem) { return string.Format("ms-appdata:///local/{0}/{1}.jpg", LocalCacheFolderName, viewItem.NativeId); }
private string GetCacheFilename(ReportViewItem viewItem) { return viewItem.NativeId + ".jpg"; }
async void search_ResultSuggestionChosen(SearchPane sender, SearchPaneResultSuggestionChosenEventArgs args) { var item = await ReportItem.GetByIdAsync(int.Parse(args.Tag)); var viewItem = new ReportViewItem(item); // show... var frame = (Frame)Window.Current.Content; var handler = ViewFactory.Current.GetConcreteType<IReportPageViewModel>(); frame.Navigate(handler, viewItem); }