Esempio n. 1
0
        static ImageSourceContainer BestGuessF9PResource(string reqResourcePathString, Assembly assembly)
        {
            if (assembly == null)
            {
                return(null);
            }
            var tuple = GetiOSBasePathAndExt(reqResourcePathString);

            if (tuple == null)
            {
                return(null);
            }
            var reqResBaseName = tuple.Item1;
            var reqResExt      = tuple.Item2;


            string[] resourceNames = null;
            if (SortedAppleResources.ContainsKey(assembly))
            {
                resourceNames = SortedAppleResources[assembly];
            }
            if (resourceNames == null)
            {
                SortedAppleResources[assembly] = assembly.GetManifestResourceNames();
                //SortedAppleResources = SortedAppleResources.Where(arg => !arg.Contains(".drawable")).ToArray();
                Array.Sort <string>(SortedAppleResources[assembly]);
                resourceNames = SortedAppleResources[assembly];
            }

            //resourceNames = resourceNames.Where(arg => arg.Contains(reqResBaseName)).ToArray();
            var matchingResourceNames = new List <string>();

            for (int i = 0; i < resourceNames.Length; i++)
            {
                if (resourceNames[i].Contains(reqResBaseName))
                {
                    matchingResourceNames.Add(resourceNames[i]);
                }
            }

            string resMultiple;
            var    attempt = 0;

            do
            {
                var scale = AppleDensities[attempt].Scale;
                resMultiple = AppleDensityMatch(attempt++);
                foreach (var resourceName in matchingResourceNames)
                {
                    tuple = GetiOSBasePathAndExt(resourceName);
                    if (tuple != null)
                    {
                        if (tuple.Item1 == reqResBaseName + resMultiple)
                        {
                            if (reqResExt == null || reqResExt.ToLower() == tuple.Item2.ToLower())
                            {
                                //_LastSuccessfulMode = Approach.iOS;
                                //System.Diagnostics.Debug.WriteLine("Apple attempt = "+attempt + " resourceName="+resourceName);
                                var result = new ImageSourceContainer(resourceName, scale);
                                return(result);
                            }
                        }
                    }
                }
            } while (attempt < AppleDensities.Count);
            System.Diagnostics.Debug.WriteLine("No matches found for resource name:" + reqResourcePathString);
            System.Console.WriteLine("No matches found for resource name:" + reqResourcePathString);
            return(null);
        }
Esempio n. 2
0
        private void LoadMain(Image element, Record record, string path)
        {
            //this.disposables.Clear();

            var width    = this.Width;
            var height   = this.Height;
            var quality  = this.ImageQualityInner;
            var cms      = this.IsCmsEnabledInner;
            var priority = this.HasPriorityInner;
            var zoom     = this.ZoomFactor;

            if (core.MetaImageExtention.Contains(System.IO.Path.GetExtension(path).ToLower()))
            {
                this.ChangeToMetaImage(record, path, zoom, width, height).FireAndForget();
                return;
            }


            var option = new ImageLoadingOptions
                             (width, height, this.IsFill, quality, cms);

            var tokenSource = new CancellationTokenSource();

            var subject = new Subject <ImageSourceContainer>();



            subject
            .LastOrDefaultAsync()
            .Take(1)
            .Select(x =>
            {
                if (x != null)
                {
                    return(x);
                }

                ImageSourceContainer image = null;
                if (this.Buffer.TryGetImage(path, quality, out image))
                {
                    return(image);
                }
                return(null);
            })
            .ObserveOnUIDispatcher()
            .Subscribe(image =>
            {
                if (image != null)
                {
                    var p = this.RecordInner?.FullPath ?? this.FilePathInner;

                    if (p == null)
                    {
                        this.ChangeSource(null, null, false);
                    }
                    else if (p.Equals(image?.FullPath))
                    {
                        this.ChangeSource(image.Image, image.FullPath,
                                          image.Information != null &&
                                          image.Information.Type == GraphicFileType.Gif &&
                                          image.Quality >= ImageQuality.Resized);
                    }
                }
                else
                {
                    //this.ChangeSource(null, null, false);
                }

                this.disposables.Clear();
            });


            Disposable.Create(() =>
            {
                tokenSource?.Cancel(true);
            }).AddTo(this.disposables);



            if (record != null)
            {
                //if (quality == ImageQuality.ThumbNail)
                //{
                //    this.Buffer.RequestLoading(record, option, subject, priority, tokenSource);
                //}
                //else
                //{
                this.Buffer.RequestLoading(record, option, subject, priority, tokenSource.Token);
                //}
            }
            else
            {
                this.Buffer.RequestLoading(path, option, subject, priority, tokenSource.Token);
            }
        }