Beispiel #1
0
        public override FindData FindFirst(string path, out IEnumerator enumerator)
        {
            var currentNode = Root.Instance.GetItemByPath(path);

            //Special handling for deletion, as TotalCMD doesn't allow batch deletion.
            //It first enumerates all items, then removes one-by-one, and only then removes empty fodlers. - It could take hours if you have big an deep storage.
            if (deletionState == DeletionState.Initiated)
            {
                if (currentNode is BlobDirectory)
                {
                    //get all files in a flat way - it is faster
                    ((BlobDirectory)currentNode).LoadAllSubItems();
                    deletionState = DeletionState.Enumerated;                     //TotalCMD triggers enumeration twice, we want only once.
                }
                else
                {
                    //don't enumerate items - proceed to folder deletion immediately
                    enumerator = Enumerable.Empty <FindData>().GetEnumerator();
                    return(FindNext(enumerator));
                }
            }
            else if (deletionState == DeletionState.None)
            {
                currentNode.LoadChildren(cacheDuration);
            }

            enumerator = currentNode.Children.Select(x => x.ToFindData()).GetEnumerator();
            return(FindNext(enumerator));
        }
Beispiel #2
0
 public override void StatusInfo(string remoteName, StatusOrigin origin, StatusOperation operation)
 {
     if (operation == StatusOperation.Delete && origin == StatusOrigin.Start)
     {
         deletionState = DeletionState.Initiated;
     }
 }
Beispiel #3
0
 public override bool FileRemove(string remoteName)
 {
     try
     {
         deletionState = DeletionState.None;
         var item = Root.Instance.GetItemByPath(remoteName);
         item.Delete();
         return(true);
     }
     catch (Exception ex)
     {
         OnError(ex);
         return(false);
     }
 }