var dirInfo = uploadAction.LocalFile as DirectoryInfo;
var account = uploadAction.AccountInfo;
- var actions = from file in dirInfo.EnumerateFiles("*", SearchOption.AllDirectories)
+ var folderActions = from info in dirInfo.EnumerateDirectories("*", SearchOption.AllDirectories)
select
- new CloudUploadAction(account, file, null, account.BlockSize, account.BlockHash,
+ new CloudUploadAction(account, info, null, account.BlockSize, account.BlockHash,
uploadAction, true);
- foreach (var action in actions)
- {
- var state=StatusKeeper.GetStateByFilePath(action.LocalFile.FullName);
- if (state!=null)
- state.Delete();
- //StatusKeeper.SetFileState(action.LocalFile.FullName,FileStatus.Created,FileOverlayStatus.Normal,String.Empty);
- state=FileState.CreateFor(action.LocalFile);
- //StatusKeeper.SetFileStatus();
- state.FileStatus = FileStatus.Created;
- state.OverlayStatus=FileOverlayStatus.Normal;
- state.Create();
- action.FileState = state;
- Post(action);
- }
+ var fileActions = from info in dirInfo.EnumerateFiles("*", SearchOption.AllDirectories)
+ select
+ new CloudUploadAction(account, info, null, account.BlockSize, account.BlockHash,
+ uploadAction, true);
+ //Post folder actions first, to ensure the selective folders are updated
+ folderActions.ApplyAction(PostUploadAction);
+ fileActions.ApplyAction(PostUploadAction);
+ }
+
+ private void PostUploadAction(CloudUploadAction action)
+ {
+ var state = StatusKeeper.GetStateByFilePath(action.LocalFile.FullName);
+ if (state != null)
+ state.Delete();
+ //StatusKeeper.SetFileState(action.LocalFile.FullName,FileStatus.Created,FileOverlayStatus.Normal,String.Empty);
+ state = FileState.CreateFor(action.LocalFile);
+ //StatusKeeper.SetFileStatus();
+ state.FileStatus = FileStatus.Created;
+ state.OverlayStatus = FileOverlayStatus.Normal;
+ state.Create();
+ action.FileState = state;
+ Post(action);
}
private CancellationToken CurrentOperationCancelToken