var onlyLocal = from localFile in pithosDir.EnumerateFiles()
where !remoteFiles.Contains(localFile.Name.ToLower())
- select new ListenerAction(CloudActionType.UploadUnconditional, localFile,null);
+ select new ListenerAction(CloudActionType.UploadUnconditional, localFile,ObjectInfo.Empty);
var onlyRemote = from upFile in remoteObjects
where !localNames.Contains(upFile.Name.ToLower())
- select new ListenerAction(CloudActionType.DownloadUnconditional,null,upFile);
+ select new ListenerAction(CloudActionType.DownloadUnconditional,new FileInfo(""), upFile);
var commonObjects = from upFile in remoteObjects
switch (action.Action)
{
case CloudActionType.UploadUnconditional:
-
UploadCloudFile(localFile.Name,localFile.Length,localFile.FullName,action.LocalHash.Value);
break;
case CloudActionType.DownloadUnconditional:
private void DownloadCloudFile(string container, string fileName, string localPath)
{
+ var state = StatusKeeper.GetNetworkState(fileName);
+ //Abort if the file is already being uploaded or downloaded
+ if (state != NetworkState.None)
+ return;
+
StatusKeeper.SetNetworkState(localPath,NetworkState.Downloading);
CloudClient.GetObject(container, fileName, localPath)
.ContinueWith(t=>
private void UploadCloudFile(string fileName, long fileSize, string path,string hash)
{
Contract.Requires(!Path.IsPathRooted(fileName));
+ var state=StatusKeeper.GetNetworkState(fileName);
+ //Abort if the file is already being uploaded or downloaded
+ if (state != NetworkState.None)
+ return;
StatusKeeper.SetNetworkState(fileName,NetworkState.Uploading);
{
this.StatusKeeper.StoreInfo(path,info);
}
- }
- )
+ })
.ContinueWith(t =>
this.StatusKeeper.SetFileState(path, FileStatus.Unchanged, FileOverlayStatus.Normal))
.ContinueWith(t=>