internal BookmarkDataFileResult(NSUrl url) : base() { try { url.StartAccessingSecurityScopedResource(); var newBookmark = url.CreateBookmarkData(0, Array.Empty <string>(), null, out var bookmarkError); if (bookmarkError != null) { throw new NSErrorException(bookmarkError); } UpdateBookmark(url, newBookmark); } finally { url.StopAccessingSecurityScopedResource(); } }
public static NSData CreateBookmark(this NSUrl url) { //var newBookmark = url.CreateBookmarkData((NSUrlBookmarkCreationOptions) 0, new string[] { }, null, out NSError error2); var newBookmark = url.CreateBookmarkData( NSUrlBookmarkCreationOptions.WithSecurityScope //| NSUrlBookmarkCreationOptions.PreferFileIDResolution //| NSUrlBookmarkCreationOptions.MinimalBookmark (won't allow bookmark to be created) //| NSUrlBookmarkCreationOptions.SuitableForBookmarkFile (won't allow bookmark to be created) , new string[] { }, null, out NSError error2); if (error2 != null) { Console.WriteLine("Can not get bookmark for url path [" + url.Path + "]."); Console.WriteLine("ERROR: " + error2); return(null); } var bookmarksObj = NSUserDefaults.StandardUserDefaults.ValueForKey(new NSString("Bookmarks")) as NSDictionary; var nsBookmarks = bookmarksObj?.MutableCopy() as NSMutableDictionary ?? new NSMutableDictionary(); nsBookmarks[url.Path] = newBookmark; NSUserDefaults.StandardUserDefaults.SetValueForKey(nsBookmarks, new NSString("Bookmarks")); //LastUrl = url; return(newBookmark); }
public void DidCompleteWithError(NSUrlSession session, NSUrlSessionTask task, NSError error) { var userDefaults = NSUserDefaults.StandardUserDefaults; Asset asset = null; NSUrl downloadURL = null; AVAggregateAssetDownloadTask avTask = task as AVAggregateAssetDownloadTask; if (avTask == null || !activeDownloadsMap.TryGetValue(avTask, out asset) || !willDownloadToUrlMap.TryGetValue(avTask, out downloadURL)) { return; } var userInfo = new Dictionary <string, string>(); userInfo[Asset.Keys.Name] = new NSString(asset.Stream.Name); if (error != null) { switch (error.Code) { case (int)NSUrlError.Cancelled: /* * This task was canceled, you should perform cleanup using the * URL saved from AVAssetDownloadDelegate.urlSession(_:assetDownloadTask:didFinishDownloadingTo:). */ var localFileLocation = LocalAssetForStream(asset.Stream.Name)?.UrlAsset.Url; if (localFileLocation == null) { return; } try { NSError err = null; NSFileManager.DefaultManager.Remove(localFileLocation, out err); } catch (Exception ex) { Debug.WriteLine($"An error occured trying to delete the contents on disk for {asset.Stream.Name}: {ex.Message}"); } userInfo[Asset.Keys.DownloadState] = new NSString(AssetDownloadState.NotDownloaded.ToString()); break; case (int)NSUrlError.Unknown: throw new Exception("Downloading HLS streams is not supported in the simulator."); default: throw new Exception($"An unexpected error occured {error.Domain}"); } } else { try { NSError err; var bookmark = downloadURL.CreateBookmarkData(default(NSUrlBookmarkCreationOptions), new string[] { asset.Stream.Name }, downloadURL.AbsoluteUrl, out err); userDefaults.SetValueForKey(bookmark, new NSString(asset.Stream.Name)); } catch (Exception ex) { Debug.WriteLine($"Failed to create bookmarkData for download URL: {ex.Message}"); } userInfo[Asset.Keys.DownloadState] = AssetDownloadState.Downloaded.ToString(); userInfo[Asset.Keys.DownloadSelectionDisplayName] = string.Empty; } var userInfoDictionary = NSDictionary.FromObjectsAndKeys(userInfo.Values.ToArray(), userInfo.Keys.ToArray()); NSNotificationCenter.DefaultCenter.PostNotificationName(AssetPersistenceManager.AssetDownloadStateChanged, null, userInfoDictionary); }