Statistics
| Branch: | Revision:

root / trunk / Pithos.Client.WPF / SelectiveSynch / SelectiveSynchViewModel.cs @ 4d70073b

History | View | Annotate | Download (4.2 kB)

1 d3a13891 Panagiotis Kanavos
using System;
2 d3a13891 Panagiotis Kanavos
using System.Collections.Generic;
3 d3a13891 Panagiotis Kanavos
using System.Collections.ObjectModel;
4 d3a13891 Panagiotis Kanavos
using System.Collections.Specialized;
5 d3a13891 Panagiotis Kanavos
using System.IO;
6 d3a13891 Panagiotis Kanavos
using System.Linq;
7 d3a13891 Panagiotis Kanavos
using System.Text;
8 d3a13891 Panagiotis Kanavos
using Caliburn.Micro;
9 d3a13891 Panagiotis Kanavos
using Pithos.Client.WPF.Properties;
10 d3a13891 Panagiotis Kanavos
using Pithos.Interfaces;
11 d3a13891 Panagiotis Kanavos
using Pithos.Network;
12 d3a13891 Panagiotis Kanavos
13 d3a13891 Panagiotis Kanavos
namespace Pithos.Client.WPF.SelectiveSynch
14 d3a13891 Panagiotis Kanavos
{
15 d3a13891 Panagiotis Kanavos
    class SelectiveSynchViewModel:Screen
16 d3a13891 Panagiotis Kanavos
    {
17 d3a13891 Panagiotis Kanavos
        private IEventAggregator _events ;
18 d3a13891 Panagiotis Kanavos
19 d3a13891 Panagiotis Kanavos
        private string _rootPath;
20 77e10b4f Panagiotis Kanavos
        private string _cachePath;
21 d3a13891 Panagiotis Kanavos
        public string RootPath
22 d3a13891 Panagiotis Kanavos
        {
23 d3a13891 Panagiotis Kanavos
            get { return _rootPath; }
24 d3a13891 Panagiotis Kanavos
            set
25 d3a13891 Panagiotis Kanavos
            {
26 d3a13891 Panagiotis Kanavos
                _rootPath = value;
27 77e10b4f Panagiotis Kanavos
                _cachePath = Path.Combine(_rootPath, FolderConstants.CacheFolder);
28 d3a13891 Panagiotis Kanavos
                _pithosDirectory = new ObservableCollection<DirectoryRecord>{
29 77e10b4f Panagiotis Kanavos
                        new DirectoryRecord(_cachePath) {Info = new DirectoryInfo(value)}};
30 d3a13891 Panagiotis Kanavos
                NotifyOfPropertyChange(() => RootPath);
31 d3a13891 Panagiotis Kanavos
                NotifyOfPropertyChange(()=>PithosDirectory);
32 d3a13891 Panagiotis Kanavos
            }
33 d3a13891 Panagiotis Kanavos
        }
34 d3a13891 Panagiotis Kanavos
35 d3a13891 Panagiotis Kanavos
        private string _title;
36 d3a13891 Panagiotis Kanavos
        public string Title
37 d3a13891 Panagiotis Kanavos
        {
38 d3a13891 Panagiotis Kanavos
            get { return _title; }
39 d3a13891 Panagiotis Kanavos
            set
40 d3a13891 Panagiotis Kanavos
            {
41 d3a13891 Panagiotis Kanavos
                _title = value;
42 d3a13891 Panagiotis Kanavos
                NotifyOfPropertyChange(() => Title);
43 d3a13891 Panagiotis Kanavos
            }
44 d3a13891 Panagiotis Kanavos
        }
45 d3a13891 Panagiotis Kanavos
46 d3a13891 Panagiotis Kanavos
        public AccountSettings Account { get; set; }
47 d3a13891 Panagiotis Kanavos
48 d3a13891 Panagiotis Kanavos
        private ObservableCollection<DirectoryRecord> _pithosDirectory;
49 d3a13891 Panagiotis Kanavos
        public ObservableCollection<DirectoryRecord> PithosDirectory
50 d3a13891 Panagiotis Kanavos
        {
51 d3a13891 Panagiotis Kanavos
            get { return _pithosDirectory; }
52 d3a13891 Panagiotis Kanavos
        }
53 d3a13891 Panagiotis Kanavos
54 d3a13891 Panagiotis Kanavos
        private ObservableCollection<DirectoryInfo> _checks;
55 d3a13891 Panagiotis Kanavos
        public ObservableCollection<DirectoryInfo> Checks
56 d3a13891 Panagiotis Kanavos
        {
57 d3a13891 Panagiotis Kanavos
            get { return _checks; }
58 d3a13891 Panagiotis Kanavos
        }
59 d3a13891 Panagiotis Kanavos
60 d3a13891 Panagiotis Kanavos
        public void GetChecks()
61 d3a13891 Panagiotis Kanavos
        {
62 d3a13891 Panagiotis Kanavos
            var root = PithosDirectory[0];            
63 d3a13891 Panagiotis Kanavos
            _checks = new ObservableCollection<DirectoryInfo>(
64 d3a13891 Panagiotis Kanavos
                from record in root
65 d3a13891 Panagiotis Kanavos
                where record.IsChecked==true
66 d3a13891 Panagiotis Kanavos
                select record.Info);
67 d3a13891 Panagiotis Kanavos
            NotifyOfPropertyChange(() => Checks);
68 d3a13891 Panagiotis Kanavos
        }
69 d3a13891 Panagiotis Kanavos
70 7e26c075 Panagiotis Kanavos
        public SelectiveSynchViewModel(IEnumerable<string> folders, IEventAggregator events, AccountSettings account)
71 d3a13891 Panagiotis Kanavos
        {
72 d3a13891 Panagiotis Kanavos
            Account = account;
73 d3a13891 Panagiotis Kanavos
            AccountName = account.AccountName;
74 d3a13891 Panagiotis Kanavos
            Title = account.AccountName;
75 d3a13891 Panagiotis Kanavos
            RootPath = account.RootPath;
76 d3a13891 Panagiotis Kanavos
77 d3a13891 Panagiotis Kanavos
            SetInitialSelections(account);
78 d3a13891 Panagiotis Kanavos
        }
79 d3a13891 Panagiotis Kanavos
80 d3a13891 Panagiotis Kanavos
        private void SetInitialSelections(AccountSettings account)
81 d3a13891 Panagiotis Kanavos
        {
82 d3a13891 Panagiotis Kanavos
            var selections = account.SelectiveFolders;
83 d3a13891 Panagiotis Kanavos
            if (selections.Count == 0)
84 d3a13891 Panagiotis Kanavos
                return;
85 d3a13891 Panagiotis Kanavos
            var root = PithosDirectory[0];
86 d3a13891 Panagiotis Kanavos
            var selects= from record in root
87 d3a13891 Panagiotis Kanavos
                             where selections.Contains(record.Info.FullName)
88 d3a13891 Panagiotis Kanavos
                             select record;
89 d3a13891 Panagiotis Kanavos
            selects.Apply(record=>record.IsChecked=true);            
90 d3a13891 Panagiotis Kanavos
        }
91 d3a13891 Panagiotis Kanavos
92 d3a13891 Panagiotis Kanavos
        protected string AccountName { get; set; }
93 d3a13891 Panagiotis Kanavos
94 d3a13891 Panagiotis Kanavos
        public void SaveChanges()
95 d3a13891 Panagiotis Kanavos
        {
96 d3a13891 Panagiotis Kanavos
            var selections = GetSelectedFolderNames();
97 d3a13891 Panagiotis Kanavos
98 d3a13891 Panagiotis Kanavos
            SaveSettings(selections);
99 d3a13891 Panagiotis Kanavos
            var root = PithosDirectory[0];
100 d3a13891 Panagiotis Kanavos
            
101 d3a13891 Panagiotis Kanavos
            var added= (from record in root
102 d3a13891 Panagiotis Kanavos
                         where record.Added
103 d3a13891 Panagiotis Kanavos
                         select record.Info.FullName.ToLower()).ToArray();
104 d3a13891 Panagiotis Kanavos
            var removed= (from record in root
105 d3a13891 Panagiotis Kanavos
                         where record.Removed
106 d3a13891 Panagiotis Kanavos
                         select record.Info.FullName.ToLower()).ToArray();            
107 d3a13891 Panagiotis Kanavos
108 d3a13891 Panagiotis Kanavos
            _events.Publish(new SelectiveSynchChanges{Account=Account,Added=added,Removed=removed});
109 d3a13891 Panagiotis Kanavos
            
110 d3a13891 Panagiotis Kanavos
111 d3a13891 Panagiotis Kanavos
            
112 d3a13891 Panagiotis Kanavos
113 d3a13891 Panagiotis Kanavos
            TryClose(true);
114 d3a13891 Panagiotis Kanavos
        }
115 d3a13891 Panagiotis Kanavos
116 d3a13891 Panagiotis Kanavos
        
117 d3a13891 Panagiotis Kanavos
        private void SaveSettings(string[] selections)
118 d3a13891 Panagiotis Kanavos
        {
119 d3a13891 Panagiotis Kanavos
            Account.SelectiveFolders.Clear();
120 d3a13891 Panagiotis Kanavos
            Account.SelectiveFolders.AddRange(selections);
121 d3a13891 Panagiotis Kanavos
            Settings.Default.Save();            
122 d3a13891 Panagiotis Kanavos
        }
123 d3a13891 Panagiotis Kanavos
124 d3a13891 Panagiotis Kanavos
        private string[] GetSelectedFolderNames()
125 d3a13891 Panagiotis Kanavos
        {
126 d3a13891 Panagiotis Kanavos
            var root = PithosDirectory[0];
127 d3a13891 Panagiotis Kanavos
            var selections = from record in root
128 d3a13891 Panagiotis Kanavos
                         where record.IsChecked == true
129 d3a13891 Panagiotis Kanavos
                         select record.Info.FullName;
130 d3a13891 Panagiotis Kanavos
            return selections.ToArray();
131 d3a13891 Panagiotis Kanavos
        }
132 d3a13891 Panagiotis Kanavos
133 d3a13891 Panagiotis Kanavos
        public void RejectChanges()
134 d3a13891 Panagiotis Kanavos
        {
135 d3a13891 Panagiotis Kanavos
            TryClose(false);
136 d3a13891 Panagiotis Kanavos
        }
137 d3a13891 Panagiotis Kanavos
    }
138 d3a13891 Panagiotis Kanavos
}