internal override Task <Stream> PlatformOpenReadAsync() { var url = NSUrl.FromBookmarkData(bookmark, 0, null, out var isStale, out var error); if (error != null) { throw new NSErrorException(error); } url.StartAccessingSecurityScopedResource(); if (isStale) { var newBookmark = url.CreateBookmarkData(NSUrlBookmarkCreationOptions.SuitableForBookmarkFile, Array.Empty <string>(), null, out error); if (error != null) { throw new NSErrorException(error); } UpdateBookmark(url, newBookmark); } var fileStream = File.OpenRead(FullPath); Stream stream = new SecurityScopedStream(fileStream, url); return(Task.FromResult(stream)); }
//public static NSUrl LastUrl; public static (NSUrl NewUrl, NSData Bookmark) GetBookmark(this NSUrl url) { var bookmarksObj = NSUserDefaults.StandardUserDefaults.ValueForKey(new NSString("Bookmarks")) as NSDictionary; var nsBookmarks = bookmarksObj?.MutableCopy() as NSMutableDictionary ?? new NSMutableDictionary(); //var bookmarks = new List<NSData>(); foreach (var key in nsBookmarks.Keys) //for (uint i = 0; i < nsBookmarks.Count; i++) // bookmarks.Add(nsBookmarks.GetItem<NSData>(i)); //foreach (var bookmark in bookmarks) { var bookmark = nsBookmarks[key] as NSData; var bookmarkUrl = NSUrl.FromBookmarkData(bookmark, NSUrlBookmarkResolutionOptions.WithoutUI | NSUrlBookmarkResolutionOptions.WithSecurityScope, null, out bool isStale, out NSError error1 ); if (bookmarkUrl != null && error1 == null) { if (bookmarkUrl.Path.TrimEnd('/') == url.Path.TrimEnd('/')) { if (isStale) { if (url.CreateBookmark() is NSData freshBookmark) { //LastUrl = bookmarkUrl; return(bookmarkUrl, freshBookmark); } return(null, null); } //LastUrl = bookmarkUrl; return(bookmarkUrl, bookmark); } } else { if (error1 != null) { Console.WriteLine("Bookmark error: Bookmark for url [" + url + "] gave error [" + error1.Description + "] when trying to convert to URL."); } //nsBookmarks.RemoveObject((nint)nsBookmarks.IndexOf(bookmark)); nsBookmarks.Remove(key); NSUserDefaults.StandardUserDefaults.SetValueForKey(nsBookmarks, new NSString("Bookmarks")); } } return(null, null); }
private NSUrl?GetBookmarkedUrl(string bookmark) { var url = NSUrl.FromBookmarkData(new NSData(bookmark, NSDataBase64DecodingOptions.None), NSUrlBookmarkResolutionOptions.WithoutUI, null, out var isStale, out var error); if (isStale) { Logger.TryGet(LogEventLevel.Warning, LogArea.IOSPlatform)?.Log(this, "Stale bookmark detected"); } if (error != null) { throw new NSErrorException(error); } return(url); }