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)); }
public override void StatusInfo(string remoteName, StatusOrigin origin, StatusOperation operation) { if (operation == StatusOperation.Delete && origin == StatusOrigin.Start) { deletionState = DeletionState.Initiated; } }
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); } }