Exemple #1
0
        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);
        }
Exemple #3
0
        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);
        }