private async Task DownloadCoverImage(ComicData comic, CancellationToken cancelToken = default) { if (comic == null || comic.Pages.Count() == 0) { return; } string url = await ComicUpdater.Instance.GetComicImageUrl(comic.Pages.ElementAt(0), cancelToken); if (string.IsNullOrEmpty(url)) { return; } string filePath = await LocalImageService.DownloadImage(new Uri(url), comic.Id, cancelToken); if (string.IsNullOrEmpty(filePath)) { return; } CoverImage.Source = new FileImageSource { File = filePath }; }
public static void DeletingComicDeletesCoverImage() { var comic = new ComicData(); database.AddComic(comic); string imagePath = LocalImageService.WriteImage(comic.Id, new byte[0]); database.DeleteComic(comic); Assert.IsFalse(File.Exists(imagePath), "Comic cover image was not deleted."); }
private void ComicChanged(ComicData newComic) { if (newComic != previousComic) { if (previousComic != null) { previousComic.Updated -= RefreshComic; previousComic.PropertyChanged -= OnComicDataPropertyChanged; } if (newComic != null) { newComic.Updated += RefreshComic; newComic.PropertyChanged += OnComicDataPropertyChanged; } previousComic = newComic; } if (coverImageDownloadCancel != null) { coverImageDownloadCancel.Cancel(); } if (newComic == null) { CoverImage.Source = null; return; } // Load cover image string coverImagePath = LocalImageService.GetImagePath(newComic.Id); // Cover image hasn't been download yet if (string.IsNullOrEmpty(coverImagePath)) { coverImageDownloadCancel = new CancellationTokenSource(); // Download image, and then set image source DownloadCoverImage(newComic, coverImageDownloadCancel.Token) .SafeFireAndForget(); } else { // Set image source immediately CoverImage.Source = new FileImageSource { File = coverImagePath }; } OnComicChanged(newComic); }
public LocalImageService CreateImageService() { var config = new Mock <IConfiguration>(); config.Setup(c => c["ImagesUploadPath"]).Returns(_tempDirectory); var options = new LocalImageFactoryOptions(config.Object); var validator = new ImageFactoryValidator(); var imageFactory = new LocalImageFactory(options, validator); var imageService = new LocalImageService(Configuration, imageFactory); return(imageService); }
public override void OnViewCreated(View view, Bundle savedInstanceState) { base.OnViewCreated(view, savedInstanceState); var metrics = Resources.DisplayMetrics; var widthInDp = ConvertPixelsToDp(metrics.WidthPixels / 2); var heightInDp = ConvertPixelsToDp(metrics.HeightPixels / 2); iv = (ImageView)view.FindViewById(Resource.Id.imageview_card); var t = Task.Run(async() => { iv.SetImageBitmap(await LocalImageService.LoadDrawableAsync(Resources, IDIMG, widthInDp, heightInDp)); }); t.Wait(); //Button clicks? }
private async Task SetCoverImage() { if (lastNavigatedWebView == null) { return; } // TODO: Expand to work with more sites string imageUrl = await lastNavigatedWebView.EvaluateJavaScriptAsync( "document.getElementById('cc-comic').getAttribute('src')"); if (string.IsNullOrEmpty(imageUrl)) { await CoreMethods.DisplayAlert( title : AppResources.Alert_Error_Title, message : AppResources.ImageDownload_LocateError_Msg, cancel : AppResources.Alert_Generic_Confirm); return; } try { var cancelToken = pageEndCancel.Token; // Start download image task so download can progress while user is reading "Download Started" popup Task <string> downloadImageTask = LocalImageService.DownloadImage(new Uri(imageUrl), Comic.Id, cancelToken); await CoreMethods.DisplayAlert( title : AppResources.ImageDownload_FoundUrl_Title, message : AppResources.ImageDownload_FoundUrl_Msg, cancel : AppResources.Alert_Generic_Confirm); await downloadImageTask; cancelToken.ThrowIfCancellationRequested(); await CoreMethods.DisplayAlert( title : AppResources.ImageDownload_Complete_Title, message : AppResources.ImageDownload_Complete_Msg, cancel : AppResources.Alert_Generic_Confirm); } catch (OperationCanceledException) { } }