Statistics
| Branch: | Revision:

root / trunk / Pithos.Client.WPF / SelectiveSynch / SelectiveSynchViewModel.cs @ 7e26c075

History | View | Annotate | Download (4.2 kB)

1
using System;
2
using System.Collections.Generic;
3
using System.Collections.ObjectModel;
4
using System.Collections.Specialized;
5
using System.IO;
6
using System.Linq;
7
using System.Text;
8
using Caliburn.Micro;
9
using Pithos.Client.WPF.Properties;
10
using Pithos.Interfaces;
11
using Pithos.Network;
12

    
13
namespace Pithos.Client.WPF.SelectiveSynch
14
{
15
    class SelectiveSynchViewModel:Screen
16
    {
17
        private IEventAggregator _events ;
18

    
19
        private string _rootPath;
20
        private string _fragmentsPath;
21
        public string RootPath
22
        {
23
            get { return _rootPath; }
24
            set
25
            {
26
                _rootPath = value;
27
                _fragmentsPath = Path.Combine(_rootPath, FolderConstants.FragmentsFolder);
28
                _pithosDirectory = new ObservableCollection<DirectoryRecord>{
29
                        new DirectoryRecord(_fragmentsPath) {Info = new DirectoryInfo(value)}};
30
                NotifyOfPropertyChange(() => RootPath);
31
                NotifyOfPropertyChange(()=>PithosDirectory);
32
            }
33
        }
34

    
35
        private string _title;
36
        public string Title
37
        {
38
            get { return _title; }
39
            set
40
            {
41
                _title = value;
42
                NotifyOfPropertyChange(() => Title);
43
            }
44
        }
45

    
46
        public AccountSettings Account { get; set; }
47

    
48
        private ObservableCollection<DirectoryRecord> _pithosDirectory;
49
        public ObservableCollection<DirectoryRecord> PithosDirectory
50
        {
51
            get { return _pithosDirectory; }
52
        }
53

    
54
        private ObservableCollection<DirectoryInfo> _checks;
55
        public ObservableCollection<DirectoryInfo> Checks
56
        {
57
            get { return _checks; }
58
        }
59

    
60
        public void GetChecks()
61
        {
62
            var root = PithosDirectory[0];            
63
            _checks = new ObservableCollection<DirectoryInfo>(
64
                from record in root
65
                where record.IsChecked==true
66
                select record.Info);
67
            NotifyOfPropertyChange(() => Checks);
68
        }
69

    
70
        public SelectiveSynchViewModel(IEnumerable<string> folders, IEventAggregator events, AccountSettings account)
71
        {
72
            Account = account;
73
            AccountName = account.AccountName;
74
            Title = account.AccountName;
75
            RootPath = account.RootPath;
76

    
77
            SetInitialSelections(account);
78
        }
79

    
80
        private void SetInitialSelections(AccountSettings account)
81
        {
82
            var selections = account.SelectiveFolders;
83
            if (selections.Count == 0)
84
                return;
85
            var root = PithosDirectory[0];
86
            var selects= from record in root
87
                             where selections.Contains(record.Info.FullName)
88
                             select record;
89
            selects.Apply(record=>record.IsChecked=true);            
90
        }
91

    
92
        protected string AccountName { get; set; }
93

    
94
        public void SaveChanges()
95
        {
96
            var selections = GetSelectedFolderNames();
97

    
98
            SaveSettings(selections);
99
            var root = PithosDirectory[0];
100
            
101
            var added= (from record in root
102
                         where record.Added
103
                         select record.Info.FullName.ToLower()).ToArray();
104
            var removed= (from record in root
105
                         where record.Removed
106
                         select record.Info.FullName.ToLower()).ToArray();            
107

    
108
            _events.Publish(new SelectiveSynchChanges{Account=Account,Added=added,Removed=removed});
109
            
110

    
111
            
112

    
113
            TryClose(true);
114
        }
115

    
116
        
117
        private void SaveSettings(string[] selections)
118
        {
119
            Account.SelectiveFolders.Clear();
120
            Account.SelectiveFolders.AddRange(selections);
121
            Settings.Default.Save();            
122
        }
123

    
124
        private string[] GetSelectedFolderNames()
125
        {
126
            var root = PithosDirectory[0];
127
            var selections = from record in root
128
                         where record.IsChecked == true
129
                         select record.Info.FullName;
130
            return selections.ToArray();
131
        }
132

    
133
        public void RejectChanges()
134
        {
135
            TryClose(false);
136
        }
137
    }
138
}