Exemplo n.º 1
0
        protected virtual async Task NavigateToFileSystemItemAsync(FileSystemItemBase item)
        {
            bool attachChildrenChangedHandler = true;

            if (_currentDirectory != null && _currentDirectory != item)
            {
                _currentDirectory.ChildrenChanged -= OnChildrenChanged;
                attachChildrenChangedHandler       = false;
            }
            foreach (var oldItem in _items)
            {
                oldItem.Dispose();
            }
            var children = SortItems((await item.EnumerateChildrenAsync())).ToArray();

            lock (_items)
            {
                _items.Clear();
                foreach (var child in children)
                {
                    _items.Add(child);
                }
            }
            if (attachChildrenChangedHandler)
            {
                item.ChildrenChanged += OnChildrenChanged;
            }

            _currentDirectory = item;
            // iOS requires this
            OnPropertyChanged(nameof(Items));
        }
Exemplo n.º 2
0
        public override FileOperationResult FilePut(string localName, ref string remoteName, CopyFlags copyFlags)
        {
            bool cancelled = !Progress.SetProgress(remoteName, localName, 0);

            if (cancelled)
            {
                return(FileOperationResult.UserAbort);
            }

            FileSystemItemBase remoteBlob = null;

            if (Root.Instance.TryGetItemByPath(remoteName, out remoteBlob))
            {
                //First time? - show user a prompt.
                if ((copyFlags & CopyFlags.Overwrite) != CopyFlags.Overwrite)
                {
                    return(FileOperationResult.Exists);
                }
            }

            int    lastSlashIndex     = remoteName.LastIndexOf('\\');
            string existingFolderPath = remoteName.Substring(0, lastSlashIndex);
            string newFolderName      = remoteName.Substring(lastSlashIndex + 1);

            var directory         = Root.Instance.GetItemByPath(existingFolderPath);
            var cancellationToken = new CancellationTokenSource();
            var name = remoteName;

            Action <int> setProgress = progress =>
            {
                cancelled = !Progress.SetProgress(localName, name, progress);
                if (cancelled)
                {
                    cancellationToken.Cancel();
                }
            };

            try
            {
                directory.UploadFile(localName, newFolderName, copyFlags, cancellationToken.Token, setProgress);
            }
            catch (OperationCanceledException ex)
            {
                //remove half uploaded file
                if (Root.Instance.TryGetItemByPath(remoteName, out remoteBlob))
                {
                    remoteBlob.Delete();
                }
                return(FileOperationResult.UserAbort);
            }

            if ((copyFlags & CopyFlags.Move) == CopyFlags.Move)
            {
                File.Delete(localName);
            }

            Progress.SetProgress(remoteName, localName, 100);
            return(FileOperationResult.OK);
        }
Exemplo n.º 3
0
 public async Task OpenItemAsync(FileSystemItemBase fileSystemItem)
 {
     await NavigateToFileSystemItemAsync(fileSystemItem);
 }