Ejemplo n.º 1
0
        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);
        }
Ejemplo n.º 3
0
    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);
    }