public IObservable<Unit> Fetch (Request request) { return Observable.Create<Unit> (o => { var description = request.DescriptionAs<ScaledDescription> (); var url = new NSUrl (description.AbsoluteSourceUrl.AbsoluteUri); var disp = new CancellationDisposable (); var token = disp.Token; Task.Factory.StartNew (() => { using (var source = CGImageSource.FromUrl (url)) { if (source.Handle == IntPtr.Zero) throw new Exception (string.Format ("Could not create source for '{0}'", url)); var sourceSize = ImageHelper.Measure (source); int maxPixelSize = GetMaxPixelSize (sourceSize, description.Size); using (var scaled = CreateThumbnail (source, maxPixelSize, token)) using (var cropped = ScaleAndCrop (scaled, description.Size, description.Mode, token)) SaveToRequest (cropped, source.TypeIdentifier, request); o.OnCompleted (); } }, token).RouteExceptions (o); return disp; }); }
public IObservable<Unit> Fetch (Request request) { var description = request.DescriptionAs<AssetDescription> (); return (description.Kind == AssetDescription.AssetImageKind.Thumbnail) ? SaveThumbnail (request) : SaveFullResolutionImage (request); }