X-Git-Url: https://code.grnet.gr/git/pithos-ms-client/blobdiff_plain/5c46341ddfca483022e30a0c841627cf13b70fc6..0f369429e94e6c8128658b8f45447abbb0b0a5ca:/trunk/Pithos.Client.WPF/SelectiveSynch/SelectiveSynchViewModel.cs diff --git a/trunk/Pithos.Client.WPF/SelectiveSynch/SelectiveSynchViewModel.cs b/trunk/Pithos.Client.WPF/SelectiveSynch/SelectiveSynchViewModel.cs index bc9ea54..8520ca1 100644 --- a/trunk/Pithos.Client.WPF/SelectiveSynch/SelectiveSynchViewModel.cs +++ b/trunk/Pithos.Client.WPF/SelectiveSynch/SelectiveSynchViewModel.cs @@ -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 _checks; - private readonly PithosMonitor _monitor; + //private readonly PithosMonitor _monitor; private bool _isBusy=true; + private string _apiKey; public ObservableCollection 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,String.Format(@"{0}/{1}",Account.AccountName, container.Name)), - Directories = (from dir in client.ListObjects(_monitor.UserName, container.Name) - where dir.Content_Type == DirectoryType + 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,8 +170,8 @@ 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 @@ -174,15 +179,23 @@ namespace Pithos.Client.WPF.SelectiveSynch 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()) + where record.Uri !=null && selections.Contains(record.Uri.ToString()) select record).ToList(); - var shouldBeChecked = allNodes.Except(selects).ToList(); + //var shouldBeChecked = allNodes.Except(selects).ToList(); - selects.Apply(record=>record.IsChecked=false); + selects.Apply(record=>record.IsExplicitlyChecked=true); - shouldBeChecked.Apply(record => record.IsChecked = true); + //shouldBeChecked.Apply(record => record.IsChecked = true);