コード例 #1
0
        private string BuildAcceptString()
        {
            var mimeTypes = new HashSet <string>();

            foreach (var fileExtension in FileTypeFilter)
            {
                if (fileExtension == "*")
                {
                    continue;
                }

                var mimeType = MimeTypeService.GetFromExtension(fileExtension);
                if (!mimeTypes.Contains(mimeType))
                {
                    mimeTypes.Add(mimeType);
                }
            }

            if (mimeTypes.Count == 0)
            {
                // No restriction
                return(string.Empty);
            }

            return(string.Join(", ", mimeTypes));
        }
コード例 #2
0
        private NativeFilePickerAcceptType[] BuildFileTypesMap()
        {
            var acceptTypes = new List <NativeFilePickerAcceptType>();

            foreach (var choice in FileTypeChoices)
            {
                var acceptType = new NativeFilePickerAcceptType();
                acceptType.Description = choice.Key;

                var acceptItems = new List <NativeFilePickerAcceptTypeItem>();
                foreach (var extension in choice.Value)
                {
                    var acceptItem = new NativeFilePickerAcceptTypeItem()
                    {
                        MimeType   = MimeTypeService.GetFromExtension(extension),
                        Extensions = new[] { extension }
                    };
                    acceptItems.Add(acceptItem);
                }

                acceptType.Accept = acceptItems.ToArray();
                acceptTypes.Add(acceptType);
            }

            return(acceptTypes.ToArray());
        }
コード例 #3
0
 private string[] GetMimeTypes()
 {
     return(FileTypeChoices
            .SelectMany(choice => choice.Value)
            .Select(extension => MimeTypeService.GetFromExtension(extension))
            .Distinct()
            .ToArray());
 }
コード例 #4
0
        private string[] GetMimeTypes()
        {
            if (FileTypeFilter.Contains("*"))
            {
                return(new[] { "*/*" });
            }

            return(FileTypeFilter
                   .Select(extension => MimeTypeService.GetFromExtension(extension))
                   .Distinct()
                   .ToArray());
        }
コード例 #5
0
        private NativeFilePickerAcceptType[] BuildFileTypesMap()
        {
            var acceptTypes = new List <NativeFilePickerAcceptType>();

            var mimeTypeGroups = FileTypeFilter
                                 .Except(new[] { "*" })
                                 .GroupBy(f => MimeTypeService.GetFromExtension(f))
                                 .ToArray();

            var allAccepts = new List <NativeFilePickerAcceptTypeItem>();

            foreach (var mimeTypeGroup in mimeTypeGroups)
            {
                var extensions = mimeTypeGroup.ToArray();

                var acceptType = new NativeFilePickerAcceptType();
                acceptType.Description = extensions.Length > 1 ? string.Empty : extensions.First();

                var acceptItem = new NativeFilePickerAcceptTypeItem()
                {
                    MimeType   = mimeTypeGroup.Key,
                    Extensions = extensions
                };
                allAccepts.Add(acceptItem);

                acceptType.Accept = new[] { acceptItem };
                acceptTypes.Add(acceptType);
            }

            if (allAccepts.Count > 1)
            {
                var fullAcceptType = new NativeFilePickerAcceptType()
                {
                    Description = "All",
                    Accept      = allAccepts.ToArray()
                };

                acceptTypes.Insert(0, fullAcceptType);
            }

            return(acceptTypes.ToArray());
        }
コード例 #6
0
        private string[] GetMimeTypes()
        {
            if (FileTypeFilter.Contains("*"))
            {
                return(new[] { "*/*" });
            }

            List <string> mimeTypes = new List <string>();

            using Android.Webkit.MimeTypeMap? mimeTypeMap = Android.Webkit.MimeTypeMap.Singleton;
            if (mimeTypeMap is null)
            {
                // when map is unavailable (probably never happens, but Singleton returns nullable)
                return(new[] { "*/*" });
            }

            foreach (string oneExtensionForLoop in FileTypeFilter)
            {
                bool unknownExtensionPresent = false;

                string oneExtension = oneExtensionForLoop;
                if (oneExtension.StartsWith("."))
                {
                    // Supported format from UWP, e.g. ".jpg"
                    oneExtension = oneExtension.Substring(1);
                }

                if (!mimeTypeMap.HasExtension(oneExtension))
                {
                    // when there is unknown extension, we should show all files
                    unknownExtensionPresent = true;
                }

                string?mimeType = mimeTypeMap.GetMimeTypeFromExtension(oneExtension);
                if (string.IsNullOrEmpty(mimeType))
                {
                    // second check for unknown extension...
                    unknownExtensionPresent = true;
                }
                else
                {
#pragma warning disable CS8604 // Possible null reference argument.
                    // it cannot be null, as this is within "if", but still compiler complains about possible null reference
                    if (!mimeTypes.Contains(mimeType))
                    {
                        mimeTypes.Add(mimeType);
                    }
#pragma warning restore CS8604 // Possible null reference argument.
                }

                if (unknownExtensionPresent)
                {
                    // it is some unknown extension
                    var mimeTypesFromUno = FileTypeFilter
                                           .Select(extension => MimeTypeService.GetFromExtension(extension))
                                           .Distinct();

                    if (mimeTypesFromUno is null || mimeTypesFromUno.Count() < 1)
                    {
                        return(new[] { "*/*" });
                    }

                    foreach (var oneUnoMimeType in mimeTypesFromUno)
                    {
                        if (!mimeTypes.Contains(oneUnoMimeType))
                        {
                            mimeTypes.Add(oneUnoMimeType);
                        }
                    }
                }
            }


            return(mimeTypes.ToArray());
        }