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)); }
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()); }
private string[] GetMimeTypes() { return(FileTypeChoices .SelectMany(choice => choice.Value) .Select(extension => MimeTypeService.GetFromExtension(extension)) .Distinct() .ToArray()); }
private string[] GetMimeTypes() { if (FileTypeFilter.Contains("*")) { return(new[] { "*/*" }); } return(FileTypeFilter .Select(extension => MimeTypeService.GetFromExtension(extension)) .Distinct() .ToArray()); }
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()); }
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()); }