UUID Changes
[pithos-ms-client] / trunk / Pithos.Core / Agents / PollAgent.cs
index 98eda45..6d5d89b 100644 (file)
@@ -370,8 +370,12 @@ namespace Pithos.Core.Agents
                                        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
@@ -446,14 +450,18 @@ namespace Pithos.Core.Agents
                         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
@@ -762,7 +770,7 @@ namespace Pithos.Core.Agents
             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
@@ -788,9 +796,6 @@ namespace Pithos.Core.Agents
 \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
@@ -812,14 +817,18 @@ namespace Pithos.Core.Agents
 \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