public Result <LoadedItem <T> > Load(Item <T> item)
        {
            T resultObject = default(T);
            NSFileAttributes attributes = null;

            attributes = _fileManager.GetAttributes(item.Url.Path);

            if (item.Type == ItemType.Directory)
            {
                NSString[] properties = new[] { NSUrl.IsDirectoryKey, NSUrl.ContentModificationDateKey };
                NSError    error      = null;
                var        urls       = _fileManager.GetDirectoryContent(item.Url, NSArray.FromNSObjects(properties),
                                                                         NSDirectoryEnumerationOptions.SkipsHiddenFiles,
                                                                         out error);

                resultObject = item.Parse(attributes, null, urls);
            }
            else
            {
                var data = NSData.FromUrl(item.Url);
                resultObject = item.Parse(attributes, data, null);
            }

            return(new Result <LoadedItem <T> >(new LoadedItem <T>(item, attributes, resultObject)));
        }
        public long FileSize(string path)
        {
            if (FileExists(path))
            {
                NSError          error          = null;
                NSFileAttributes fileAttributes = null;
                ulong?           size           = null;

                UIApplication.SharedApplication.InvokeOnMainThread(() =>
                {
                    fileAttributes = NSFileManager.DefaultManager.GetAttributes(path, out error);
                });

                if (error != null)
                {
                    _loggingService.LogError(typeof(FileSystemService), new Exception(error.DebugDescription), error.Description);
                    throw new NSErrorException(error);
                }

                size = fileAttributes.Size;

                return(size.HasValue ? (long)size.Value : 0);
            }

            return(0);
        }
Exemple #3
0
        public static Item <object> FromDirectory(NSUrl directoryUrl, NSFileAttributes fileAttributes = null)
        {
            return(new Item <object>(directoryUrl, fileAttributes, ItemType.Directory, (attributes, data, urls) =>
            {
                return urls.Select(x =>
                {
                    NSObject resourceObject = null;
                    x.TryGetResource(NSUrl.IsDirectoryKey, out resourceObject);

                    bool isDirectoryObject = false;

                    if (resourceObject != null)
                    {
                        var convertedNsObject = resourceObject.ToObject(typeof(bool));

                        if (convertedNsObject != null)
                        {
                            isDirectoryObject = (bool)convertedNsObject;
                        }
                    }

                    return At(x, attributes, isDirectoryObject);
                }).ToArray();
            }));
        }
Exemple #4
0
        void CopyFileToDocumentsDirectory(NSUrl fromUrl)
        {
            NSUrl toURL = DocumentsDirectory.Append(fromUrl.LastPathComponent, false);

            bool              success = false;
            NSError           error;
            NSFileCoordinator fileCoordinator = new NSFileCoordinator();

            fileCoordinator.CoordinateWriteWrite(fromUrl, NSFileCoordinatorWritingOptions.ForMoving, toURL, NSFileCoordinatorWritingOptions.ForReplacing, out error, (src, dst) => {
                NSFileManager fileManager = new NSFileManager();
                success = fileManager.Copy(src, dst, out error);

                if (success)
                {
                    var attributes = new NSFileAttributes {
                        FileExtensionHidden = true
                    };
                    fileManager.SetAttributes(attributes, dst.Path);
                    Console.WriteLine("Moved file: {0} to: {1}.", src.AbsoluteString, dst.AbsoluteString);
                }
            });

            // In your app, handle this gracefully.
            if (!success)
            {
                Console.WriteLine("Couldn't move file: {0} to: {1}. Error: {3}.", fromUrl.AbsoluteString,
                                  toURL.AbsoluteString, error.Description);
            }
        }
Exemple #5
0
 public Item(NSUrl url, NSFileAttributes attributes, ItemType type, Func <NSFileAttributes, NSData, NSUrl[], T> parse)
 {
     Url         = url;
     _attributes = attributes;
     Type        = type;
     _parse      = parse;
 }
		void CopyFileToDocumentsDirectory(NSUrl fromUrl)
		{
			NSUrl toURL = DocumentsDirectory.Append (fromUrl.LastPathComponent, false);

			bool success = false;
			NSError error;
			NSFileCoordinator fileCoordinator = new NSFileCoordinator ();

			fileCoordinator.CoordinateWriteWrite (fromUrl, NSFileCoordinatorWritingOptions.ForMoving, toURL, NSFileCoordinatorWritingOptions.ForReplacing, out error, (src, dst) => {
				NSFileManager fileManager = new NSFileManager();
				success = fileManager.Copy(src, dst, out error);

				if (success) {
					var attributes = new NSFileAttributes {
						ExtensionHidden = true
					};
					fileManager.SetAttributes (attributes, dst.Path);
					Console.WriteLine ("Moved file: {0} to: {1}.", src.AbsoluteString, dst.AbsoluteString);
				}
			});

			// In your app, handle this gracefully.
			if (!success)
				Console.WriteLine ("Couldn't move file: {0} to: {1}. Error: {3}.", fromUrl.AbsoluteString,
					toURL.AbsoluteString, error.Description);
		}
Exemple #7
0
        public Task UpdateMultipleEntities(IEnumerable <Session> data)
        {
            return(Task.Run(() =>
            {
                var fileManager = new NSFileManager();
                var appGroupContainer = fileManager.GetContainerUrl($"group.{AboutThisApp.PackageName}");
                var appGroupContainerPath = appGroupContainer.Path;
                var sessionsFilePath = Path.Combine(appGroupContainerPath, "sessions.json");

                if (fileManager.FileExists(sessionsFilePath))
                {
                    NSError error;
                    fileManager.Remove(sessionsFilePath, out error);
                }

                var attributes = new NSFileAttributes
                {
                    Type = NSFileType.Regular
                };

                var json = JsonConvert.SerializeObject(data.Where(s => s.IsFavorite).ToList());
                var fileData = NSData.FromString(json);

                fileManager.CreateFile(sessionsFilePath, fileData, attributes);

                var url = NSUrl.FromFilename(sessionsFilePath);
                url.SetResource(NSUrl.IsExcludedFromBackupKey, new NSNumber(true));

                var settings = new NSUserDefaults($"group.{AboutThisApp.PackageName}", NSUserDefaultsType.SuiteName);
                settings.SetBool(true, "FavoritesInitialized");
                settings.Synchronize();

                UpdateWidget();
            }));
        }
        public static Task<NSUrl> CopyToDocumentsDirectoryAsync(NSUrl fromUrl)
        {
            var tcs = new TaskCompletionSource<NSUrl>();

            NSUrl localDocDir = GetDocumentDirectoryUrl ();
            NSUrl toURL = localDocDir.Append (fromUrl.LastPathComponent, false);

            bool success = false;
            NSError coordinationError, copyError = null;
            NSFileCoordinator fileCoordinator = new NSFileCoordinator ();

            ThreadPool.QueueUserWorkItem (_ => {
                fileCoordinator.CoordinateReadWrite (fromUrl, 0, toURL, NSFileCoordinatorWritingOptions.ForReplacing, out coordinationError, (src, dst) => {
                    NSFileManager fileManager = new NSFileManager();
                    success = fileManager.Copy(src, dst, out copyError);

                    if (success) {
                        var attributes = new NSFileAttributes {
                            ExtensionHidden = true
                        };
                        fileManager.SetAttributes (attributes, dst.Path);
                        Console.WriteLine ("Copied file: {0} to: {1}.", src.AbsoluteString, dst.AbsoluteString);
                    }
                });

                // In your app, handle this gracefully.
                if (!success)
                    Console.WriteLine ("Couldn't copy file: {0} to: {1}. Error: {2}.", fromUrl.AbsoluteString,
                        toURL.AbsoluteString, (coordinationError ?? copyError).Description);

                tcs.SetResult(toURL);
            });

            return tcs.Task;
        }
Exemple #9
0
        private void UpdateFileStatus(FileTransmissionEvent transmission, TransmissionProgressEventArgs e)
        {
            if (e == null)
            {
                e = transmission.Status;
            }

            string filePath = transmission.CachePath;

            if (filePath == null || !File.Exists(filePath))
            {
                filePath = transmission.Path;
            }
            if (!File.Exists(filePath))
            {
                Logger.Error(String.Format("None exist {0} for file status update", filePath));
                return;
            }

            string extendAttrKey = "com.apple.progress.fractionCompleted";

            if ((e.Aborted == true || e.Completed == true || e.FailedException != null))
            {
                Syscall.removexattr(filePath, extendAttrKey);
                try {
                    NSFileAttributes attr = NSFileManager.DefaultManager.GetAttributes(filePath);
                    attr.CreationDate = (new FileInfo(filePath)).CreationTime;
                    NSFileManager.DefaultManager.SetAttributes(attr, filePath);
                } catch (Exception ex) {
                    Logger.Error(String.Format("Exception to set {0} creation time for file status update: {1}", filePath, ex));
                }
            }
            else
            {
                double percent = transmission.Status.Percent.GetValueOrDefault() / 100;
                if (percent < 1)
                {
                    Syscall.setxattr(filePath, extendAttrKey, Encoding.ASCII.GetBytes(percent.ToString()));
                    try {
                        NSFileAttributes attr = NSFileManager.DefaultManager.GetAttributes(filePath);
                        attr.CreationDate = new DateTime(1984, 1, 24, 8, 0, 0, DateTimeKind.Utc);
                        NSFileManager.DefaultManager.SetAttributes(attr, filePath);
                    } catch (Exception ex) {
                        Logger.Error(String.Format("Exception to set {0} creation time for file status update: {1}", filePath, ex));
                    }
                }
                else
                {
                    Syscall.removexattr(filePath, extendAttrKey);
                    try {
                        NSFileAttributes attr = NSFileManager.DefaultManager.GetAttributes(filePath);
                        attr.CreationDate = (new FileInfo(filePath)).CreationTime;
                        NSFileManager.DefaultManager.SetAttributes(attr, filePath);
                    } catch (Exception ex) {
                        Logger.Error(String.Format("Exception to set {0} creation time for file status update: {1}", filePath, ex));
                    }
                }
            }
        }
Exemple #10
0
 public LoadedItem(Item <T> item, NSFileAttributes attributes, T resource)
 {
     Name       = item.Name;
     Url        = item.Url;
     Type       = item.Type;
     Attributes = attributes;
     Resource   = resource;
 }
        public UIViewController GetViewControllerForItem(NSUrl atUri, NSData data, NSFileAttributes fileAttribute)
        {
            var player = new AVPlayer(atUri);

            return(new AVPlayerViewController()
            {
                Player = player
            });
        }
Exemple #12
0
 /// <summary>
 /// Removes the file progress if available.
 /// </summary>
 /// <param name="path">Path of the file/folder</param>
 public static void RemoveFileProgress(string path)
 {
     try {
         Syscall.removexattr(path, extendAttrKey);
         NSFileAttributes attr = NSFileManager.DefaultManager.GetAttributes(path);
         attr.CreationDate = (new FileInfo(path)).CreationTime;
         NSFileManager.DefaultManager.SetAttributes(attr, path);
     } catch (Exception ex) {
         Logger.Debug(String.Format("Exception to unset {0} creation time for file status update: {1}", path, ex));
     }
 }
Exemple #13
0
 public static void SetFileProgress(string path, double percent)
 {
     try {
         Syscall.setxattr(path, extendAttrKey, Encoding.ASCII.GetBytes(percent.ToString()));
         NSFileAttributes attr = NSFileManager.DefaultManager.GetAttributes(path);
         attr.CreationDate = new DateTime(1984, 1, 24, 8, 0, 0, DateTimeKind.Utc);
         NSFileManager.DefaultManager.SetAttributes(attr, path);
     } catch (Exception ex) {
         Logger.Debug(String.Format("Exception to set {0} creation time for file status update: {1}", path, ex));
     }
 }
Exemple #14
0
        private static FileAttributeViewModel MakeFileTypeItem(NSFileAttributes attributes)
        {
            string fileType = attributes?.Type?.ToString() ?? Empty;
            var    keyLabel = NSBundle.MainBundle.LocalizedString("Kind", Empty);

            if (keyLabel == null)
            {
                return(null);
            }
            return(new FileAttributeViewModel(keyLabel, fileType));
        }
Exemple #15
0
        private static FileAttributeViewModel MakeFileSizeItem(NSFileAttributes attributes)
        {
            var byteCount = attributes.Size ?? 0;
            var keyLabel  = NSBundle.MainBundle.LocalizedString("Size", Empty);

            if (keyLabel == null)
            {
                return(null);
            }
            return(new FileAttributeViewModel(keyLabel, sizeFormatter.Format(Convert.ToInt64(byteCount))));
        }
Exemple #16
0
        private static FileAttributeViewModel MakeModificationDateItem(NSFileAttributes attributes)
        {
            var modificationDate = attributes.ModificationDate;
            var keyLabel         = NSBundle.MainBundle.LocalizedString("Modified", Empty);

            if (keyLabel == null)
            {
                return(null);
            }
            return(new FileAttributeViewModel(keyLabel,
                                              NSDateFormatter.ToLocalizedString(modificationDate, NSDateFormatterStyle.Medium, NSDateFormatterStyle.Medium)));
        }
Exemple #17
0
        private void ItemLoadCompletedUrl(NSObject url)
        {
            log.Debug("ItemLoadCompletedUrl called of type: " + url.GetType().ToString());

            try
            {
                NSUrl fileUrl = url as NSUrl;

                if (fileUrl != null)
                {
                    log.Debug("Loading Attachment: " + fileUrl.ToString());

                    NSData   data         = null;
                    string   path         = fileUrl.Path;
                    DateTime creationDate = DateTime.Now;
                    string   fileName     = Path.GetFileName(path);
                    string   extension    = Path.GetExtension(fileUrl.Path);

                    if (string.IsNullOrWhiteSpace(fileName))
                    {
                        try
                        {
                            NSFileAttributes attributes = NSFileManager.DefaultManager.GetAttributes(fileUrl.Path);
                            creationDate = (DateTime)attributes.CreationDate;
                        }
                        catch (Exception ex)
                        {
                            log.Debug(ex, "Unable to get Attributes for path: " + fileUrl.Path);
                        }

                        fileName = "FILE_" + creationDate.ToString("yyyyMMddTHHmmssFFF") + extension;
                    }
                    data = NSData.FromUrl(fileUrl);

                    Stream stream = data.AsStream();
                    attachments.Add(stream);
                    log.Info("Added Stream for File: " + fileName);
                }
            }
            catch (Exception ex)
            {
                log.Error(ex, "Error loading Attachment: " + url.ToString());
            }

            this.totalNumberOfAttachmentsLoaded++;
            CheckAttachmentsProcessed();
        }
Exemple #18
0
        /// <summary>
        /// Exports the image as a PDF with the given file name.
        /// </summary>
        /// <param name="filename">Filename.</param>
        public static void ExportAsPDF(this UIImage image, string filename, CGPDFInfo info, double horizRes = 96, double vertRes = 96)
        {
            var width  = (double)image.Size.Width * (double)image.CurrentScale * 72 * horizRes;
            var height = (double)image.Size.Height * (double)image.CurrentScale * 72 * vertRes;

            var pdfFile = new NSMutableData();

            pdfFile.Init();

            var pdfConsumer = new CGDataConsumer(pdfFile);
            var mediaBox    = new CGRect(0, 0, width, height);

            using (var context = new CGContextPDF(pdfConsumer, mediaBox, info)) {
                context.BeginPage(new CGPDFPageInfo());
                context.DrawImage(mediaBox, image.CGImage);
                context.EndPage();
            }

            var attrs = new NSFileAttributes();

            NSFileManager.DefaultManager.CreateFile(filename, pdfFile, attrs);
        }
        static Task <NSUrl> CopyToDocumentsDirectoryAsync(NSUrl fromUrl)
        {
            var tcs = new TaskCompletionSource <NSUrl>();

            NSUrl localDocDir = GetDocumentDirectoryUrl();
            NSUrl toURL       = localDocDir.Append(fromUrl.LastPathComponent, false);

            bool              success = false;
            NSError           coordinationError, copyError = null;
            NSFileCoordinator fileCoordinator = new NSFileCoordinator();

            ThreadPool.QueueUserWorkItem(_ => {
                fileCoordinator.CoordinateReadWrite(fromUrl, 0, toURL, NSFileCoordinatorWritingOptions.ForReplacing, out coordinationError, (src, dst) => {
                    NSFileManager fileManager = new NSFileManager();
                    success = fileManager.Copy(src, dst, out copyError);

                    if (success)
                    {
                        var attributes = new NSFileAttributes {
                            FileExtensionHidden = true
                        };
                        fileManager.SetAttributes(attributes, dst.Path);
                        Console.WriteLine("Copied file: {0} to: {1}.", src.AbsoluteString, dst.AbsoluteString);
                    }
                });

                // In your app, handle this gracefully.
                if (!success)
                {
                    Console.WriteLine("Couldn't copy file: {0} to: {1}. Error: {2}.", fromUrl.AbsoluteString,
                                      toURL.AbsoluteString, (coordinationError ?? copyError).Description);
                }

                tcs.SetResult(toURL);
            });

            return(tcs.Task);
        }
        public UIViewController GetViewControllerForItem(NSUrl atUri, NSData data, NSFileAttributes fileAttribute)
        {
            var image = new UIImage(data);

            return(new ImageViewController(image));
        }
Exemple #21
0
 public UIViewController GetViewControllerForItem(NSUrl atUri, NSData data, NSFileAttributes fileAttribute)
 {
     return(new WebViewController(atUri));
 }
 public UIViewController GetViewControllerForItem(NSUrl atUri, NSData data, NSFileAttributes fileAttribute)
 {
     return(new UnknownFileTypeViewController(atUri.LastPathComponent));
 }
Exemple #23
0
 public T Parse(NSFileAttributes fileAttributes, NSData data, NSUrl[] url) => _parse(fileAttributes, data, url);
Exemple #24
0
 public static Item <object> FromFile(NSUrl url, NSFileAttributes attributes, bool isDirectory)
 {
     return(new Item <object>(url, attributes, ItemType.File, (fileAttributes, data, urls) => data));
 }
Exemple #25
0
 public static Item <object> At(NSUrl url, NSFileAttributes attributes = null, bool isDirectory = false)
 {
     return(isDirectory ? FromDirectory(url, attributes) : FromFile(url, attributes, isDirectory));
 }