Merge branch 'master' of https://code.grnet.gr/git/pithos-ms-client
[pithos-ms-client] / trunk / Pithos.Client.WPF / SelectiveSynch / SelectiveSynchViewModel.cs
index 00ce722..8520ca1 100644 (file)
@@ -49,12 +49,12 @@ using Pithos.Client.WPF.Properties;
 using Pithos.Client.WPF.Utils;
 using Pithos.Core;
 using Pithos.Interfaces;
+using Pithos.Network;
 
 namespace Pithos.Client.WPF.SelectiveSynch
 {
     class SelectiveSynchViewModel:Screen
-    {
-        private const string DirectoryType = "application/directory";
+    {        
         private readonly IEventAggregator _events ;
 
 
@@ -67,8 +67,9 @@ namespace Pithos.Client.WPF.SelectiveSynch
         }
 
         private ObservableCollection<ObjectInfo> _checks;
-        private readonly PithosMonitor _monitor;
+        //private readonly PithosMonitor _monitor;
         private bool _isBusy=true;
+        private string _apiKey;
 
         public ObservableCollection<ObjectInfo> Checks
         {
@@ -85,27 +86,31 @@ namespace Pithos.Client.WPF.SelectiveSynch
             NotifyOfPropertyChange(() => Checks);
         }
 
-        public SelectiveSynchViewModel(PithosMonitor monitor, IEventAggregator events, AccountSettings account)
+        public SelectiveSynchViewModel(/*PithosMonitor monitor,*/ IEventAggregator events, AccountSettings account, string apiKey)
         {
             Account = account;
             AccountName = account.AccountName;
             DisplayName = String.Format("Selective folder synchronization for {0}",account.AccountName);
-            _monitor = monitor;
+            //_monitor = monitor;
             _events = events;
+            _apiKey = apiKey;
             TaskEx.Run(LoadRootNode);
         }
 
         private void LoadRootNode()
-        {
-            var client = _monitor.CloudClient;
+        {            
+            //TODO: Check this
+            var client = new CloudFilesClient(AccountName,_apiKey){AuthenticationUrl=Account.ServerUrl,UsePithos=true};
+            client.Authenticate();
+            
 
-            var dirs = from container in client.ListContainers(_monitor.UserName)                       
+            var dirs = from container in client.ListContainers(AccountName)                       
                        select new DirectoryRecord
                                   {
                                       DisplayName = container.Name,
-                                      Uri=new Uri(client.StorageUrl,container.Name),
-                                      Directories = (from dir in client.ListObjects(_monitor.UserName, container.Name)                                                     
-                                                     where dir.Content_Type == DirectoryType
+                                      Uri=new Uri(client.StorageUrl,String.Format(@"{0}/{1}",Account.AccountName, container.Name)),
+                                      Directories = (from dir in client.ListObjects(AccountName, container.Name)                                                     
+                                                     where dir.IsDirectory
                                                      select dir).ToTree()
                                   };
             var ownFolders = dirs.ToList();
@@ -121,14 +126,14 @@ namespace Pithos.Client.WPF.SelectiveSynch
                                                             DisplayName=container.Name,
                                                             Uri = new Uri(client.StorageUrl, "../" + account.name + "/" + container.Name),
                                                             Directories=(from folder in client.ListObjects(account.name,container.Name)
-                                                                        where folder.Content_Type==DirectoryType
+                                                                        where folder.IsDirectory
                                                                         select folder).ToTree()
                                                         }).ToList()
                              };                                                          
 
             var othersNode = new DirectoryRecord
                                  {
-                                     DisplayName = "Others",
+                                     DisplayName = "Shared to me",
                                      Directories=accountNodes.ToList()
                                  };
 
@@ -165,17 +170,35 @@ namespace Pithos.Client.WPF.SelectiveSynch
         {
             var selections = account.SelectiveFolders;
 
-            if (selections.Count == 0)
-                return;
+
+                
             //Initially, all nodes are checked
             //We need to *uncheck* the nodes that are not selected
 
-            var selects = from DirectoryRecord rootRecord in RootNodes
+            var allNodes = (from DirectoryRecord rootRecord in RootNodes
+                           from DirectoryRecord record in rootRecord
+                           select record).ToList();
+
+            allNodes.Apply(record => record.IsChecked = false);
+
+            if (selections.Count == 0)
+            {
+            //    allNodes.Apply(record => record.IsChecked = false);
+                return;
+            } 
+            
+            var selects = (from DirectoryRecord rootRecord in RootNodes
                           from DirectoryRecord record in rootRecord
-                          where record.Uri !=null &&  !selections.Contains(record.Uri.ToString())
-                          select record;
+                          where record.Uri !=null &&  selections.Contains(record.Uri.ToString())
+                          select record).ToList();
+            //var shouldBeChecked = allNodes.Except(selects).ToList();
+
+            selects.Apply(record=>record.IsExplicitlyChecked=true);
+
+            //shouldBeChecked.Apply(record => record.IsChecked = true);
+            
+            
 
-            selects.Apply(record=>record.IsChecked=false);
         }
 
         protected string AccountName { get; set; }