示例#1
0
        public override string GetMimeType(string path)
        {
            string extension             = NSUrl.FromString(path).PathExtension;
            string uniformTypeIdentifier = UTType.CreatePreferredIdentifier(UTType.TagClassFilenameExtension, extension, null);

            return(UTType.GetPreferredTag(uniformTypeIdentifier, UTType.TagClassMIMEType));
        }
示例#2
0
        internal static string PlatformGetContentType(string extension)
        {
            // ios does not like the extensions
            extension = extension?.TrimStart('.');

            var id        = UTType.CreatePreferredIdentifier(UTType.TagClassFilenameExtension, extension, null);
            var mimeTypes = UTType.CopyAllTags(id, UTType.TagClassMIMEType);

            return(mimeTypes.Length > 0 ? mimeTypes[0] : null);
        }
示例#3
0
 public void CreatePreferredIdentifier()
 {
     string[] extensions = new [] { ".html", ".css", ".jpg", ".js", ".otf" };
     // random failure reported in #36708 (on some iPad2 only)
     for (int i = 0; i < 100; i++)
     {
         foreach (var ext in extensions)
         {
             var result = UTType.CreatePreferredIdentifier(UTType.TagClassMIMEType, ext, null);
             Assert.NotNull(result, ext + i.ToString());
         }
     }
 }
示例#4
0
        public static NSString ToNsUti(this string mimeType)
        {
            var uuType = UTType.CreatePreferredIdentifier(UTType.TagClassMIMEType, mimeType.ToLower(), null);

            if (mimeType == "text/url")
            {
                if (mimeType.StartsWith("file://", StringComparison.InvariantCultureIgnoreCase))
                {
                    return(UTType.FileURL);
                }
                return(UTType.URL);
            }
            //var uuType = UTType.CreatePreferredIdentifier(UTType.TagClassMIMEType, mimeType.ToLower(), null);
            return(new NSString(uuType));
        }
示例#5
0
        public void CreatePreferredIdentifier()
        {
            // This test may fail in the simulator, if the architecture of the simulator isn't the native one (say running x86_64 on an M1 machine),
            // so just skip this test for the simulator.
            TestRuntime.AssertIfSimulatorThenARM64();

            string[] extensions = new [] { ".html", ".css", ".jpg", ".js", ".otf" };
            // random failure reported in #36708 (on some iPad2 only)
            for (int i = 0; i < 100; i++)
            {
                foreach (var ext in extensions)
                {
                    var result = UTType.CreatePreferredIdentifier(UTType.TagClassMIMEType, ext, null);
                    Assert.NotNull(result, ext + i.ToString());
                }
            }
        }
示例#6
0
        private void HandleImage(IEnumerable <PHObject> images)
        {
            foreach (PHAsset image in images)
            {
                if (image.MediaType == PHAssetMediaType.Image)
                {
                    PHImageRequestOptions options = new PHImageRequestOptions()
                    {
                        NetworkAccessAllowed = false,
                        ResizeMode           = PHImageRequestOptionsResizeMode.Exact,
                        Version = PHImageRequestOptionsVersion.Original
                    };

                    PHImageManager.DefaultManager.RequestImageData(image, options, async(d, t, o, i) =>
                    {
                        string path     = ((NSUrl)i["PHImageFileURLKey"])?.Path;
                        string mimeType = UTType.GetPreferredTag(t, UTType.TagClassMIMEType);

                        await _probe.CreateAndStoreDatumAsync(path, mimeType, (DateTime)image.CreationDate);
                    });
                }
                else if (image.MediaType == PHAssetMediaType.Video)
                {
                    PHVideoRequestOptions options = new PHVideoRequestOptions()
                    {
                        NetworkAccessAllowed = false,
                        Version = PHVideoRequestOptionsVersion.Original
                    };

                    PHImageManager.DefaultManager.RequestAvAsset(image, options, async(a, _, i) =>
                    {
                        if (a is AVUrlAsset urlAsset)
                        {
                            string path                  = urlAsset.Url.Path;
                            string extension             = urlAsset.Url.PathExtension;
                            string uniformTypeIdentifier = UTType.CreatePreferredIdentifier(UTType.TagClassFilenameExtension, extension, null);
                            string mimeType              = UTType.GetPreferredTag(uniformTypeIdentifier, UTType.TagClassMIMEType);

                            await _probe.CreateAndStoreDatumAsync(path, mimeType, (DateTime)image.CreationDate);
                        }
                    });
                }
            }
        }
示例#7
0
        public string GetMimeType(string fileUriOrExt)
        {
            if (String.IsNullOrWhiteSpace(fileUriOrExt))
            {
                return(null);
            }

            string extension = Path.GetExtension(fileUriOrExt);

            if (extension == null)
            {
                return(null);
            }

            var uti      = UTType.CreatePreferredIdentifier(UTType.TagClassFilenameExtension, extension.Substring(1), null);
            var mimeType = UTType.GetPreferredTag(uti, UTType.TagClassMIMEType);

            return(mimeType);
        }
示例#8
0
        public Tuple <byte[], string, string> ReadFile(string file)
        {
            Tuple <byte[], string, string> result = null;
            var asset = PHAsset.FetchAssets(new[] { new NSUrl(file) }, null).LastObject as PHAsset;

            if (asset != null)
            {
                var options = new PHImageRequestOptions {
                    Synchronous = true
                };
                PHImageManager.DefaultManager.RequestImageData(asset, options, (data, dataUti, orientation, info) => {
                    var extension = new NSUrl(dataUti).PathExtension;
                    var uti       = UTType.CreatePreferredIdentifier(UTType.TagClassFilenameExtension, extension, null);
                    var mime      = UTType.GetPreferredTag(uti, UTType.TagClassMIMEType);
                    var dataBytes = new byte[data.Length];
                    Marshal.Copy(data.Bytes, dataBytes, 0, Convert.ToInt32(data.Length));
                    result = new Tuple <byte[], string, string>(dataBytes, dataUti, mime);
                });
            }
            return(result);
        }
示例#9
0
        public async Task <ToastImageSource> FromUriAsync(Uri uri, CancellationToken cancellationToken = default)
        {
            string contentType = "";
            var    fullFn      = await imageCacher.CacheAsync(uriToFileNameStrategy.Convert(uri), cancellationToken, async (stream, ct) =>
            {
                var hc = httpClientFactory.CreateClient(nameof(IToastImageSourceFactory));
                using (var response = await hc.GetAsync(uri))
                {
                    contentType = response.Content.Headers.ContentType.MediaType;
                    using (var src = await response.Content.ReadAsStreamAsync())
                        await src.CopyToAsync(stream, 1024 * 80, cancellationToken);
                }
            });

            if (string.IsNullOrEmpty(contentType))
            {
                using (var fs = File.OpenRead(fullFn))
                    contentType = await mimeDetector.DetectAsync(fs);
            }
            return(new SealedToastImageSource(CreateAttachment(uri.ToString(), NSUrl.FromFilename(fullFn),
                                                               UTType.CreatePreferredIdentifier(UTType.TagClassMIMEType, contentType, null))));
        }
        /// <summary>
        /// File picking implementation
        /// </summary>
        /// <param name="allowedTypes">list of allowed file extention types; may be null</param>
        /// <returns>picked file data, or null when picking was cancelled</returns>
        private Task <FileData> PickMediaAsync(string[] allowedTypes)
        {
            var id = this.GetRequestId();

            var ntcs = new TaskCompletionSource <FileData>(id);

            if (Interlocked.CompareExchange(ref this.completionSource, ntcs, null) != null)
            {
                throw new InvalidOperationException("Only one operation can be active at a time");
            }

            var allowedUtis = new string[]
            {
                UTType.Content,
                UTType.Item,
                "public.data"
            };

            if (allowedTypes != null)
            {
                List <string> typeslist = new List <string>();
                foreach (var extension in allowedTypes)
                {
                    if (!string.IsNullOrEmpty(extension))
                    {
                        var fixed_Extension = extension?.TrimStart('.');


                        // get the UTI for an extension
                        //var uti = UTType.CreatePreferredIdentifier(UTType.TagClassFilenameExtension, fixed_Extension, null);
                        // "public.jpeg"

                        // get the UTI for a MIME type
                        //var uti2 = UTType.CreatePreferredIdentifier(UTType.TagClassMIMEType, fixed_Extension, null);
                        // "com.adobe.pdf"

                        // get the MIME type for a UTI
                        //var mime = UTType.GetPreferredTag(uti, UTType.TagClassFilenameExtension);

                        var UTid = UTType.CreatePreferredIdentifier(UTType.TagClassFilenameExtension, fixed_Extension, null);
                        typeslist.Add(UTid);
                    }
                }
                allowedUtis = typeslist.ToArray();
            }

            // NOTE: Importing (UIDocumentPickerMode.Import) makes a local copy of the document,
            // while opening (UIDocumentPickerMode.Open) opens the document directly. We do the
            // first, so the user has to read the file immediately.
            var documentPicker = new UIDocumentPickerViewController(allowedUtis, UIDocumentPickerMode.Import);

            documentPicker.ModalPresentationStyle = UIModalPresentationStyle.FullScreen;
            documentPicker.DidPickDocument       += this.DocumentPicker_DidPickDocument;
            documentPicker.WasCancelled          += this.DocumentPicker_WasCancelled;
            documentPicker.DidPickDocumentAtUrls += this.DocumentPicker_DidPickDocumentAtUrls;

            UIViewController viewController = GetActiveViewController();

            viewController.PresentViewController(documentPicker, true, null);

            this.Handler = (sender, args) =>
            {
                var tcs = Interlocked.Exchange(ref this.completionSource, null);

                tcs?.SetResult(new FileData(
                                   args.FilePath,
                                   args.FileName,
                                   () => GetStreamFromPath(args.FilePath).Result));
            };

            return(this.completionSource.Task);
        }
示例#11
0
 protected string CreateDynamicTypeFor(string type)
 {
     return(UTType.CreatePreferredIdentifier(UTType.kUTTagClassNSPboardType, Pasteboard.NSPasteboardTypeWebArchive, UTType.kUTTypeData));
 }
示例#12
0
 public string GetFileType(string extension)
 => UTType.CreatePreferredIdentifier(UTType.TagClassFilenameExtension, extension, null);
示例#13
0
        private bool CanConformsToImageUTI(NSString url)
        {
            var uti = UTType.CreatePreferredIdentifier(UTType.TagClassFilenameExtension, url.PathExtension, null);

            return(UTType.ConformsTo(uti, UTType.Image));
        }