select Task<IList<ObjectInfo>>.Factory.StartNew(_ =>\r
client.ListObjects(accountInfo.UserName, container.Name, since), container.Name,token)).ToList();\r
\r
- var listShared = Task<IList<ObjectInfo>>.Factory.StartNew(_ => \r
- client.ListSharedObjects(_knownContainers,since), "shared",token);\r
+ var selectiveEnabled = Selectives.IsSelectiveEnabled(accountInfo.AccountKey);\r
+ var listShared = selectiveEnabled?\r
+ Task<IList<ObjectInfo>>.Factory.StartNew(_ => \r
+ client.ListSharedObjects(_knownContainers,since), "shared",token)\r
+ :Task.Factory.FromResult((IList<ObjectInfo>) new List<ObjectInfo>(),"shared");\r
+ \r
listObjects.Add(listShared);\r
var listTasks = await Task.Factory.WhenAll(listObjects.ToArray()).ConfigureAwait(false);\r
\r
var files = LoadLocalFileTuples(accountInfo, accountBatch);\r
\r
\r
- var states = StatusKeeper.GetAllStates();\r
- \r
+ \r
+ //WARNING: GetFileSystemInfo may create state entries.\r
+ //TODO: Find a different way to create the tuples and block long filenames\r
var infos = (from remote in currentRemotes\r
let path = remote.RelativeUrlToFilePath(accountInfo.UserName)\r
let info=agent.GetFileSystemInfo(path)\r
+ where info != null\r
select Tuple.Create(info.FullName,remote))\r
.ToList();\r
\r
+ var states = StatusKeeper.GetAllStates();\r
+\r
var tupleBuilder = new TupleBuilder(CancellationToken,StatusKeeper,StatusNotification,Settings);\r
\r
var tuples = tupleBuilder.MergeSources(infos, files, states,moves).ToList();\r
var action = new CloudUploadAction(accountInfo, localInfo, tuple.FileState,\r
accountInfo.BlockSize, accountInfo.BlockHash,\r
"Poll", isUnselectedRootFolder, token, progress,tuple.Merkle); \r
- \r
+\r
using (StatusNotification.GetNotifier("Uploading {0}", "Uploaded {0}",true,\r
localInfo.Name))\r
{\r
\r
private async Task<bool> MoveForLocalMove(AccountInfo accountInfo, StateTuple tuple)\r
{\r
- //Is the file a directory or previous path missing?\r
- if (tuple.FileInfo is DirectoryInfo)\r
- return false;\r
//Is the previous path missing?\r
if (String.IsNullOrWhiteSpace(tuple.OldFullPath))\r
return false;\r
\r
var client = new CloudFilesClient(accountInfo);\r
var objectInfo = CloudAction.CreateObjectInfoFor(accountInfo, tuple.FileInfo);\r
+ objectInfo.X_Object_Hash = tuple.Merkle.TopHash.ToHashString();\r
var containerPath = Path.Combine(accountInfo.AccountPath, objectInfo.Container.ToUnescapedString());\r
//TODO: SImplify these multiple conversions from and to Uris\r
var oldName = tuple.OldFullPath.AsRelativeTo(containerPath);\r
//Then execute a move instead of an upload\r
using (StatusNotification.GetNotifier("Moving {0}", "Moved {0}", true,tuple.FileInfo.Name))\r
{\r
- await client.MoveObject(objectInfo.Account, objectInfo.Container, oldName.ToEscapedUri(),\r
+ await client.MoveObject(objectInfo.Account, objectInfo.Container, oldName.Replace('\\','/').ToEscapedUri(),\r
objectInfo.Container, objectInfo.Name).ConfigureAwait(false);\r
+ StatusKeeper.MoveFileState(tuple.OldFullPath, tuple.FilePath, objectInfo, tuple.Merkle);\r
+ //StatusKeeper.StoreInfo(tuple.FilePath,objectInfo,tuple.Merkle);\r
+ //StatusKeeper.ClearFolderStatus(tuple.FilePath);\r
}\r
return true;\r
}\r